표식 인터페이스는 아무 메서드도 선언하지 않는 인터페이스다. Serializable 인터페이스가 대표적인 예이다. 그런데, 표식 어노테이션을 쓰게 되면 표식 인터페이스는 필요없는 것이 아닌가? 표식 어노테이션과 비교했을 떄 표식 인터페이스에는 두 가지 장점이 있따. 첫 째, 표식인터페이스는 결국 표식 붙은 클래스가 만드는 객체들이 구현하는 자료형이라는 것이다. 표식 어노테이션은 자료형이 아니다. 자료형이라면, 런타임중에 발견될 오류를 컴파일 시점에 발견할 수 있다.
표식 인터페이스가 어노테이션보다 나은 점 두 번째는, 적용 범위를 좀 더 세밀하게 지정할 수 있다는 것이다. 그렇다면 표식 어노테이션의 주된 장점은 무엇일까? 프로그램 안에서 어노테이션 자료형을 쓰기 시작한 뒤에도 더 많은 정보를 추가할 수 있다는 것이다. 이에 반해 표식 인터페이스를 쓰는 경우에는 일단 구현이 이루어지고 난 다음에는 새로운 메서드를 추가하는 것이 일반적으로 불가능하기 때문이다. 인터페이스를 구현하는 모든 클래스에 메서드를 추가해야 하기 때문이다.
그렇다면 표식 어노테이션과 표식 인터페이스는 각각 어떤 상황에 걸맞나? 클래스나 인터페이스 이외에 프로그램 요소에 적용되어야 하는 표식은 어노테이션이 적절하다. 이 표식이 붙은 객체만 인자로 받을 수 있는 메서드를 만들 생각이라면, 표식 인터페이스를 써야 한다. 그러면 해당 메서드의인자 자료형으로 해당 인터페이스를 사용할 수 있어서 컴파일 시점에서 오류를 발견할 수 있다.
요약
'개발서적 > 이펙티브자바' 카테고리의 다른 글
[메서드]규칙39. 필요하다면 방어적 복사본을 만들라 (0) | 2017.05.04 |
---|---|
[메서드]규칙38. 인자의 유효성을 검사하라 (0) | 2017.05.04 |
[열거형과 어노테이션]규칙36. Override 어노테이션은 일관되게 사용하라 (0) | 2017.05.04 |
[열거형과 어노테이션]작명 패턴 대신 어노테이션을 사용하라 (0) | 2017.05.04 |
[열거형과 어노테이션]규칙34. 확장 가능한 enum을 만들어야 한다면 인터페이스를 이용하라 (0) | 2017.05.04 |