티스토리 뷰

Java & Kotlin

[Java] Enum 사용법 - 초급(Enum 입문하기)

망나니개발자 2020. 6. 2. 17:11
반응형

클린코드 책을 읽다보면 Enum 활용의 중요성에 대해 얘기하는 부분이 있습니다. 이번 글에서는 Enum에 대해 알아보고 Enum을 활용하여 기존의 코드를 개선시켜보도록 하겠습니다.

 

 

1. Enum이란? 


[ Enum 이란? ]

일반적으로 상수를 정의할 때, public static final String 으로 상수를 정의한다. 하지만 이렇게 상수를 정의하면서 다양한 문제들이 발생하게 되었고, Java 1.5버전부터는 서로 연관된 상수들의 집합을 의미하는 열겨형 클래스 Enum을 도입하게 되었다. 어떤 일의 처리가 진행중인지 완료상태인지를 나타내는 Status와 관련된 Enum은 아래와 같이 사용될 수 있다.

package EnumExample;
 
public class EasyEnumExample {
 
    // Enum을 사용하지 않는 상수 정의 방법
    public static final String PROCEEDING = "진행중";
    public static final String COMPLETE = "진행완료";
    
    public static void main (String[] args) {
        String status1;
         
        status1 = EasyEnumExample.PROCEEDING;
        status1 = EasyEnumExample.COMPLETE;
         
        // PROCEEDING, COMPLETE를 제외한 다른 값을 할당하여도 컴파일 에러 X
        status1 = "준비중";
         
        
        Status status2;
        status2 = Status.PROCEEDING;
        status2 = Status.COMPLETE;
         
        //컴파일 시 의도하지 않는 상수 값을 검사하며, 컴파일 에러를 통해 확인할 수 있음
        status2 = "준비중";
         
    }     
}

//enum class를 이용해 Status의 상태에 대해 정의한다.
enum Status {
    PROCEEDING, COMPLETE;
}

 

 

status1의 경우에는 기존에 상수를 정의하는 방법으로 정의하였다. status1은 String 클래스이기 때문에 "준비중"이라는 값이 할당되어도 컴파일 시 문제가 발생하지 않는다. 물론 잘못된 값을 할당했기 때문에 런타임 에러는 발생할 수 있다. 상수가 무수히 많고 복잡한 시스템의 경우 이러한 문제가 발생하기 쉬우며, 프로그램의 치명적인 오작동을 초래할 수 있다. 이러한 문제점들을 해결하기 위해 Enum을 활용할 수 있다.

status2의 경우에는 Enum을 활용하여 상수를 정의하였다. status2는 Enum의 Status 클래스의 객체이며, Status에 할당된 PROCEEDING, COMPLETE을 값으로 가질 수 있다. 이러한 Status Enum 클래스를 풀어보면 아래와 같다.

class Status {
	public static final Status PROCEEDING = new Status();
	public static final Status COMPLETE = new Status();
}

 

 

Status 클래스가 위와 같이 구성되기 때문에, status2에 String 객체인 "준비중"을 할당하려고 하면 컴파일 에러가 발생하게 된다.

 

 

 

[ Enum의 장점 ]

  1. 코드가 단순해지며, 가독성이 좋다.
  2. 인스턴스 생성과 상속을 방지하여 컴파일 시에 상수값의 타입 안정성이 보장된다.
  3. enum 키워드를 통해 구현의 의도가 열거임을 분명하게 알 수 있습니다.

 

 

 

 

관련 포스팅

  1. Enum 사용법 - 초급(Enum 입문하기) (1/2)
  2. Enum 사용법 - 고급(Enum 응용하기) (2/2)

 

 

 

참고 자료

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함