표식 인터페이스
· 표식 인터페이스는 아무 메서드도 선언하지 않은 인터페이스
· 표식 인터페이스의 구현은 해당 클래스가 어떤 속성을 만족한다는 사실을 표현 (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에 적용될 표식 어노테이션 자료형을 작성하고 있다면, 반드시 어노테이션 자료형으로 구현해야 하는지, 표식 인터페이스로 만드는 것이 바람직 하지는 않은지 고민해야한다.
즉, 자료형이 필요하다면 인터페이스를 사용하라
'IT > Programming' 카테고리의 다른 글
<Effective Java> RULE 35 작명 패턴 대신 어노테이션을 사용하라 (0) | 2023.04.27 |
---|---|
<Effective Java> RULE 36 Override 어노테이션은 일관되게 사용하라 (0) | 2023.04.27 |
<Effective Java> RULE 38 인자의 유효성을 검사하라 (0) | 2023.04.27 |
<Effective Java> RULE 39 필요하다면 방어적 복사본을 만들라. (0) | 2023.04.27 |
<Effective Java> RULE 40 메서드 시그너처는 신중하게 설계하라 (0) | 2023.04.27 |