자바가 제공하는 다중 구현 메커니즘은 인터페이스와 추상 클래스 2가지가 있다. 둘 중 어떤 것을 사용해야 될 지 고민이 된다면 결론부터 말하자면 인터페이스를 사용하는 것이 좋다.

기존 클래스에도 손쉽게 새로운 인터페이스를 구현해넣을 수 있다.

인터페이스가 요구하는 메소드들만 추가하면 기존 클래스에 문제없이 새로운 인터페이스를 구현해넣을 수 있다. 반면 추상 클래스는 모든 자손을 상속받게 되기에 적절하지 않은 상황이 발생할 수 있다.

인터페이스 믹스인(mixin) 정의에 안성맞춤이다.

믹스인이란 클래스가 구현할 수 있는 타입으로, 믹스인을 구현한 클래스에 원래의 주된 타입 외에도 특정 선택정 행위를 제공한다고 선언하는 효과를 준다.

인터페이스로는 계층구조가 없는 타입 프레임워크를 만들 수 있다.

추상 클래스의 경우 상속을 하나만 받을 수 있기 때문에 n개의 추상 클래스가 있다면 가능한 모든 조합은 $2^n$개가 된다.

그럼 추상화 클래스는 언제?

이 부분은 작성자의 개인적인 생각입니다.

공통적인 필드가 많아서 묶는 경우에 사용할 수 있다고 생각한다. 인터페이스는 상태를 가질 수 없기 때문에 추상화 클래스에서 동일한 책임을 처리하기 위해 공통적인 필드를 가지고 있어야된다면 사용할 수 있을 것이다.

참고 자료

  • Effective Java 3rd Edition: Item 20 추상 클래스보다는 인터페이스를 우선하라

댓글남기기