Java enum

이상민·2021년 8월 12일
0
post-thumbnail

1. enum

열거형. 연관된 상수들의 집합

  • static final 자료형 같이 상수를 선언할 수도 있지만, 상수가 여러개 일때 불편함이 있다

  • enum을 사용해 상수를 효과적으로 묶어 사용할 수 있다


2. enum의 장점

  1. 코드가 단순해지며 가독성이 좋아진다
  2. 인스턴스 생성과 상속을 방지하여 상수값의 타입 안정성이 보장된다
  3. enum class를 사용해 타입을 정의하므로 컴파일 타임 체그가 가능하다
  4. 구현 의도를 분명히 한다

3. enum 이전의 상수 그룹 선언

enum은 자바 1.5에서 추가되었다

3-1. 인터페이스와 숫자로 정의

  • 인터페이스를 통해 public static final 상수를 그룹으로 묶을 수 있었지만. 숫자로 정의 되어있기 때문에 DAY.MONDAY == MONTH.JANUARYtrue가 되는 문제가 있었다.
interface DAY {
    int MONDAY = 1;
    int TUESDAY = 2;
    ...
}

interface MONTH {
    int JANUARY = 1;
    int FEBURURAY = 2'
}

3-2. 클래스와 인스턴스로 정의

  • 값을 인스턴스로 하면서 데이터 타입은 같지만 데이터 값은 다른 상수들을 만들었다. 다른 데이터 타입과 비교시 컴파일 오류를 발생하지만, 이제 switch문에는 사용할 수 없게 되었다
class Day {
    public final static Day MONDAY = new Day();
    public final static Day TUESDAY = new Day();
    ...
}

class Month {
    public final static Month JANUARY = new Month();
    public final static Month FEBRUARY = new Month();
    ...
}

4. enum 정의

enum 열거체이름 {상수이름, 상수이름, ...}

enum Num {ONE, TWO, THREE}

public class Main {
    public static void main(String[] args) {
        Num n = Num.ONE;
        
        switch (n) {
        case ONE:
            System.out.println("하나!");
            break;
        case TWO:
            System.out.println("둘!");
            break;
        case THREE:
            System.out.println("셋!");
            break;
        }
    }
}
// 출력
ONE
  • 상수에 추가 속성을 부여할 수도 있다
enum Num {
    ONE("하나"),
    TWO("둘"),
    THREE("셋");
    
    private String krNum;
    
    private Num() {}
    private Num(String krNum) {
        this.krNum = krNum;
    }
    
    public String getKrNum() {
        return krNum;
    }
}

public class Main {
    public static void main(String[] args) {
        System.out.println(Num.ONE.getKrNum())
    }
}
// 출력
하나

5. values()와 valueOf()

5-1. values()

열거체의 모든 상수를 저장한 배열을 생성해 반환한다

enum Num {ONE, TWO, THREE}

public class Main {
    public static void main(String[] args) {
        Num[] arr = Num.values();
        for (Num n : arr) 
            System.out.println(n);
    }
}
// 출력
ONE
TWO
THREE

5-2. valueOf()

전달된 문자열과 일치하는 해당 열거체의 상수를 반환한다

enum Num {ONE, TWO, THREE}

public class Main {
    public static void main(String[] args) {
        Num n = Num.valueOf("TWO");
        System.out.println(n);
    }
}
// 출력
TWO

5. java.lang.Enum


참고

https://www.nextree.co.kr/p11686/
http://tcpschool.com/java/java_api_enum

profile
편하게 읽기 좋은 단위의 포스트를 추구하는 개발자입니다

0개의 댓글