본문 바로가기
Java

[Java] Enum 사용법 (1) - 탄생 배경

by 노력남자 2022. 9. 6.
반응형

Enum 총 정리

Enum 탄생 배경

Enum 사용법

Enum 활용법

 

Enum이란?

JDK 1.5부터 추가된 Enum은 열거형이라고 하며 서로 관련된 상수를 편리하게 선언하고 관리하기 위해 만들어 졌다.

 

그렇다면 JDK 1.5 이전엔 어떻게 썼고 왜 Enum이 나오게 됐을까?

 

Enum의 등장 배경

Enum이 등장하기 전까진 정수 열거 패턴을 사용했다. 하지만 정수 열거 패턴엔 큰 문제점이 있었다.

 

private final int SPRING = 1;
private final int SUMMER = 2;
private final int AUTUMN = 3;
private final int WINTER = 4;

 

문제점

 

1. 가독성이 떨어져 관리가 용이하지 않았다.

 

2. 정수 열거 패턴을 위한 네임스페이스 공간이 없어 타입 세이프하지 않았다.

 

   예) 오타로 인해 값이 변경됐을 때 타입 세이프하지 않기 때문에 SPRING과 SUMMER가 같은 값으로 판별

 

private final int SPRING = 1;
private final int SUMMER = 1; // 오타로 인해 값이 1로 설정

if (SPRING == SUMMER) // TRUE

 

3. 정수 상수는 문자열로 출력하기가 어렵다. 정수 상수들을 출력해봤자 1, 2, 3, 4 밖에 나오지 않으며 문자열로 출력하려면 따로 메소드를 만들어야한다.

 

4. 정수 열거 그룹에 속한 모든 상수를 순회하는 방법도 마땅치 않다. 

 

해결책으로 정수 열거 패턴의 단점을 모두 보완한 Enum 등장

 

위 정수 열거 패턴을 enum으로 변경하면 아래와 같다. (정말 깔끔하다!!)

 

public enum Season {
    SPRING, SUMMER, AUTUMN, WINTER
}


// public class Season {
//     static final Season SPRING = new Season("SPRING");
//     static final Season SUMMER = new Season("SUMMER");
//     static final Season AUTUMN = new Season("AUTUMN");
//     static final Season WINTER = new Season("WINTER");
//
//     private String name;
//
//     private Season(String name) {
//         this.name = name;
//     }
// }

(*내부적으로는 하나의 클래스가 만들어지며 enum을 class로 표현하면 주석을 단 부분과 비슷하다.)

 

장점

 

1. 타입 비교가 가능해 타입 세이프한 코드를 짤 수 있다. 더불어 IDE에서 타입 체크를 해주기 때문에 더욱 더 좋은 코드를 만들 수 있다.(최고)

 

2. 깔끔한 소스 작성을 할 수 있어 소스 유지보수하기가 쉽다.  

 

3. 정수 열거 패턴의 단점들을 모두 보완해서 사용할 수 있다. 

 

 

다음 포스팅에서 Enum 사용법에 대해 알아보겠습니다.

 

읽어주셔서 감사합니다.

 

참고

  • 남궁성, Java의 정석 3rd Edition, 도우출판, 2016
  • Joshua Bloch, Effective Java 3/E, 인사이트, 2018
반응형

댓글