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

bp.chys·2020년 3월 9일

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개의 댓글