본문 바로가기

JAVA

Java - Enum

enum 이란?

: enum의 정의는.. Enumerated Type (열거형 타입)을 줄인 용어이며, 상수 값을 대표하는 이름의 멤버들로 집합을 이루는 열거 자료형 타입이다.

- 자바 1.5버전부터 새롭게 추가된 개념으로, 열거형 상수라고 불린다.

- 자바에서는 상수값을 정의할 때 final static String ~ 와 같은 방식으로 정의했는데, enum을 사용해서 대체가 가능하다.

- Class 처럼 정의하는 상수, 서로 관련 있는 상수들끼리 묶을 수 있다.

 

그럼 enum은 언제 사용할까?

상수값 중에서 비슷한 종류(서로 관련 있는)의 상수를 묶어놓기 위해 사용

// 로또 프로그램에서 1등부터 5등까지를 의미하는 등수와 각 등수가 만들어 지는 조건, 그리고 각 등수에 해당하는 상금을 묶어낼 필요가 있을 경우를 정의하였다.
 
 
// 각각 [번호 일치 개수, 보너스 번호 적용여부, 당첨금액]
enum LottoRank {
    FIRST(6, false, 2000000000),
    SECOND(5, true, 50000000),
    THIRD(5, false, 1000000),
    FOURTH(4, false, 50000),
    FIFTH(3, false, 5000),
    NONE(0, false, 0);
}
 
 
// 이렇게 비슷한 종류의 상수끼리 묶었다.

enum 정의

선언 케이스는 3가지로 나눌 수 있다.

1] enum java파일 별도로 생성

2] Class 안에서 enum을 선언

3] Class 밖에서 enum을 선언

 

enum 구현 예제

public enum UseYn {
    Y("사용", "Yes", 1),
    N("미사용", "No", 0);
 
    private final String koreanName;
    private final String englishName;
    private final int intType;
 
    UseYn(String koreaName, String englishName, int intType) {
        this.koreanName = koreaName;
        this.englishName = englishName;
        this.intType = intType;
    }
 
    public String getKoreanName() {
        return koreanName;
    }
 
    public String getEnglishName() {
        return englishName;
    }
 
    public int getIntType() {
        return intType;
    }
}
 
 
public static void main(String[] args) {
    UseYn useYes = UseYn.Y;
    UseYn useNo = UseYn.N;
    System.out.println("한국어: "+useYes.getKoreanName()+", 영어: "+useYes.getEnglishName()+", 숫자로: "+useYes.getIntType());
    System.out.println("한국어: "+useNo.getKoreanName()+", 영어: "+useNo.getEnglishName()+", 숫자로: "+useNo.getIntType());
}
 
 
// 출력결과
// 한국어: 사용, 영어: Yes, 숫자로: 1
// 한국어: 미사용, 영어: No, 숫자로: 0

enum 객체의 메소드

public enum NumTest { // enum 예제
    ONE, TWO, THREE, FOUR
}

- name(): 열거 객체의 문자열을 리턴

    - 리턴타입: String

NumTest test = NumTest.ONE;
String name = test.name(); // ONE 출력

- ordinal(): 열거 객체의 순번(0부터 시작)을 리턴

    - 리턴타입: int

NumTest test1 = NumTest.ONE;
NumTest test2 = NumTest.TWO;
int ordinal1 = test1.ordinal(); // 0 출력
int ordinal2 = test2.ordinal(); // 1 출력

- compareTo(): 열거 객체를 비교해서 순번 차이를 리턴

    - 리턴타입: int

    - ordinal1는 순서 0에서 2를 빼므로 -2

    - ordinal2는 순서 2에서 0을 빼므로 2

NumTest test1 = NumTest.ONE;
NumTest test2 = NumTest.THREE;
int ordinal1 = test1.compareTo(test2); // -2 출력
int ordinal2 = test2.compareTo(test1); // 2 출력

 

- valueOf(String name): 주어진 문자열의 열거 객체를 리턴

    - 리턴: 열거 타입

NumTest test = NumTest.valueOf("ONE"); // NumTest의 ONE을 참조하게 됨.

- values(): 모든 열거 객체들을 배열로 리턴

    - 리턴: 열거 배열

NumTest[] testArray = NumTest.values();
for(NumTest t : data) {
    System.out.println(data); // 각각 ONE, TWO, THREE, FOUR 출력
}