반응형
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
반응형
'Java' 카테고리의 다른 글
[Java] Enum 사용법 (3) - 실무 활용 (1) | 2022.09.06 |
---|---|
[Java] Enum 사용법 (2) - 문법 (0) | 2022.09.06 |
[Java] 아키텍처 테스트 - ArchUnit (+ JUnit 5) (0) | 2022.09.06 |
[Java] JUnit 5 사용법 (12) - AssertJ ( + vs Hamcrest, 마이그레이션) (1) | 2022.09.06 |
[Java] JUnit 5 사용법 (11) - Hamcrest (0) | 2022.09.06 |
댓글