본문 바로가기
public void static main()/Book

[Effective Java] 아이템 41

by 햄리뮤 2023. 1. 31.
반응형

조금씩 꾸준히! 아자앙자! 힘내!

[책 규칙]

노란색 - 자세히 알아보고싶은 부분

초록색 - 핵심 개념 (블로그 정리시는 검은색으로!)

빨간색 - 무슨말인지 모르겠는 부분

[아이템 41] 정의 하려는 것이 타입이라면 마커 인터페이스를 사용하라!

마커 인터페이스?

  • 아무 메서드도 담고 있지 않고, 단지 자신을 구현하는 클래스가 특정 속성을 가짐을 표시해주는 인터페이스!
  • 일반적인 인터페이스와 동일하지만 사실상 아무 메소드도 선언하지 않은 인터페이스를 말한다!
  • 대표적으로 Serializable 인터페이스가 있다!
public interface HelloInterface{

}

왜쓸까?

  • 객체의 타입과 관련된 정보를 제공해준다!
  • 컴파일러와 JVM은 이 마커인터페이스를 통해 객체에 대한 추가적인 정보를 얻을 수 있게 된다!

마커 애너테이션?

  • 아무 매개변수 없이 단순히 대상에 마킹(marking)한다 는 뜻에서 마커 애너테이션이라 한다!
  • 거대한 애너테이션 시스템의 지원을 받는 다는 장점이 있다!
@Developer // 마커 애너테이션!
class LimaWorld {

}

마커 애너테이션보다 마커 인터페이스를 쓰자!

  • 구현한 클래스의 인스턴스들을 구분하는 타입으로 쓸 수 있나?
    • 마커 인터페이스 O
    • 마커 애너테이션 X
  • 적용 대상을 더 정밀하게 지정할 수 있다.
    • 적용 대상(@Target)을 ElementType.Type으로 선언한 애너테이션은 모든 타입(클래스, 인터페이스, 열거타입, 애너테이션)에 달 수 있다.
    • 부착할 수 있는 타입을 더 세밀하게 제한하지는 못한다... 
    • 마킹된 타입은 자동으로 그 인터페이스의 하위 타입임이 보장된다!

언제 마커 애너테이션이나 마커 인터페이스를 쓸까?

"이 마킹이 된 객체를 매개변수로 받는 메서드를 작성할 일이 있을까?"

  • YES => 마커 인터페이스
    • 마커 인터페이스를 해당 메서드의 매개변수 타입으로 사용하여 컴파일타임에 오류를 잡아낼 수 있다!
  • NO => 마커 애너테이션
    • 클래스와 인터페이스 외의 프로그램 요소(모듈, 패키지, 필드, 지역변수 등)에 마킹해야 할 때 애너테이션을 쓸 수밖에 없다!
    • 클래스와 인터페이스만이 인터페이스를 구현하거나 확장할 수 있기 때문이다.
핵심정리
마커 인터페이스와 마커 애너테이션은 각자의 쓰임이 있다. 새로 추가하는 메서드 없이 단지 타입 정의가 목적이라면 마커 인터페이스를 선택하자. 클래스나 인터페이스 외의 프로그램 요소에 마킹해야 하거나, 애너테이션을 적극 활용하는 프레임워크의 일부로 그 마커를 편입시키고자 한다면 마커 애너테이션이 올바른 선택이다. 적용 대상이 ElementType.TYPE인 마커 애너테이션을 작성하고 있다면, 잠시 여유를 갖고 정말 애너테이션으로 구현하는 게 옳은지, 혹은 마커 인터페이스가 낫지는 않을지 곰곰히 생각해보자!

 

 

으아아 이펙티브 자바 벌써 41이야 남은시간 집중해서 잘보자!

오늘도 도움을 주신 파워 블로그분들께 감사인사 드립니다!!

 

 

 

 

 

 

 

https://velog.io/@oyeon/%EC%95%84%EC%9D%B4%ED%85%9C41.-%EC%A0%95%EC%9D%98%ED%95%98%EB%A0%A4%EB%8A%94-%EA%B2%83%EC%9D%B4-%ED%83%80%EC%9E%85%EC%9D%B4%EB%9D%BC%EB%A9%B4-%EB%A7%88%EC%BB%A4-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%9D%BC

 

 

https://woovictory.github.io/2019/01/04/Java-What-is-Marker-interface/

 

[Java] 마커인터페이스

직렬화할 때 사용하는 방법 중에 Serializable과 Parcelable 두 개가 있다. 그 중에서 Serializable을 공부하던 중 이것이 마커 인터페이스라고 부르는 것을 보았다. 그래서 생긴 의문은 도대체 마커 인터

woovictory.github.io

https://kjhoon0330.tistory.com/m/entry/Java-%EB%A7%88%EC%BB%A4-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC

 

[Java]✏️마커 인터페이스에 대하여.

0. 들어가며🚶 String 클래스에 대하여 공부하다 String 클래스가 구현한 인터페이스 중 Serializable 이라는 인터페이스가 눈에 띄었습니다. Serializable은 직렬화를 위한 인터페이스로 객체를 파일에

kjhoon0330.tistory.com

** 그냥 하루하루 개인 공부한 것을 끄적 거리는 공간입니다.

이곳 저곳에서 구글링한 것과 강의 들은

내용이 정리가 되었습니다.

그림들은 그림밑에 출처표시를 해놓았습니다.

문제가 될시 말씀해주시면 해당 부분은 삭제 하도록하겠습니다. **

반응형

댓글