
401
자바에서 클래스는 원하는 개수만큼 인터페이스를 구현할 수 있다. 이런 모델은 클래스가 여러
추상을 구현해야 하는 경우에 매우 유용하다. 불행히도 이 접근 방법에는 한 가지 단점이 있다.
많은 인터페이스에서 그 기능의 대부분은 해당 인터페이스를 사용하는 모든 클래스에서 공통적
인 준비 코드가 없이는 구현할 수 없다.
인터페이스에는 구현 클래스의 나머지 부분과는 관계가 없는(직교하는) 멤버가 들어 있는 경
우가 자주 있다. 믹스인
mixin
1
은 그런 식으로 모아둔 재사용 가능한 상태와 동작을 의미하는 용
어다. 이상적인 경우, 이런 동작을 그 동작을 사용하는 구체적인 타입과 독립적으로 유지할 수
있다.
버전
8
이전의 자바에서는 그런 식으로 재사용 가능한 코드를 정의하고 사용할 수 있는 방법이
없었다. 대신 자바 프로그래머들은 주어진 인터페이스에 대한 구현을 재사용하기 위해 그때그때
만들어낸 관례를 사용해야 했다. 최악의 경우, 개발자가 동일한 코드를 복사해서 그 기능을 필요
로 하는 모든 클래스에 붙여 넣기도 한다. 그보다 너 낫지만 완전하지 않은 해법은, 동작에 대한
별도의 클래스를 구현해서 원래 클래스 안에 그런 동작 지원 클래스의 인스턴스를 유지하면서,
메서드 호출을 지원 클래스의 인스턴스에 위임하는 방식이다. 이런 접근 방식은 잘 작동하기는