[자바 라이브 스터디] 11주차 - Enum과 애노테이션
- 목표) 자바의 열거형과 애노테이션에 대해 학습하세요.
1. Enum
- 정의) 서로 관련된 상수를 편리하게 선언하기 위한 것
- 예시)
- enum 사용 x
- enum 사용 o
- 특징)
- JDK1.5부터 새로 추가됨
타입에 안전한 열거형(typesafe eum)- 자바 Enum은 값뿐만 아니라 타입도 관리해서 논리적인 오류 줄일 수 있음
- 값 같아도 타입이 다르면 컴파일 에러 발생
- 상수와 달리 열거형 상수 사용 시, 상수 값이 바뀌어도 기존 소스 다시 컴파일할 필요 없음
- 비교 시
==,compareTo()사용 가능.<,>같은 비교 연산자 사용 불가능. - switch문의 조건식에 사용할 때 열거형 이름은 적지 않고 상수 이름만 적어야 함
java.lang.Enum- 모든 자바 열거체의 공통된 조상 클래스로 열거체를 조작하기 위한 다양한 메소드 가짐
- 제공하는 메소드
- cf) 모든 열거체에 컴파일러가 자동으로 추가해 주는 메소드
static E values()→ 열거형의 모든 상수를 배열에 담아 반환static E valueOf(String name)→ name과 일치하는 열거형 상수 반환- 예시)
메서드 | 설명 |
Class<E> getDeclaringClass() | 열거형의 Class객체 반환 |
String name() | 열거형 상수의 이름을 문자열로 반환 |
int ordinal() | 열거형 상수가 정의된 순서 반환(0부터 시작) |
T valueOf(Class<T> enumType, String name) | name과 일치하는 열거형 상수 반환 |
2. 애노테이션
- 정의) 프로그램 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것
- 특징)
- 주석처럼 프로그래밍 언어에 영향 미치지 않으면서 다른 프로그램에게 유용한 정보 제공함
- JDK에서 제공하는 애너테이션은
java.lang.annotation패키지에 포함되어 있음 - 표준 애너테이션은 주로 컴파일러에게 유용한 정보 제공함
- 메타 에너테이션은 새로운 에너테이션 정의할 때 사용함
@Retention- 정의) 애너테이션이 유지되는 범위를 지정하는데 사용함
- 특징)
- 유지 정책 종류
SOURCE→ 컴파일러가 사용하는 대부분의 애너테이션의 유지 정책CLASS→ 컴파일러가 애너테이션 정보를 클래스 파일에 저장할 순 있지만, 클래스 파일이 JVM에 로딩될 때 애너테이션 정보가 무시되어 실행 시에 사용 불가함RUNTIME→ Reflection 통해 클래스 파일에 저장된 애너테이션 정보 읽어 처리 가능해짐- 지역 변수에 붙은 애너테이션은 컴파일러만 인식할 수 있어서
RUNTIME유지정책인 애너테이션 붙여도 실행 시에 인식되지 않음 -
@Target - 정의) 애너테이션이 적용 가능한 대상을 지정하는데 사용함
- 예시)
@Traget({TYPE, FILED}) - 특징)
- 적용 대상의 종류
@Documented- 정의) 애너테이션 정보가 javadoc으로 작성된 문서에 포함되게 함
- 특징) 자바에서 제공하는 기본 애너테이션 중
@Override와@SuppressWarnings를 제외하곤 모두 해당 어노테이션이 붙어 있음
@Override | 컴파일러에게 오버라이딩하는 메서드라는 것을 알림 |
@Deprecated | 앞으로 사용하지 않을 것을 권장하는 대상에 붙임 |
@SuppressWarnings | 컴파일러의 특정 경고메시지가 나타나지 않게 해줌 |
@SafeVarargs | 지네릭스 타입의 가변인자에 사용함 |
@Functionallnterface | 함수형 인터페이스라는 것을 알림 |
@Native | native 메서드에서 참조되는 상수 앞에 붙임 |
@Retention | 애너테이션이 유지되는 범위를 지정하는데 사용함 |
@Target | 애너테이션이 적용 가능한 대상을 지정하는데 사용함 |
@Documented | 애너테이션 정보가 javadoc으로 작성된 문서에 포함되게 함 |
@Inherited | 애너테이션이 자손 클래스에 상속되도록 함 |
@Repeatable | 애너테이션을 반복해서 적용할 수 있게 함 |
SOURCE | 소스 파일에만 존재. 클래스 파일에는 존재하지 않음 |
CLASS (default) | 클래스 파일에 존재. 실행 시에 사용 불가 |
RUNTIME | 클래스 파일에 존재. 실행 시에 사용 가능 |
ANNOTATION_TYPE | 애너테이션 |
CONSTRUCTOR | 생성자 |
FIELD | 필드(멤버변수, enum 상수) |
LOCAL_VARIABLE | 지역변수 |
METHOD | 메서드 |
PACKAGE | 패키지 |
PARAMETER | 매개변수 |
TYPE | 타입(클래스, 인터페이스, enum) |
TYPE_PARAMETER | 타입 매개변수 |
TYPE_USE | 타입이 사용되는 모든 곳 |

![[백기선 자바] Enum과 애노테이션](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F301eb74c-edaf-492f-9dca-9be8a3bbf75e%2F%25EC%25BA%25A1%25EC%25B2%2598.jpg?table=block&id=e733be7a-ffd9-4629-a3db-c22b54770426&cache=v2)