Skip to content
powerumc edited this page Nov 16, 2014 · 2 revisions

Javascript-OOP-AOP-IoC

자바스크립트로 쉽게 객체지향 프로그램(OOP) 라이브러리

travis build results

설치

  • npm
npm install javascript-oop-aop
  • bower
bower install javascript-oop-aop-ioc
  1. 기초 =========

이 라이브러리를 이용하면 매우 쉽게 클래스를 선언할 수 있습니다. oop.class(...) 를 사용합니다.

oop.class( [parents,] classInfo )

  1. 클래스 선언

    var Program = oop.class({
        say: function() { return "Hello"; }
    });
    
    var p = new Program();
    p.say();
    
    // return "Hello"
  2. 프로퍼티 선언

    • 기본적인 프로퍼티 선언

       // Define class.
       var Program = oop.class({
       	say: function() { return "Hello"; },
       	name: "엄준일"
       });
      
       var p = new Program();
       console.log("My name is ", p.name);
      
       // output
       My name is 엄준일
    • 사용자 정의 get/set 프로퍼티 선언

       var Program = oop.class({
       	say: function() { return "Hello"; },
       	name: "엄준일",
       	age: { get: function()      { return this._age; },
       		   set: function(value) { this._age = value; }
       });
      
       var p = new Program();
       p.age = 35;
       console.log("My age is ", p.age);
      
       // output
       My age is 35
  3. 상속 ================

oop.class( parents, classInfo )

  1. 부모 클래스 상속하기

    // Define parent class
    var Program = oop.class({
    	version: "1.0.2",
    	show: function() { 
        	console.log("openning window."); 
            /* some code.. */
        }
    });
    
    // Define class.
    var Outlook = oop.class( Program, {
    	run: function() { console.log("running outlook program."); }
    });
    
    // Run code.
    var outlook = new Outlook();
    console.log("version " + outlook.version);
    outlook.run();
    outlook.show();
    
    // Output
    version 1.0.2
    running outlook program.
    openning window.
  2. 자기 자신 참고 (this or self)

    var Program = oop.class({
    	version: "1.0.2",
    	show: function() { 
        	console.log("openning window.");
            /* some code.. */ }
    });
    
    var Outlook = oop.class( Program, {
    	run: function(self) { // inject 'self' argument name.
        	console.log("running outlook program.");
            
            // *** HERE ***
            // a method call inhertianced Program.show method.
            self.show();
        }
    });
    
    var outlook = new Outlook();
    console.log("version " + outlook.version);
    outlook.run();
    //outlook.show();      remove this line.
    
    // Output
    version 1.0.2
    running outlook program.
    openning window.
  3. 부모 인스턴스 참조

    var Program = oop.class({
        run: function() { console.log("run Program.") }
    });
    
    var Outlook = oop.class( Program, { // HERE inheritance Program class.
        run: function(base) { 
            console.log("run Outlook.");  
    
            // *** HERE ***
            // You can call parent method from base keyword.
            base.run();
        }
    });
    
    // Output
    // run Outlook.
    // run Program.
  4. 인젝션 (주입) =============

oop.inject( [argument], ... )

  1. 매개변수 주입

     var Program = oop.class({
    	version: "v1.0"
     });
     
     var Outlook = oop.class( Program, {
     	version: "v2.0",
     	run: function(base, self) { 
        	console.log("base version: "   , base.version)
        	console.log("current version: ", self.version);
        }
     });
     
     var outlook = new Outlook();
     outlook.run();
     
     // Output
     base version: v1.0
     current version: v2.0
  2. 컨테이너로부터 주입

  3. 가로채기 - AOP ======================

  • oop.interception( function, behavior )

  • oop.interceptionBehavior( before, after, exception, finally_ )

  1. 클래스 또는 메서드 가로채기

    • 메서드 가로채기

      var Program = oop.class({
          run: function(msg) { console.log("run Program. ", msg); }
      });
      
      // *** HERE ***
      // Setup the interception a method
      var p = new Program();
      oop.interception( p.run, oop.behaviors.LoggingBehavior );
      
      // Call a 'run' method.
      p.run("Now running...");
      
      // Output
      ------ enter interception ------
      [Thu Nov 13 2014 09:29:41 GMT+0900 (KST)]  {}
      run Program.  Now running...
      ------ end interception ------
    • 클래스 인스턴스 가로채기

      var Program = oop.class({
          run: function()       { console.log("run Program.", msg); },
          terminate: function() { console.log("Terminated the Program.") }
      });
      
      // *** HERE ***
      // Pass class instance arguments
      var p = new Program();
      oop.interception( p, oop.behaviors.LoggingBehavior );
      
      // Call a 'run' method.
      p.run("Now running...");
      p.terminate();
      
      // Output
      ------ enter interception ------
      [Thu Nov 13 2014 09:29:41 GMT+0900 (KST)]  {}
      run Program.  Now running...
      Terminated the Program.
      ------ end interception ------
  2. 사용자 정의 가로채기 (Behaviors)

    • 사용자 정의 가로채기 정의

      가로채기 행위를 사용자 정의로 만드시려면 oop.interceptionBehavior 메서드를 호출합니다.

    var customBehavior = oop.interceptionBehavior(
    	function() { console.log("before"); },
    	function() { console.log("after"); },
    	function() { console.log("throw exception"); },
    	function() { console.log("finally"); }
    );
    
    var Program = oop.class({
    	run: function() { console.log("run Program."); }
    });
    
    var p = new Program();
    oop.interception(p,  customBehavior);
    p.run();
    
    // Output
    before
    run Program.
    after
    finally

    If it throw the exception, invoke exception behavior. For examples,

    var Program = oop.class({
        run: function() { 
        	console.log("run Program."); 
            throw "crashing... "; 
     }});
    
    var p = new Program();
    oop.interception(p,  customBehavior);
    p.run();
    
    // Output
    before
    run Program.
    throw exception crashing...   // HERE exception behavior.
    finally