728x90

Enum

소스코드를 분석을 하다 보니 너무 많은 if-else 가 엮여져 있는 코드들을 많이 봐서 너무 어지러웠다. 이것을 어떻게 할 수 없을까에 대한 고찰을 가지고 있다가 처음엔 switch조건을 생각해서 메소드로 따로 빼내자고만 생각했다.
근데 Enum을 찾아본 결과 너무 좋아서 포스팅하게 되었다.

Enum이란

  • Enum은 Eumeration로 열거형이라고 불리며, 서로 연관된 상수들의 집합을 의미한다.

  • 자바에서 final static String, int와 같이 문자열이나 숫자들을 나타내는 기본자료형의 값을 Enum으로 대체해서 사용할 수 있다.

  • 인터페이스나 클래스로 상수를 정의하는 것을 보완하여 IDE의 지원을 적극적으로 받고 타입 안정성도 갖출 수 있게 된다.

예를 들면 이런 코드였다.

    String ss = "A구역";

    if(ss.equals("A구역")) {
        System.out.println(ss);
    }else if(ss.equals("B구역")) {
        System.out.println(ss);
    }else if(ss.equals("C구역")) {
        System.out.println(ss);
    }else if(ss.equals("D구역")) {
        System.out.println(ss);
    }

이렇게되면 계속 else if(ss.equals("구역")이 지금은 적어도 가독성이 이렇게 좋지 않은데 엄청 많은 구역이 있다고 한다면 그만큼의 줄 수를 채워서 단지 if 조건 하나만을 수행한다. 참으로 효율이 떨어지는 코드이다.

여기서 Enum을 사용했다.

TestEnum.java

enum TestEnum{
    A("a", "A구역");
    B("b", "B구역");
    C("c", "C구역");
    D("d", "D구역");

    private String alpa;
    private String name;

    TestEnum(String alpa, String name){
        this.alpa = alpa;
        this.name = name;
    }

    public String getName(){
        return name;
    }
}

이렇게 A,B,C,D라는 키에 각각 Value 값을 넣어준다. 값을 할당하는 갯수는 자유이다. 대신 생성자의 매개변수도 같이 늘어나야 한다.

그러면서 메인함수 실행 클래스에서 어떻게 설정하는지 이제 보도록 하자.

Main.java

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String key = sc.next();

        String str = TestEnum.valueOf(key).getName();
        String alpa = TestEnum.valueOf(key).getAlpa();    
    }
}

이렇게 설정을 해준 상태에서 위의 코드에서는 입력을 받아 key 변수에 값을 넣어준다. A,B,C,D 의 키값을 호출하게 되면 안에 있는 A구역이라면 alpa에는 a가, name에는 A구역이 들어가게 된다.
이렇게 해서 기존의 코드에서 상당히 많은 줄 수를 줄이면서 가독성도 높여 실용적으로 고칠 수 있는 방법을 터득하게 되었다.

앞으로 if-else구문이 나올때 반복되는게 많아진다면 Enum을 사용하는 것을 염두에 두고 코드를 짜 나갈 것이다.

그리고 Enum에 대해 추가적으로 더 공부가 필요해 보인다.

이상으로 Enum포스팅을 마친다.

728x90

'Java' 카테고리의 다른 글

MockMvc  (0) 2022.08.04
Mock, Mockito  (0) 2022.08.04
[Java] Optional  (0) 2022.08.03
Java Stream API  (0) 2022.08.03

+ Recent posts