Mixin

Posted 2006. 9. 20. 03:42
믹스인(mixin)은 일반적으로 스크립트 언어에서 다중 상속을 대신하는 방법으로 자주 쓰인다. 일반적으로 다중 상속을 사용하는 이유가 코드를 상속받기 위해서인데, Mixin은 클래스 계층을 변경하지 않고 코드만 포함시키는 방법을 제공하기 때문이다. 믹스인을 제공하는 대표적인 스크립트 언어가 루비인데, 다음 루비 프로그램을 살펴보자.


module Debug

  def whoAmI?

    "#{self.type.name} (\##{self.id}): #{self.to_s}"

  end

end

class Phonograph

  include Debug

  # ...

end

class EightTrack

  include Debug

  # ...

end

ph = Phonograph.new("West End Blues")

et = EightTrack.new("Surrealistic Pillow")

ph.whoAmI?       »       "Phonograph (#537766170): West End Blues"

et.whoAmI?       »       "EightTrack (#537765860): Surrealistic Pillow"

[http://www.rubycentral.com/book/tut_modules.html에서 발췌]


위에서 Phonograph와 EightTrack라는 두 가지 클래스를 정의했는데, 각각은 Debug 모듈을 임포트하고 있다. 루비언어는 클래스 내에서 모듈을 임포트할 경우 모듈 내의 함수가 자동으로 클래스의 메쏘드로 변환된다. 따라서 includeDebug라고 써주는 것만으로 두 클래스는 ph.whoAmI라는 메쏘드가 정의되게 된다. 즉 클래스 계층을 변화시키지 않고 코드만 재활용할 수 있는 것이다.