JAVA에는 특수한 목적의 참조타입이 두가지 있다.
열거 타입 (enum)
한정된 값만을 같는 데이터 타입
public Enum Day(){
MONDAY;
TUESDAY;
WEDNESDAY;
THURSDAY;
FRIDAY;
SATURDAY;
SUNDAY;
}
어노테이션 (annotation)
자바 애너테이션(Java Annotation)은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이다. 보통 @ 기호를 앞에 붙여서 사용한다. JDK 1.5 버전 이상에서 사용 가능하다. 자바 애너테이션은 클래스 파일에 임베디드되어 컴파일러에 의해 생성된 후 자바 가상머신에 포함되어 작동한다.
ordinal 메소드 : 해당 상수가 열거타입에서 몇번째 인지를 반환해주는 메소드
상수의 선언을 바꾸는 순간 오작동할 가능성이 있으며, 이미 사용중인 정수와 같은 상수는 추가 할수 없다.
public Enum Day(){
MONDAY;
TUESDAY;
WEDNESDAY;
THURSDAY;
FRIDAY;
SATURDAY;
SUNDAY;
public int numberOfDays() {return ordinal() + 1}
}
열거 타입 상수에 연결된 값들은 ordinal 메소드로 얻지말고, 인스턴스 필드에 저장해서 사용하자
public Enum Day(){
MONDAY(1);
TUESDAY(2);
WEDNESDAY(3);
THURSDAY(4);
FRIDAY(5);
SATURDAY(6);
SUNDAY(7);
private final int int numberOfDay;
Ensemble(int size) { this.numberOfDay = size; }
public int numberOfDay() { return numberOfDay; }
}
마커 어노테이션이 등장하면서 마커 인터페이스는 구식이 되었다라는 이야기를 들은적이 있을것이다.
마커 인터페이스 장점
마커 인터페이스는 이를 구현한 클래스의 인스턴스들을 구분하는 타입으로 쓸수 있으나, 마커 어노테이션은 어엿한 타입이기 때문에 그렇지 못하다.
적용 대상을 더 정밀하게 지정할수 있다.
마커 어노테이션의 장점
반대로 마커 어노테이션이 마커 인터페이스보다 나은 점으로는 거대한 어노테이션 시스템의 지원을 받을수 있다.
-> 마커 인터페이스와 마커 어노테이션은 각자의 쓰임이 있다.
정리