Enum

2019. 5. 16. 14:43JAVA관련

enum은 상수로 선언하는 것들의 집합을 표현할 때 사용한다.

final 로 고정하는 기본 자료형의 값을 고정할 때, 클래스가 상수만으로 작성되어 있다면 enum을 사용하는 쪽이 좋다.

 

enum을 사용할 경우 if~eles로 처리해야하는 조건과 분기를 간편화 하기 좋다. 따라서 코드가 단순해지며 가독성이 좋아지고, enum이라는 키워드가 열거의 속성인 것을 통해 구현의도를 명확하게 알 수 있다. 

 

enum 타입은 고정된 상수들의 집합으로써 컴파일타임에 모든 값을 알아야 한다. 따라서 private로 생성자의 접근제어를 설정해 주어야 동적으로 값이 변동되는 경우를 막을 수 있다.  이렇게 되면 외부에서 접근이 불가능하므로 final과 다르지 않으며, 인스턴스를 생성하거나 상속받을수도 없다. 따라서 enum타입은 싱글톤을 일반화한다.

 

실제로 

private final static int MONDAY = 1;

private final static int TUESDAY = 2;

private final static int WEDNESDAY = 3;

private final static int THURSDAY = 4;

private final static int FRIDAY = 5;

private final static int SATURDAY = 6;

private final static int SUNDAY = 7;

 

같이 상수를 선언하는 것보다

 

enum Day{ MONDAY,TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; }

 

이런식으로 선언할 수 있다.

 

enum을 실제로 활용할 경우 if 문 사용을 상당히 줄일 수 있는데, 예제 코드는 아래와 같다.

 

public enum PowerSwitch {  
    //
    ON("켜짐"),
    OFF("꺼짐");

    private String krName;

    private PowerSwitch(){
        //
    }

    private PowerSwitch(String krName){
        this.krName = krName;
    }

    public String getKrName(){
        return krName;
    }

    public PowerSwitch opposite() {
        // 
        if (this == PowerSwitch.ON) {
            return PowerSwitch.OFF;  
        } else {
            return PowerSwitch.ON; 
        }
    }
}

public class PowerSwitchMain {  
        //
    public static void main(String[] args) {
        PowerSwitch powerSwitch = PowerSwitch.ON;
        displayByPowerSwitch(powerSwitch.opposite());       
    }

    public static void displayByPowerSwitch (PowerSwitch powerSwitch){
        if(powerSwitch == PowerSwitch.ON){
            System.out.println("전원을 on 합니다.");
        }else{
            System.out.println("전원을 off 합니다.");
        }
    }
}

opposite() 메소드를 통해 enum으로 정의한 ON,OFF 상수를 활용하여 메인메소드에서 사용한 코드이다. if~else에 비해 훨씬 더 간결하게 사용할 수 있다.

 

 

'JAVA관련' 카테고리의 다른 글

String, StringBuffer, StringBuilder, StringTokenizer  (0) 2019.05.22
POJO 의 개념  (0) 2019.05.20