Mixin
package.lua 80번째 줄에서 Lua 오류: module 'Module:Namespace detect/data' not found.
객체 지향 프로그래밍 언어 에서 믹스인 (mixin 또는 mix-in)[1][2][3] 은 다른 클래스의 부모 클래스가 되지 않으면서 다른 클래스에서 사용할 수 있는 메서드를 포함하는 클래스 입니다. 다른 클래스가 믹스인의 메소드에 액세스하는 방법은 언어에 따라 다릅니다. 믹스인은 때때로 "상속"이 아니라 "포함"으로 설명됩니다.
믹스인은 코드 재사용성을 높이고 다중 상속으로 인해 발생할 수 있는 상속의 모호성을 피하거나[4] ( "다이아몬드 문제") 다중 상속에 대한 지원 부족을 해결하기 위해 사용될 수 있습니다. 믹스인은 구현 된 메서드가 있는 인터페이스 로 볼 수도 있습니다. 이 패턴은 종속성 역전 원칙을 적용하는 예입니다.
역사[편집]
믹스인은 Lisp Machine Lisp의 객체 지향 접근 방식이었던 Symbolics의 객체 지향 Flavors 시스템(Howard Cannon에서 개발)에서 처음 등장했습니다. 이 이름은 매사추세츠 소머빌 지역의 스티브 아이스크림 가게에서 영감을 받았습니다[1]. 아이스크림 가게의 주인은 기본적인 맛(바닐라, 초콜릿 등)과 추가적인 재료(땅콩, 쿠키, 사탕 등)의 조합으로 버무려진 아이스크림을 판매했습니다. 이 아이스크림은 "믹스 인 (mix-in)"이라고 불렸으며, 고유 상표가 되었습니다.
믹스인은 프로그래머가 특정 코드를 다른 클래스에 삽입 할 수 있도록하는 프로그래밍 개념입니다. 믹스인 프로그래밍은 특정 클래스에 작성된 기능들을 다른 클래스와 혼합하는 소프트웨어 개발 유형입니다. [5]
믹스인 클래스는 필요로 하는 기능들을 포함하는 상위 클래스의 역할을 합니다. 그런 다음 하위 클래스는 이 기능을 상속하거나 단순히 재사용 할 수 있습니다. 하지만 클래스를 특수화(Specialization)하는 수단으로는 사용할 수 없습니다. 일반적으로 믹스인은 엄격한 단일 "is-a"관계(상속관계)를 만들지 않고 원하는 기능을 하위 클래스로 전달합니다. 여기에 믹스인과 상속 개념의 중요한 차이점이 있습니다. 자식 클래스는 여전히 부모 클래스의 모든 기능을 상속 할 수 있지만, 해당 부모의 자식이라는 의미가 반드시 부여될 필요는 없습니다.
- 여러 클래스가 공용기능들을 사용할 수 있게 하는 다중상속의 메카니즘을 제공하지만, 다중상속의 복잡한 의미론은 제거할 수 있습니다. [6]
- 코드 재사용성 : 믹스인은 프로그래머가 서로 다른 클래스간에 기능을 공유하고자 할 때 유용합니다. 동일한 코드를 반복해서 작성하는 대신 공통기능을 믹스인으로 그룹화하고 이 기능을 필요로하는 다른 클래스들에 추가할 수 있습니다. [7]
- 믹스인은 부모 클래스의 모든 기능을 상속하지 않고 필요로 하는 기능만 상속하고 사용할 수 있습니다. [8]
- 추상 유형
- 데코레이터 패턴
- 정책 기반 설계
- Trait, 선형 구성이 필요하지 않는 유사구조
- ↑ 1.0 1.1 Using Mix-ins with Python
- ↑ Implementing Mix-ins with C# Extension Methods
- ↑ I know the answer (it's 42) : Mix-ins and C#
- ↑ 스크립트 오류: "citation/CS1" 모듈이 없습니다.
- ↑ http://c2.com/cgi/wiki?MixIn
- ↑ http://culttt.com/2015/07/08/working-with-mixins-in-ruby/
- ↑ http://naildrivin5.com/blog/2012/12/19/re-use-in-oo-inheritance.html
- ↑ 스크립트 오류: "citation/CS1" 모듈이 없습니다.
- MixIn at Portland Pattern Repository
- Mixins in ActionScript
- The Common Lisp Object System : An Overview by Richard P. Gabriel and Linda DeMichiel provides a good introduction to the motivation for defining classes by means of generic functions.
This article "Mixin" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:Mixin. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.