믹스 인이란?
컴퓨터 프로그래밍에서 믹스 인은 다른 클래스에 상속되지만 인스턴스화 할 수없는 클래스입니다. 단일 클래스는 많은 믹스 인을 상속 할 수 있으므로 많은 함수 모음을 쉽게 통합 할 수 있습니다. 많은 공통 프로그래밍 언어가 믹스 인 방법론을 사용하지만 C ++ 및 Java를 포함하여 더 많은 것이 있습니다. 일반적으로 믹스 인은 스크립팅 언어 또는 JavaScript 및 Perl과 같은 스크립트를 생성 할 수있는 언어로 제공됩니다.
믹스 인은 컴파일 중에 서브 클래스의 일부가된다는 점에서 독특합니다. 그들의 메소드와 상수는 서브 클래스에 포함됩니다. mixin 클래스의 또 다른 고유 한 특성은 런타임에 메소드를 정의하고 오브젝트에 바인드 할 수 있다는 것입니다. 대부분의 언어는 런타임이 아닌 컴파일 타임에 메소드를 바인딩하고 정의하는 다른 접근 방식을 사용합니다. 이 런타임 바인딩을 통해 믹스 인은 매우 유연합니다.
다중 상속의 일반적인 문제점은 메소드 호출의 모호성이며, 믹스 인은 다중 상속과 정확히 동일한 규칙을 따르지 않기 때문에이 문제를 해결할 수 있습니다. 예를 들어, 다중 상속은 소위 "죽음의 다이아몬드"를 만들 수 있습니다. 여기서 부모 클래스 A에는 하위 클래스 B와 C가 있고 클래스 D는 클래스 B와 C 모두에서 상속됩니다.이 시나리오의 문제는 클래스 A, B 및 C에서 동일한 이름은 모두 클래스 D로 상속 될 수 있으므로 명확한 구별없이 동일한 버전의 동일한 버전을 여러 버전으로 만들 수 있습니다. Mixins는 표준 다중 상속 에서처럼 덮어 쓰려고 시도하지 않고 각 버전의 메소드를 구별하여이 문제를 해결합니다.
믹스 인은 상속 된 클래스의 메소드를 대체하지 않습니다. 예를 들어, 클래스 A가 "myMethod"메소드를 정의하고 "myMethod"메소드를 정의한 mixin B를 상속 한 경우에도이 두 메소드 모두 모호함없이 호출 될 수 있으며 클래스 A에서 "myMethod"의 구현은 여전히 완전히 접근 가능합니다. 이러한 메소드의 호출 방식은 믹스 인이 구현되는 언어에 따라 다릅니다.
Java와 같은 믹스 인을 사용하지 않는 일부 프로그래밍 언어는 인터페이스를 사용하여이를 모방합니다. 인터페이스는 상수와 메소드 선언 만 포함 할 수 있으므로 이러한 언어의 인터페이스는 믹스 인의 전체 기능을 에뮬레이트하지 않습니다. 반면에 믹스 인은 전체 메소드 구현을 포함 할 수 있습니다. 믹스 인을 지원하지 않는 언어에는 대체로 동일한 작업을 수행하기 위해 동축 가능한 대안이 있습니다.