티스토리 뷰
728x90
반응형
정의하려는 것이 타입이라면 마커 인터페이스를 사용하라
- 아무 메서드도 담고 있지 않고, 단지 자신을 구현하는 클래스가 특정 속성을 가짐을 표시해주는 인터페이스를 마커 인터페이스라고 합니다.
- 앞에서 나온 Cloneable 인터페이스, Serializable 인터페이스가 좋은 예입니다.
- Cloneable 인터페이스의 경우 복제할 수 있다는것을 알리며, Serializable 인터페이스의 경우는 ObjectOutputStream을 통해 자신을 직렬화할 수 있다고 알립니다.
💡마커 인터페이스가 마커 애너테이션보다 나은점
- 마커 인터페이스는 이를 구현한 클래스의 인스턴스들을 구분하는 타입으로 사용할 수 있으나 마커 애너테이션은 그렇지 않습니다.
- 마커 인터페이스는 타입이기 때문에 컴파일 시점에서 오류를 잡을 수 있지만 마커 애너테이션의 경우는 런타임에서 오류를 잡을 수 있습니다.
- 마커 인터페이스는 적용 대산을 더 정밀히 지정할 수 있습니다.
- 마커 애너테이션에서는 적용 대상(@Target)을 ElementType.TYPE으로 지정할 수 있는데 이렇게 지정을 하게되면 모든 타입(클래스, 인터페이스, 열거 타입, 애너테이션)에 선언할 수 있는데 이렇게 되면 더 세밀하게 제한하지 못한다는 뜻입니다.
💡마커 애너테이션을 사용해야 하는 경우
- 클래스와 인터페이스 외의 프로그램 요소(모듈, 패키지, 필드, 지역변수 등)에 마킹해야하는 경우에는 애너테이션을 사용해야 합니다. 마킹 인터페이스는 클래스와 인터페이스에만 사용할 수 있기 때문입니다.
💡마커 인터페이스를 사용해야 하는 경우
- 클래스나 인터페이스는 마킹이 필요할 때 이 객체를 매개변수로 받는 메서드를 쓸 일이 있을까? 라는 고민을 했을 경우
- Yes라면 마커 인터페이스를 사용함으로써 컴파일 타임에 오류를 잡을 수 있습니다.
- No라면 마커 애너테이션을 선택해서 일관성을 유지할 수 있습니다.
728x90
반응형
'스터디 > 이펙티브 자바' 카테고리의 다른 글
이펙티브 자바 - Item43. 람다보다는 메서드 참조를 사용하라 (0) | 2022.07.30 |
---|---|
이펙티브 자바 - Item42. 익명클래스 보다는 람다를 사용하라 (0) | 2022.07.30 |
이펙티브 자바 - Item40. @Override 애너테이션을 일관되게 사용하라 (0) | 2022.07.29 |
이펙티브 자바 - Item39. 명명패턴보다 애너테이션을 사용하라. (0) | 2022.07.28 |
이펙티브 자바 - Item38. 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라. (0) | 2022.07.27 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- polling publisher spring boot
- spring boot redisson destributed lock
- java userThread와 DaemonThread
- transactional outbox pattern
- microkernel architecture
- transactional outbox pattern spring boot
- spring boot redisson 분산락 구현
- service based architecture
- 람다 표현식
- JDK Dynamic Proxy와 CGLIB의 차이
- redis sorted set
- redis sorted set으로 대기열 구현
- spring boot excel download paging
- spring boot redisson sorted set
- 공간 기반 아키텍처
- redis 대기열 구현
- space based architecture
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- spring boot redis 대기열 구현
- spring boot excel download oom
- pipeline architecture
- @ControllerAdvice
- 서비스 기반 아키텍처
- 자바 백엔드 개발자 추천 도서
- spring boot poi excel download
- 트랜잭셔널 아웃박스 패턴 스프링부트
- 레이어드 아키텍처란
- java ThreadLocal
- spring boot 엑셀 다운로드
- pipe and filter architecture
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함