자바에는 여러 가지 구현을 허용하는 자료형을 만드는 방법이 두 가지가 있다. 인터페이스와 추상 클래스가 그것이다. 이 두 방법의 차이는 추상 클래스는 구현된 메소드를 포함할 수 있지만 인터페이스는 그럴수 없으며, 추상클래스가 규정하는 자료형을 구현하기 위해서는 추상 클래스를 반드시 계승해야 한다는 것이다.
인터페이스는 믹스인을 정의하는 데 이상적이다. 믹스인은 클래스가 주 자료형 이외에 추가로 구현할 수 있는 자료형으로, 어떤 선택적 기능을 제공한다는 사실을 선언하기 위해 쓰인다. (클래스 명 이외의 자료형을 정의)
인터페이스는 비 계층적인 자료형을 만들 수 있도록 한다. 계층적으로 잘 정리되지 않는 것들이 있을 때 사용하면 유용하다.
위의 예는 작곡가와 가수를 표현하는 인터페이스들이 있다. 그러나 가수이면서 작곡가인 사람들도 분명히 있다. 이러한 사람을 표현하는 것은 계승보다는 인터페이스를 2개다 구현함으로써 표현이 쉬워진다.
추상 골격 구현클래스를 중요 인터페이스마다 두면, 인터페이스의 장점과 추상 클래스의 장점을 결합할 수 있다. 인터페이스는 자료형을 정의하고, 구현하는 일은 골격 구현 클래스에 맡긴다. 클래스명에 Abstarct를 붙히는 관습이 있다.
위의 골격 구현 클래스는 추상 클래스를 자료형 정의 수단으로 사용했을 때 발생하는 제약사항들을 따르지 않아도 추상 클래스를 구현할 수 있도록 돕는다는 것이 장점이다. 추상 클래스는 객체를 생성하기 위해서는 해당 클래스를 반드시 계승하여서 객체를 생성해야 하지만, 골격 구현 클래스는 그러한 제약사항을 해결하도록 도움을 준다.
추상 클래스가 인터페이스보다 나은 점?
확장성이 좀 더 뛰어나다. 다음 릴리즈때 추상클래스의 공통메서드를 추가하면 추상클래스를 계승한 클래스들은 새로운 메소드를 바로 이용할 수 있지만, 인터페이스에 새로운 메소드를 정의하면 이를 구현한 클래스들은 반드시 이 메소드를 정의해야만 하기 때문이다.
'개발서적 > 이펙티브자바' 카테고리의 다른 글
[클래스와 인터페이스]규칙20. 태그달린 클래스 대신 클래스 계층을 활용하라 (0) | 2017.04.25 |
---|---|
[클래스와 인터페이스]규칙19. 인터페이스는 자료형을 정의할 때만 사용하라 (0) | 2017.04.25 |
[클래스와 인터페이스]규칙17. 계승을 위한 설계와 문서를 갖추거나, 그럴 수 없다면 계승을 금지하라 (0) | 2017.04.24 |
[클래스와 인터페이스]규칙16. 계승하는 대신 구성하라 (0) | 2017.04.24 |
[클래스와 인터페이스]규칙15. 변경 가능성을 최소화하 (0) | 2017.04.24 |