📚 열거형(enum)
서로 연관된 상수 (변하지 않는 값) 들의 집합
< 전역변수로 상수 정의 : public static final >
public static final 타입 전역변수 = 값;
(전역변수 : 어디서나 접근할 수 있는 변수)
🙋♀️ 수많은 상수를 정의하면?
public static final int SPRING = 1;
public static final int SUMMER = 2;
public static final int FALL = 3;
public static final int WINTER = 4;
public static final int SPRING = 2;
🙋♀️ 근데, 상수명 중복으로 컴파일 에러가 나면 어떡해? 그럼 인터페이스로 구분하자!
interface Season {
int SPRING = 1. SUMMER = 2, FALL = 3, WINTER = 4;
}
interface Frameworks {
int DJANGO = 1, SPRING = 2, NEST = 3, EXPRESS = 4;
}
🙋♀️ 어? 그랬더니, 타입 안정성이라는 새로운 문제가 생긴다!
if (Seasons.SPRING == Frameworks.SPRING) 가 인정되는 타입 안정성 문제
🤦♀️ 그렇다고 클래스로 묶어 각각 객체로 생성하면 코드가 너무 길고, 사용자 정의 타입이기 때문에 switch문 사용 불가...
class Seasons {
public static final Seasons SPRING = new Seasons();
public static final Seasons SUMMER = new Seasons();
public static final Seasons FALL = new Seasons();
public static final Seasons WINTER = new Seasons();
}
enum 열거형이름 { 상수명1, 상수명2, 상수명3, ...}
[열거형이름.상수명] 으로 접근
💻 예시
enum Seasons { SPRING, SUMMER, FALL, WINTER }
enum Frameworks { DJANGO, SPRING, NEST, EXPRESS }
name() : 열거 객체가 가지고 있는 문자열(상수 이름과 동일)을 리턴
ordinal() : 열거 객체의 순번(0부터 시작)을 리턴
compareTo(비교값) : 주어진 매개 값과 비교해서 순번 차이를 리턴
valueOf(String name) : 주어진 문자열의 열거 객체를 리턴
values() : 모든 열거 객체들을 배열로 리턴