잊지 않겠습니다.

  • Module은 Namespaces를 제공해서 이름이 충돌되는 것을 막아준다.
  • 이름은 Mixin 기능을 구현하는 데 사용된다.

모듈의 정의

  • 모듈 상수의 이름은 클래스 상수와 같이 첫문자를 대문자로 한다.
  • 메서드 선언 또한 비슷.

module Moral
    VERY_BAD = 0
    BAD = 1

    def Moral.sin(badness)
        return 'Moral sin : '
    end
end

module Trig
    PI = 3.1415
    def Trig.sin(x)
        return 'sin value '
    end

    def Trig.cos(x)
        return 'cos value '
    end

end

require 'trig'
require 'moral'

y = Trig.sin(Trig::PI / 4)
print y

wrongdoing = Moral.sin(Moral::VERY_BAD)
print wrongdoing

   

MIX-IN

  • Module과 Class는 다르게 움직인다.
  • Module에서는 instance를 가질 수 없게 된다.
  • Module은 Class가 아닌다.
  • Class에서 Module이 포함되게 될 경우에는 Module의 기능을 상속받게 되고, Class의 Instance Method와 동일하게 동작하게 된다.
  • include문을 이용해서 Module을 포함 할 수 있다.

include

  • include문은 ruby에서 선언이 되고, instance를 사용할 때는 아무런 일을 하지 않는다.
  • module의 method를 호출하는 일이 생기게 되면, 그때 추가가 된다.
  • class에 module의 인스턴스 method를 복사하는 것이 아니라, include는 class에 포함될 module에 대한 참조를 얻게 된다.
  • module의 참조를 얻기 때문에, module의 공통 변수나 모듈의 method를 수정하게 될 경우에는 모든 class에서 사용되는 module의 함수가 변경되게 된다.

다른 파일의 참조

requrie

해당 파일을 단 한번만 로드된다.

load

    실행될 때마다 해당 이름 파일을 가진 소스 코드는 포함된다.

Posted by Y2K
,