열거형 클래스는 서로 관련있는 상수들을 모아 정의 하는 것 이다.
enum Code{Python, Java, JavaScript, C};
public class Favorite{
public static void main(String[] args)
{
Code fav = Code.Java;
System.out.println(fav); // 결과값 : Java
}
}
이렇게 enum 클래스 안에 비슷한 개념의 단어들이 마치 배열처럼 묶이게 된다. 실제로도 저장된 객체 값을 인덱스 번호로 가져온다. 열거형은 클래스 밖에서도 안에서도 사용할수 있지만, 메서드 안에서는 사용이 불가능 하다.
⭐Enum method 종류
- name() : 해당 열거체 상수의 이름을 리턴한다.
- ordinal() : 해당 열거체 상수가 열거체 정의에서 정의된 순서를 리턴한다.
- compareTo() : 전달된 값과 해당 열거체를 비교하여 순번차이를 리턴한다.
- valuesOf(String name) : 전달된 문자열과 일치하는 해당 열거체의 상수를 리턴한다.
- values() : 모든 열거 객체들을 배열로 리턴한다.
어노테이션은 프로그램 내에서 해당 코드가 무엇을 뜻하는지 설명해준다. 자바에서 //로 시작하는 주석과는 달리 @로 시작하며 실질적으로 코드 자체에 영향을 끼치지는 않지만, 쉽게 무슨 코드인지를 알려주며 일반적인 주석보다는 컴파일시 프로그램에 영향을 끼칠수 있어 디버그시 훨씬 용이하다.
@Override
+ 선언한 메서드가 오버라이드 되었다는 것을 나타낸다. 만약 오버라이드가 안된 상태라면 컴파일 에러를 출력한다.
@Deprecated
+ 해당 메서드가 현재 혹은 앞으로 쓰이지 않을 것을 나타낸다. 사용한다면, 컴파일 경고를 출력한다.
@SuppressWarnings
+ 선언한 곳의 컴파일 경고를 무시하도록 한다.
@FunctionalInterface
+ 함수형 인터페이스를 올바르게 선언했는지 확인해주는 어노테이션이다. 만약 메서드가 존재하지 않거나, 1개 이상의 메서드가 존재할 경우 컴파일 오류를 출력한다.
@Retention
자바 컴파일러가 어노테이션을 다루는 방법을 기술하며 특정 시점까지 영향을 미치는지 결정한다.
+ SOURCE : .java 소스 파일까지는 어노테이션이 존재하지만, 컴파일시 사라지게 된다.
+ CLASS : .class파일까지는 어노테이션이 존재하지만, 런타임시 사라지게 된다.
+ RUNTIME : 컴파일 이후에도 JVM에 의해 계속 참조가 가능하다.
@Documented
해당 어노테이션을 Javadoc에 포함시킨다.
@Target
어노테이션의 적용 범위를 정해준다.
+ ElementType.PACKAGE : 패키지 선언
+ ElementType.TYPE : 타입 선언
+ ElementType.ANNOTATION_TYPE : 어노테이션 타입 선언
+ElementType.CONSTRUCTOR : 생성자 선언
+ ElementType.FIELD : 멤버 변수 선언
+ ElementType.LOCAL_VARIABLE : 지역 변수 선언
+ ElementType.METHOD : 메서드 선언
+ ElementType.PARAMETER : 전달인자 선언
+ ElementType.TYPE_PARAMETER : 전달인자 타입 선언
+ ElementType.TYPE_USE : 타입 선언
@Inherited
어노테이션의 상속을 가능하게 한다.
@Repeatable
해당 어노테이션이 붙은 어노테이션을 여러반 반복할수 있게 해준다.
우선 어노테이션과 열거형을 정리해 봤다. 중요한 내용인거 같지만 아닌거 같기도 하고... 아직 실전에서 써먹어 보지 못해서 얼마나 필요한지 깨닫지 못하는 것 같다.