개발하는 두더지

[Effective Java 규칙37] 자료형을 정의할 때 표식 인터페이스를 사용하라 본문

Java,Android

[Effective Java 규칙37] 자료형을 정의할 때 표식 인터페이스를 사용하라

덜지 2018. 10. 15. 16:34

[Effective Java 규칙37] 자료형을 정의할 때 표식 인터페이스를 사용하라

Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다.


표식 인터페이스 ( Marker Interface ) 는 아무 메서드도 선언하지 않는 인터페이스다. 클래스를 만들 때 표식 인터페이스를 구현한다는 것은, 해당 클래스가 어떤 속성을 만족한다는 것을 표시하는 것과 같다. 대표적인 예로 Serializable 인터페이스가 그 예다.


package java.io;

public interface Serializable {
}

Serializable 인터페이스를 구현하는 클래스는 해당 클래스로 만든 객체들은 직렬화할 수 있다는 뜻이다.


표식 어노테이션 ( Marker Annotation ) 과 비슷해보일 수 있지만 차이점이 있다. 표식 인터페이스는 자료형이고 표식 어노테이션은 자료형이 아니다. 예를들어, ObjectOutputStream.write(Object) 메서드는 인자가 Serializable 인터페이스를 이용하지 않으면 오류가 발생한다. 


표식 인터페이스와 표식 어노테이션은 쓰임새가 다르다.

새로운 메서드가 없는 자료형을 정의하고자 한다면 표식 인터페이스를 이용해야하고, 클래스나 인터페이스 이외의 프로그램 요소에 표식을 달고, 앞으로 표식에 더 많은 정보를 추가할 가능성이 있다면 표식 어노테이션을 사용해야 한다.


이번 규칙은

자료형을 정의하려는 것이 아니라면 인터페이스는 사용하지 말라 라는 원칙의 역이다.

자료형이 필요하다면 인터페이스를 사용하라에 가깝다.









Comments