1 minute read

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은 표현이 가능하다.)

열거 사용법 (우아한형제들 기술블로그) 보면 열거를 실무적으로 어떻게 사용되는지 알려주고 또 스트림과 조합하여 효율적으로 열거를 사용하는것을 확인할 수 있다..

Categories:

Updated: