열거형
서로 관련된 상수를 편리하게 선언하기 위한 것으로 여러 상수를 정의할 때 사용하면 유용하다
값과 타입을 모두 체크한다
열거형을 정의하는 방법 : enum 열거형이름 { 상수명1, 상수명2, ...}
열거형에 정의된 상수를 사용하는 방법 : '열거형이름.상수명'
열거형의 조상 jave.lang.Enum 클래스
모든 열거형은 Enum의 자손이며, 아래의 메서드를 상속받는다
메서드 | 설명 |
Class<E> getDeclaringClass() | 열거형의 Class 객체를 반환한다 |
String name() | 열거형 상수의 이름을 문자열로 반환한다 |
int ordinal() | 열거형 상수가 정의된 순서를 반환한다(0부터 시작) |
T valueOf(Class<T> enumType, String name) |
지정된 열거형에서 name과 일치하는 열거형 상수를 반환한다 |
열거형에 멤버 추가하기
불연속적인 열거형 상수의 경우, 원하는 값을 괄호()안에 적는다
enum Direction { EAST(1), SOUTH(5), WEST(-1), NORTH(10) }
괄호()를 사용하려면, 인스턴스 변수와 생성자를 새로 추가해 줘야 한다
열거형의 생성자는 묵시적으로 private이므로, 외부에서 객체 생성이 불가하다
열거형에 추상메서드 추가하기
fare(int distance)를 선언하면 각 열거형 상수가 이 추상 메서드를 구현해야 한다
애너테이션 Annatation.java
주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보를 제공한다
@Test
public void method() {} //사용예시
표준 애너테이션
@Override
오버라이딩을 올바르게 했는지 컴파일러가 체크하게 된다
@Deprecated
앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙인다
@FunctionalInterface
함수형 인터페이스에 붙이면, 컴파일러가 올바르게 작성했는지 체크한다
함수형 인터페이스에는 하나의 추상메서드만 가져야 한다는 제약이 있다
@SupressWarnings
컴파일러의 경고메시지가 나타나지 않게 억제한다
괄호()안에 억제하고자 하는 경고의 종류를 문자열로 지정한다
@SupressWarnings(“unchecked”) //지네릭스와 관련된 경고를 억제
@SupressWarnings ((“deprecation”, “unchecked”, “varargs”))
-Xling 옵션으로 컴파일하면, 경고메시지를 확인할 수 있다
@SafeVarargs
메서드에 선언된 가변인자의 타입이 non-reifiable타입일 경우, 해당 메서드를 선언하는 부분과
호출하는 부분에서 'unchecked'경고가 발생한다
코드에 문제가 없을때 이 경고를 억제하기 위해 @SafeVarargs를 사용한다
메타 애너테이션
메타 애너테이션은 ‘애너테이션을 위한 애너테이션’이다
java.lang.Annotation패키지에 포함되어있다
@Target
애너테이션을 정의할 때 적용대상 지정에 사용한다
여러개를 지정할 때는 배열에서처럼 괄호 { }를 사용해야 한다
@Retention
애너테이션이 유지(retention)되는 기간을 지정하는데 사용한다
유지 정책 | 의미 |
SOURCE | 소스 파일에만 존재. 클래스 파일에는 존재하지 않음 |
CLASS | 클래스 파일에 존재. 실행시에 사용불가. 기본값 |
RUNTIME | 클래스 파일에 존재. 실행시에 사용가능 |
컴파일러에 의해 사용되는 애너테이션의 유지 정책은 SOURCE이다
실행시에 사용 가능한 애너테이션의 정책은 RUNTIME이다
@Documented
javadoc으로 작성한 문서에 포함시키려면 @Documented를 붙인다
@Inherited
애너테이션을 자손 클래스에 상속하고자 할 때 @Inherited를 붙인다
@Repeatable
반복해서 붙일 수 있는 애너테이션을 정의할 때 사용한다
@Native
네이티브 메서드에 의해 참조되는 상수필드에 붙이는 애너테이션이다
**네이티브 메서드 : JVM이 설치된 OS의 메서드