[Java] Enum 타입
❗Enum❗
✨ Enum이란?
: 서로 연관된 상수들의 집합
- 자바 1.5 버전부터 새롭게 추가된 것.
- 싱글톤으로 관리된다.
Enum 장점
- 코드가 단순해지며, 가독성이 좋아진다.
- 인스턴스 생성과 상속을 방지하여 상수 값의 타입 안정성이 보장
- 컴파일 시 정의한 값 이외의 값을 사용했는지 체크가 가능하다.
- 키워드 enum을 사용하기 때문에 구현의 의도가 열거임을 분명하게 파악할 수 있다.
만약 Enum 클래스가 아닌 final static String를 사용해 상수를 표현한다면, 정의한 값이 아닌 다른 값이 들어가도 (ex, 요일을 나타내는 값에 “Apple”이 들어감) 같은 String 값이므로 자바에서는 검사할 방법이 사라진다.
선언
: 별도의 java 클래스로 따로 뺄 수 있다.
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, STAURDAY, SUNDAY;
}
- 혹은 Class 내부에서 선언 또한 가능하다
public class Date {
public int year;
public int month;
public enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, STAURDAY, SUNDAY;
}
}
사용
: enum 타입 또한 객체이므로, 사용할 시 enum형 객체를 만들어 가져오거나 valueOf() 메서드를 이용해 값을 사용할 수 있다.
// 1 enum형 객체 생성
Day day = Day.MONDAY;
// 2 valueOf() 메서드 사용
Day day = Day.valueOf("MONDAY");
메서드
- values() : 열거된 모든 원소를 배열에 담아 순서대로 리턴
- ordinal() : 원소에 열거된 순서를 정수 값으로 리턴
- valueOf() : 매개변수로 주어진 String과 열거형에서 일치하는 이름을 갖는 원소 리턴
Enum 매핑
- 상수를 가져오면 상수의 고유 값을 출력할 수 있도록 할 수 있다.
enum Season {
private String season;
SPRING("봄")
SUMMER("여름")
FALL("가을")
WINTER("겨울")
// 생성자
private Season (String season) {
this.season = season;
}
public String getSeason() {
return season;
}
}
// 사용
public static void main(String[] args) throws Exception {
Season s = Season.SUMMER;
System.out.println(s.name()); // 열거 객체명 출력 : SUMMER
System.out.println(s.getSeason()); // 매핑된 열거 데이터 출력 : 봄
}
enum 타입 또한 객체이므로 객체의 점 표기법을 이용해 접근이 가능하다.
✨ 참고 자료
- https://limkydev.tistory.com/50
- https://limkydev.tistory.com/66
- https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%97%B4%EA%B1%B0%ED%98%95Enum-%ED%83%80%EC%9E%85-%EB%AC%B8%EB%B2%95-%ED%99%9C%EC%9A%A9-%EC%A0%95%EB%A6%AC