Eugene Lazutkin씨가 JavaScript에서 AOP를 진지하게 구현한 dojox.lang.aspect 에 대한 글을 썼습니다.

Dion씨는 AOSD(AOP 소프트웨어 컨퍼런스)에 참석해서 화면의 AOP에 흥분했던 사람으로서, 누군가 JavaScript에서 이런 작업을 해주었다는 것이 마음에 들었다고 합니다.

물론, 모든 것을 가로채야 하지만, JavaScript와 같은 동적 언어에서는 메소드를 래핑하기만 하면 되는 쉬운 일입니다. 하지만 AOP의 힘(그리고 복잡함!)은 jointpoints, pointcuts 그리고 웜홀의 세계에 있는 것이죠 :)

여기에는, 동적언어가 그닥 도움이 되지 못합니다. Eugene씨는 더 연구를 하셔서 피보나치 수열을 예제로 작성하셨습니다:

[code:js]
var fib = new Fibonacci;
 
// we will time the calculations
aop.advise(fib, "calculate", aop.timer("fib");
 
fib.calculate(15);
fib.setOrder(0);
fib.calculate(15);
 
// now lets use memoization
aop.advise(fib, "calculate", aop.memoizer());
aop.advise(fib, /^set/, aop.memoizerGuard("calculate"));
 
fib.setOrder(1); // set order back to 1 - regular Fibonacci numbers
fib.calculate(15);
fib.setOrder(0);

Memoization 의 결과는 이렇습니다:

제 컴퓨터의 Firefox 3 에서 15의 1-order(정규) 피보나치 숫자의 계산(987)은 momoization 없이는 ~48ms가 걸렸고 momoization을 하고 난 후에는 0-1ms가 걸렸습니다. 15의 0-order 피보나치 숫자의 계산(32768)은 memoization을 하지 않은 상태에서는 ~1155ms가 걸렸고, 이후에는 0-1ms 가 걸렸습니다. 보시다시피 이 기술은 그리 많은 시간을 들이지 않고도 엄청난 효과를 거둘 수 있습니다.

Java와 마찬가지로, 우리는 날마다 pointcuts에 대해 걱정하는 개발자를 보지 않아도 되게 되었습니다. 대신, 현존하는 것을 사용하는 것만으로도 매우 유용할 것입니다.

from dojox.lang.aspect : More than just interception on Ajaxian
Posted by 행복한고니 트랙백 0 : 댓글 0

댓글을 달아 주세요