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포스팅을 마친다.
'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 |