변하지 않는 상수의 집합 클래스
보통 성별이나, 월, 요일 같은 경우 변하지 않는 데이터들을 전역변수 처럼 1개의 인스턴스로 사용하기도 하는데
public class Month {
public static final String MAY = "5월";
}
public class App {
public static void main(String[] args){
System.out.println(Month.MAY);
}
}
클래스 변수로 선언을 하면 외부 패키지에서도 전역변수처럼 사용했지만 enum 클래스로 더 편리하게 관리할 수 있다.
enum 클래스는 메모리 메소드 영역에 올라가면 클래스로더가 클래스를 파싱하면서 각 상수가 싱글톤으로 힙 영역에 생성 된다.
public enum Month{
// 각 상수는 클래스라고 생각하고 () 괄호 안은 해당 클래스의 필드를 선언
JANUARY("1월"),
FABRUARY("2월"),
MARCH("3월"),
APRIL("4월"),
MAY("5월"),
JUNE("6월"),
JULY("7월"),
AUGUST("8월"),
SEPTEMBER("9월"),
OCTOBER("10월"),
NOVEMBER("11월"),
DECEMBER("12월");
public String korean;
Month(String korean) {
this.korean = korean;
}
}
해당 열거타입들은 컴파일시 java.lang.Enum 클래스를 상속받아 해당 API들을 사용할 수 있다.
public class EnumApp {
public static void main(String[] args) {
System.out.println(Month.APRIL.korean); // 4월
Month month = Month.APRIL;
// name() 열거 객체가 가지고 있는 문자열 반환
System.out.println(month.name()); // APRIL
// ordinal() 열거 객체 순번 0부터 시작
System.out.println(month.ordinal()); // 3
// compareTo() 두 열거 객체간 순번 비교 차이 반환
System.out.println(month.JANUARY.compareTo(month.AUGUST)); // -7
// valueOf 상수명 문자열의 동일 열거객체 반환 정적 팩터리 메서드
Month samwal = month.valueOf("MARCH");
System.out.println(samwal); // MARCH
// values() 열거객체 순번대로 배열로 만듬
Month[] mon = Month.values();
for(Month mont : mon) {
System.out.println(mont);
}
}// end of main
}
참고자료
https://kephilab.tistory.com/38
'Effective Java > 키워드' 카테고리의 다른 글
직렬화 역직렬화 (Siriallizable Desirializable) (0) | 2023.01.04 |
---|---|
공변 반환 타입 (Covariant Return Type) (0) | 2023.01.04 |
싱글턴 (Singleton) (0) | 2023.01.04 |
불변 클래스 (Immutable Class) (0) | 2023.01.04 |
정적 팩터리 메서드 (Static Factory Method) (0) | 2023.01.04 |