Enum은 언제 사용하면 좋을까?

bp.chys·2020년 3월 9일
0

Enum이란?

컴퓨터 프로그래밍에서 Enumerated Type(열거형 타입)을 줄여서 보통 Enum이라고 쓴다. 요소, 멤버라 불리는 명명된 값의 집합을 이루는 자료형이다. 열거자 이름들은 일반적으로 해당 언어의 상수 역할을 하는 식별자이다. - wikipeida -

위키피디아에서 언급된 정의를 바탕으로 정의를 요약해보자면, 상수 값을 대표하는 이름의 멤버들로 집합을 이루는 열거 자료형 타입 이라고 할 수 있다.
여기서 상수란, 변하지 않는 값으로 정수 뿐만 아니라, 문자열 그 외의 자료형도 얼마든지 상수로 정의할 수 있다.
따로 이름 외 값을 갖지 않는다면 이름이 그 자체로 상수가 된다. 즉, 기본적으로 클래스를 상수처럼 사용할 수 있는 것이다.

enum으로 구현할 경우 다음 Transporation과 같이 Taxi, Bus, Subway를 각각 유일한 인스턴스로 사용할 수 있다.

enum Transportaion {
	Taxi,
    	Bus,
    	Subway;
}

Taxi, Bus, Subway를 요소로 갖는 Transportation에 기본 요금이라는 상태를 상수값으로 추가할 수 있다.

enum Transportaion {
	Taxi(3800),
    	Bus(1200),
    	Subway(1250);
        
        private int baseFare;
        
        Transportation(int baseFare) {
        	this.baseFare = baseFare;
        }
}

이렇게 작성하면 각 요소 뒤에 붙는 괄호가 자동으로 생성자 역할을 하게 되어서 전달되는 파라미터로 멤버변수가 초기화되어 각 멤버는 기본요금이라는 상태를 갖게 된다.

기본요금 뿐만아니라, 거리당 요금 인상률을 멤버 변수로 갖고 싶다면 얼마든지 추가할 수 있다. 이처럼 서로 관련 있는 상수 값들을 모아 enum으로 구현할 경우 유용하게 사용할 수 있다.

그렇다면 언제 Enum을 사용하면 좋은가?

보통 도메인을 설계할 때 사용하는 인스턴스의 수가 정해져 있고 관련된어 처리할 수 있는 상수값이 여러개 존재할 때 Enum을 사용한다.

예를 들어 로또 프로그램에서 1등부터 5등까지를 의미하는 등수와 각 등수가 만들어 지는 조건, 그리고 각 등수에 해당하는 상금을 묶어낼 필요가 있을 경우에 Enum을 사용하면 외부에서도 Enum의 요소를 조회하여 각 상태에 용이하게 접근할 수 있다.

enum LottoRank {
    FIRST(6, false, 2_000_000_000),
    SECOND(5, true, 30_000_000),
    THIRD(5, false, 1_500_000),
    FOURTH(4, false, 50_000),
    FIFTH(3, false, 5_000),
    NONE(0, false, 0);
}
profile
하루에 한걸음씩, 꾸준히

0개의 댓글