자바 기초 (04). 자바 열거타입
0. 열거 (ENUM)
데이터중 몇가지로 한정된 값을 갖는 경우가 있는데, 이러한 한정된 값을 갖는 타입을 열거 타입이라 한다. 열거는 서로 연관된 상수들의 집합이기도 하다. (EX 요일(월,화,수,목,금,토,일), 계절(봄,여름,가을,겨울)
- 열거 타입
- 열거 타입 선언
- 열거 상수
- 열거 타입 변수
열거타입
// 열거 타입은 열거 상수(한정된 값)을 저장하는 타입이다.
public enum Season { //Season은 열거타입 이름
SPRING, //열거 상수
SUMMER,
FALL,
WINTER,
}
Season today; //열거 타입 변수
today = Season.Fall; //열거 상수로 정의되지 않은 값은 today에 저장하지 못한다.
열거 타입 선언
// 1. 소스파일 생성
// 2. 열거타입 선언
public enum 열거타입이름 {
열거상수1,
열거상수2,
열거상수3,
}
열거타입을 프로그램에서 사용하게 되면 열거타입은 메소드 영역에 올라게 되고, 열거상수는 힙영역에 열거객체로 생성이되어 참조가 된다.
enum과 생성자
enum은 클래스와 같다. 그렇기 때문에 생성자를 가질 수 있다.
enum Season{
SPRING,
SUMMER,
FALL,
WINTER
Season(){
System.out.println("new Constructor = " this);
}
}
출력결과
new Constructor = SPRING
new Constructor = SUMMER
new Constructor = FALL
new Constructor = WINTER
결과가 출력되는것은 생성자 Season이 호출되었다는 것, 이것이 4번 모두 호출된것은 필드의 숫자만큼 호출이 된다는것을 가르킨다.
1. 열거타입의 장점
개발을 할때 Enum을 사용하면 아래와 같은 장점들을 확인할 수 있다.
- 문자열과 비교해 IDE의 지원을 받을수 있다.
- 자동완성
- 텍스트 리팩토링 가능
- 허용 가능한 값들을 제한
- 리팩토링시 변경범위가 최소화
- 내용의 추가가 필요하더라도, Enum 코드외 수정할 필요가 없다.
- 상태와 행위를 한곳에서 처리가 가능하다
- 문맥(context)를 담을 수 있다. (A라는 상황에서의 “a”와 B상황에서의 “a”는 똑같지만서도 전혀 다른 의미를 가질수 있다. 단순 문자열은 이를 표현할 수 없지만 Enum은 표현이 가능하다.)
열거 사용법 (우아한형제들 기술블로그) 보면 열거를 실무적으로 어떻게 사용되는지 알려주고 또 스트림과 조합하여 효율적으로 열거를 사용하는것을 확인할 수 있다..