자바 세계에서 (더 정확하게는 다중 상속 / 믹 신이없는 경우) 경험 법칙은 매우 간단합니다. "클래스 상속보다 객체 구성을 선호"합니다.
믹스 인, 특히 스칼라도 고려한다면 어떻게 변경되는지 알고 싶습니다.
믹스 인은 다중 상속 또는 더 많은 클래스 구성의 방법으로 간주됩니까?
"클래스 구성보다 객체 구성 선호"(또는 그 반대) 지침도 있습니까?
나는 사람들이 믹스 인을 사용 (혹은 남용) 할 때 많은 예를 보았는데, 오브젝트 컴포지션도 그 일을 할 수 있고 어느 것이 더 좋은지 항상 확신하지 못합니다. 그들과 매우 비슷한 것을 얻을 수있는 것 같지만 몇 가지 차이점이 있습니다.
- 가시성-mixin을 사용하면 모든 것이 공용 API의 일부가되지만 구성에서는 그렇지 않습니다.
- 장황함-대부분의 경우 믹스 인은 덜 장황하고 사용하기가 조금 더 쉽지만 항상 그런 것은 아닙니다 (예 : 복잡한 계층 구조에서 자체 유형을 사용하는 경우).
짧은 대답은 "상황에 따라 다름"이라는 것을 알고 있지만, 이것이 더 나은 경우에는 일반적인 상황이있을 수 있습니다.
지금까지 생각해 낼 수있는 지침의 몇 가지 예 (내가 두 가지 특성 A와 B가 있고 A가 B의 몇 가지 방법을 사용하고 싶다고 가정) :
- B의 메소드로 A의 API를 확장하려면 mixins, 그렇지 않으면 구성. 그러나 내가 만들고있는 클래스 / 인스턴스가 공용 API의 일부가 아닌 경우에는 도움이되지 않습니다.
- 믹스 인이 필요한 패턴 (예 : Stackable Trait Pattern ) 을 사용하려는 경우 쉬운 결정입니다.
- 순환 종속성이있는 경우 자체 유형이있는 믹스 인이 도움이 될 수 있습니다. (나는 이런 상황을 피하려고 노력하지만 항상 쉬운 것은 아닙니다)
- 구성을 수행하는 방법을 동적 런타임 결정을 원한다면 개체 구성을 수행하십시오.
많은 경우 믹스 인이 더 쉬운 것 같지만 (그리고 / 또는 덜 장황한) "신 클래스"와 같은 몇 가지 함정과 두 개의 아티 마 기사에 설명 된 다른 것들이 있다고 확신합니다 : 파트 1 , 파트 2 (BTW it 대부분의 다른 문제는 스칼라와 관련이 없거나 심각하지 않은 것 같습니다.)
이와 같은 힌트가 더 있습니까?
this => Logging
? 컴파일되지 않습니다.