마커 인터페이스란,
인터페이스 내에 아무 메서드가 없고 자신을 구현하는 클래스가 특정 속성을 가짐을 표시해주는 인터페이스이다.
대표적으로 Serializable 인터페이스가 있다.
마커 인터페이스 vs 마커 애너테이션
마커 인터페이스보다 더 나중에 등장한 마커 애너테이션이 있다.
1. 마커 인터페이스는 이를 구현한 클래스의 인스턴스들을 구분하는 타입으로 사용할 수 있다.
2. 마커 인터페이스가 적용대상을 더 정밀하게 지정할 수 있다.
적용 대상(@Target)을 ElementType.TYPE으로 선언한 애너테이션은 모든 타입(클래스, 인터페이스, enum, 애너테이션)에 달 수 있다. 이는 부착할 수 있는 타입을 더 세밀하게 지정하지 못한다는 뜻이 될수도 있다.
특정 인터페이스를 구현한 클래스에만 적용하고 싶은 마커라면 마커 인터페이스로 구현하는 것이 더 좋을 수 있다.
3. 마커 애너테이션은 거대한 애너테이션 시스템의 지원을 받는다. 따라서 애너테이션을 적극 활용하는 프레임워크에서는 마커 애너테이션을 쓰는 쪽이 일관성을 지키는데 유리할 것이다.
그렇다면 두 가지의 쓰임을 어떻게 구분해야 할까?
모듈, 패키지, 필드, 지역변수 등 프로그램 요소에 마킹해야 할 때는 애너테이션을 쓸 수 밖에 없다,
하지만 마킹이 된 객체를 매개변수로 받는 메서드를 작성할 일이 있다면 마커 인터페이스를 써야 한다.
'Java' 카테고리의 다른 글
[Effectiva Java][아이템42] 익명 클래스보다는 람다를 사용하라 (0) | 2022.07.04 |
---|---|
[Effectiva Java][아이템40] @Override 애너테이션을 일관되게 사용하라 (0) | 2022.07.04 |
[Effectiva Java][아이템37] ordinal 인덱싱 대신 EnumMap을 사용하라 (0) | 2022.06.18 |
[Effective Java][아이템36] 열거정수를 집합으로 사용해야 하는 경우 - EnumSet (0) | 2022.06.18 |
[Effective Java][아이템35] ordinal 메서드를 잘못사용한 사례와 해결방법 (0) | 2022.06.12 |