본문 바로가기
BACKEND/JAVA

자바 Enum의 특징과 사용법, 그리고 주의 사항을 알아보자

by 콩밍디 2023. 12. 29.

1. Enum의 개념 및 특징

우리가 흔히 상수를 정의할 때 final static string과 같은 방식으로 상수를 정의한다.
하지만 이렇게 상수를 정의해서 코딩하는 경우 다양한 문제가 발생된다.

이러한 문제점들을 보완하기 위해 JAVA 1.5버전부터 추가된 것이 바로 enum이다.
자바의 enum은 열거형(Enumeration)을 나타내는 특별한 데이터 타입이다.
enum은 서로 연관된 상수값들을 정의하고 사용하기 위한 용도로 사용된다.

enum의 주요 특징
1. 상수 집합 정의
서로 연관된 상수 값을 그룹화하여 정의하며, 상수 값을 열거하므로 열거형이라고 불린다.

2. 클래스와 유사
클래스와 유사한 구조를 가지며, 생성자, 멤버 변수, 메서드를 가질 수 있다.
각 상수 값은 해당 enum 타입의 인스턴스로 취급된다.

3. 인스턴스 생성 제한
enum의 인스턴스는 미리 정의된 상수 값 중 하나로 제한된다.
즉, 사용자가 new 키워드를 사용하여 새로운 인스턴스를 생성할 수 없다.

4. 유형 안전성
컴파일러가 타입 안전성을 검증하므로 오류를 런타임에서 발생시키지 않는다.

5. 열거형 상수 접근
enum의 상수 값은 enumTypeName.CONSTANT_NAME 형태로 접근할 수 있다.

enum의 사용 예시
1. 상태 또는 유형 정의
상태, 유형, 옵션 등을 정의할 때 유용하다.
예를 들어, 주문의 상태를 나타내는 열거형을 정의할 수 있다.

enum OrderStatus {
	PENDING, PROCESSING, SHIPPED, DELIVERED, CANCELED
}


2. 싱글톤(Singleton) 패턴
싱글톤 패턴을 구현할 때 사용되며, enum의 각 상수는 인스턴스로 취급되어
JVM에서는 각 상수가 정확히 한 번만 생성됨을 보장한다.

enum Singleton {
	INSTANCE;
	// Singleton의 기능을 구현
	public void doSomething() {
	// ...
	}
}


3. 상수값의 집합
관련된 상수 값을 그룹화하여 사용할 때 가독성을 높이고 유지보수를 쉽게 만든다.
예를 들어, 요일을 나타내는 열거형을 정의할 수 있다.

enum DayOfWeek {
	MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}


4. 명시적인 상수
코드에서 명시적인 상수 값을 사용해야 할 때, 오류를 방지하고 상수 값의 목록을 관리할 수 있다.

enum Constants {
    PI(3.14159),
    E(2.71828);
    private double value;
    Constants(double value) {
    	this.value = value;
	}

    public double getValue() {
    	return value;
    }
}

 

2. Enum을 사용하는 이유

enum을 사용하는 이유
1. 가독성 및 유지보수
관련된 상수 값을 그룹화하여 명확하게 표현할 수 있으며,
코드의 가독성을 향상시키고 유지보수를 쉽게 만든다.

2. 유형 안전성
컴파일러가 타입 안전성을 검증하므로 잘못된 값을 할당하는 오류를 방지한다.

3. 집합 관리
enum을 사용하면 관련된 상수 값을 하나의 그룹으로 관리할 수 있으므로,
일관성 있는 상수값을 유지할 수 있다.

4. 코드 예측 가능성
enum을 사용하면 상수 값의 목록을 알 수 있으므로, 사용 가능한 옵션을 쉽게 파악할 수 있다.

5. 설계 패턴
싱글톤 패턴 등을 구현할 때 유용하게 활용된다.

 

3. Enum 사용 시 주의사항

1. 불변성 유지
enum의 필드는 불변해야 한다. 즉, 필드 값을 변경하거나 수정해서는 안 된다.

2. 직렬화와 역직렬화
enum을 직렬화할 때 주의해야 한다. enum 상수의 순서를 변경하지 않도록 유의해야 한다.

3. 열거 상수 이름 규칙
열거 상수의 이름은 대문자와 밑줄(_)로 구성되며,
상수 값 이외의 추가 데이터 필드는 명확하고 의미 있는 이름으로 지어야 한다.

4. 열거 상수 순서
enum의 상수 순서를 변경하면 기존 데이터와 호환성이 깨질 수 있으므로 주의해야 한다.

5. 열거 상수 비교
enum의 상수 값을 비교할 때 == 연산자를 사용해야 한다.
문자열과 같이 equals() 메서드를 사용하지 않아도 된다.

6. enum 확장
enum은 확장이 불가능하므로 새로운 상수 값을 추가하려면 enum 정의를 수정해야 한다.

enum은 코드의 가독성을 높이고 유지보수성을 향상시키는 데 매우 유용한 도구이다.
추가 데이터 필드를 활용하여 다양한 정보를 관리할 수 있으며,
enum의 불변성과 순서를 유지하는 것이 중요하다.