IT/Programming / / 2023. 4. 27. 09:20

<Effective Java> RULE 37 자료형을 정의할 때 표식 인터페이스를 사용하라

반응형

 

표식 인터페이스

· 표식 인터페이스는 아무 메서드도 선언하지 않은 인터페이스

· 표식 인터페이스의 구현은 해당 클래스가 어떤 속성을 만족한다는 사실을 표현 (ex: Serializable Interface)

 

표식 인터페이스를 사용의 장점

· 결국 표식이 붙은 클래스가 만드는 객체들이 구현하는 자료형(표식 어노테이션은 자료형이 아니다)

ㄴ 표식 인터페이스 Serializable의 경우

· ObjectOutputStream.write(Object) 메서드는 인자가 Serializable 인터페이스를 구현하지 않은 객체에 오류를 낸다.

· 인자 자료형이 Object가 아니라 Serializable이었다면 컴파일 시 문제를 즉시 알 수 있다.

· 적용범위를 좀더 세밀하게 지정할 수 있다.

ㄴ 어노테이션 자료형 선언시 target을 Element.TYPE으로 지정하면 어떤 클래스나 인터페이스 적용 가능

ㄴ 특정한 인터페이스를 구현한 클래스에 적용할 수 있는 표식이 필요할 때

· 표식 인터페이스를 쓰면 그 인터페이스를 extends하도록 선언하면 된다.

· Set은 제한적 표식 인터페이스라고 할 수 있다.

ㄴ Set은 Collection의 하위 자료형에만 적용 가능, Collectioon에 정의된 메서드이외의 메서드 선언하지 않음

ㄴ Set은 표식 인터페이스가 아니라 add, equals와 같은 Collection의 일반 규약을 좀 더 상세히 바꾼다.

· 특정 인터페이스의 하위 자료형에만 적용하고 메서드 일반 규약을 바꾸지 않은 표식 인터페이스

ㄴ 객체 전체에 적용될 불변식을 기술

ㄴ 다른 클래스의 특정 메서드가 처리할 수 있는 객체라는 사실을 표현하기 위해 이용(Serializable Interface와 ObjectOutputStream.write(Object)메서드

 

표식 어노테이션의 장점

· 프로그램에서 어노테이션 자료형을 쓸 때도 더 많은 정보를 추가할 수 있다.

ㄴ 기본값을 갖는 어노테이션 자료형 요소를 더하면 된다.

ㄴ 표식 인터페이스는 불가능, 구현이 이루어지면 새로운 메서드 추가가 일반적으로 불가능하다.

· 더 큰 어노테이션 기능(facility)의 일부이다.

ㄴ 다양한 프로그램 요소에 어노테이션을 붙일 수 있도록 하는 프레임 워크 안에서 표식 어노테이션은 개발자가 일관성을 유지할 수 있도록 해준다.

자바 1.8 부터는 default 메서드를 통해 제한적으로 이 문제를 해결할 수 있다.

출처 입력

어느상황에 사용해야 하나?

표식 인터페이스

· 표식이 붙은 객체만 인자로 받는 메서드를 만들려면 표식 인터페이스를 써야 한다, 컴파일 시간에 형 검사를 진행 할 수 있다.

컴파일 시간에 형 검사를 진행 할 수 있게 된다.

ㄴ 어떤 표식을 특정 인터페이스 객체에 적용하려면 그 인터페이스의 하위 인터페이스로 정의한다.

 

표식 어노테이션

· 클래스나 인터페이스 외의 프로그램 요소에 적용

 

해당 표식을 영원히 특정 인터페이스 객체에만 적용할 것이라면 하위 인터페이스로 적용시키고, 아니라면 표식 어노테이션을 이용하는것이 좋다.

 

결론

· 표식 인터페이스 새로운 메서드가 없는 자료형 정의

· 표식 어노테이션 클래스나 인터페이스 이외의 프로그램 요소에 표식을 달때, 표식에 더 정보를 추가할 시 사용

만일 ElementType.Type에 적용될 표식 어노테이션 자료형을 작성하고 있다면, 반드시 어노테이션 자료형으로 구현해야 하는지, 표식 인터페이스로 만드는 것이 바람직 하지는 않은지 고민해야한다.

 

즉, 자료형이 필요하다면 인터페이스를 사용하라

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유