enum, 서로 연관되어있는 상수들의 집합에 대해 선언할때 사용하는 자료형의 일종이다.
다른 변수들과는 달리 수정하거나 바꿀 수 있는 타입이 아니고, 선언된 값들에 대해 사용(공유)하기만 할 때 활용할 수 있는 자료형이다.
기존 static final로 정의하여 반복적으로 나열하였던 방식에서 한번에 묶어 정의할 수 있는(개선된) 방식으로 상수들을 정의할 수 있게 되었다.
예를 들어, main 함수 내에서 MALE, FEMALE이라는 두개의 문자열만 저장하고자 한다.
public static final String MALE = "MALE;
public static final String FEMALE = "FEMALE";
public static void main(String[] args){
String gender1;
gender1 = class.MALE;
gender1 = class.FEMALE;
}
이러한 방법으로 main 함수 내에서 gender1 문자열에 MALE, FEMALE 문자열을 저장하였다.
단, 위 방법을 통해서는 문법적인 오류가 없기 때문에 다른 문자열들도 변수에 할당(수정)이 가능하다는 것이 문제이다.
String gender1;
gender1 = "boy";
이렇게 다른 문자열을 넣어줄 수 있다는 측면에서 문제가 생긴다.
개선된 방법은 enum 자료형, 즉 상수들을 하나의 집합으로 사용할 수 있는 자료형을 활용하는 것이다.
먼저 enum 자료형을 선언하고, class를 선언하듯이 정의(상수나열)한다.
enum Gender {
MALE, FEMALE;
}
이 enum에 선언된 상수들은 그대로 사용할 수 있고, 별도로 수정 및 할당이 불가능하다.
enum은 위와 같이 static final String value이므로, static class 및 함수 내에서 그대로 활용할 수 있다.
public static void main(String[] args){
Gender gender2;
gender2 = Gender.MALE;
gender2 = Gender.FEMALE;
}
main 함수 내부에서 enum 자료형에 대해 먼저 변수를 선언하고, 그 후 사용한다.
사용 시 static 변수 사용하듯이 enum.value 형태로 상수를 사용(수정불가).
gender2 = "Boy";
위와 같은 할당은 불가능하다.
프로그래머스 강의
https://programmers.co.kr/learn/courses/5/lessons/423