자바의 enum(열거형)은 상수 목록을 저장하는 특수한 데이터 타입입니다. enum 키워드를 사용해 정의하며, 상수들은 중괄호 안에 쉼표로 구분하여 나열합니다.
enum은 'enumeration(열거)'의 줄임말로, 미리 정의된 고정된 값들의 집합만 가질 수 있는 데이터 타입을 의미합니다.
enum은 변수가 특정 값 목록 중 하나만 가질 수 있도록 제한하고 싶을 때 유용합니다. 예를 들어, 커피숍에서 판매하는 커피 사이즈 목록을 저장할 때 enum을 활용할 수 있습니다.
이 글에서는 자바 enum의 기본 개념부터 실전 예제, 그리고 자주 사용되는 핵심 메서드까지 체계적으로 살펴보겠습니다.
Java Enum 문법
자바 enum은 상수 목록을 표현합니다. enum으로 선언된 변수는 해당 enum에 정의된 값만 가질 수 있습니다. 덕분에 개발자는 변하지 않는 데이터를 안전하게 저장할 수 있습니다.
예를 들어, 직원 급여 등급을 저장하는 변수가 다섯 가지 값 중 하나만 가질 수 있다고 정했다고 가정해 봅시다. 또는 직원 계약 형태를 저장하는 변수가 파트타임(Part-time), 풀타임(Full-time), 무계약(Zero-hours) 세 가지 값만 가질 수 있도록 정할 수도 있습니다. 이런 경우에 enum을 사용하면 됩니다.
enum은 enum 키워드로 선언합니다. 기본 문법은 다음과 같습니다:
enum 이름 {
VALUE1, VALUE2, VALUE3
}
각 구성 요소를 살펴보면 다음과 같습니다:
- enum: 열거형을 선언한다는 것을 프로그램에 알립니다.
- 이름(name): enum의 이름입니다.
- VALUE1, VALUE2, VALUE3: enum이 저장하는 상수 값들입니다. 일반적으로 대문자로 작성합니다.
자바에서 Enum을 사용하는 이유
enum을 사용하면 알고리즘을 사람과 컴퓨터 모두에게 더 읽기 쉬운 방식으로 표현할 수 있습니다.
enum을 작성하면 컴퓨터뿐 아니라 코드를 작성하는 개발자에게도 "이 변수는 지정된 몇 가지 값만 가질 수 있다"는 사실이 명확히 전달됩니다. 따라서 나중에 코드를 다시 볼 때도 해당 변수가 가질 수 있는 값을 쉽게 파악할 수 있습니다.
또한 enum은 상수를 더 효과적으로 관리할 수 있게 해줍니다. 사실 enum은 자바에서 여러 줄에 걸쳐 작성되어 가독성이 떨어졌던 int 상수를 대체하기 위해 도입되었습니다. 다음은 예전 방식으로 int 상수를 선언한 예입니다:
class IntConstant {
public final static int ECONOMY = 1;
public final static int BUSINESS = 2;
public final static int FIRST_CLASS = 3;
}
이 코드는 상수를 선언하는 데 다섯 줄이 필요합니다. 하지만 enum을 사용하면 세 줄로 줄일 수 있습니다:
enum AirplaneClasses {
ECONOMY, BUSINESS, FIRST_CLASS
}
훨씬 간결하고 읽기 쉬워졌습니다.
Java Enum 선언하기
커피숍에서 서비스 직원이 바리스타에게 커피 주문을 전달할 때 사용하는 앱을 만든다고 가정해 봅시다.
바리스타가 음료 크기를 입력할 때 선택 가능한 옵션은 SMALL, REGULAR, LARGE 세 가지뿐이길 원합니다. 이때 enum을 사용해 음료 크기를 이 세 가지 옵션으로 제한할 수 있습니다:
enum Sizes {
SMALL, REGULAR, LARGE
}
이 예제에서는 세 가지 값을 가지는 Sizes라는 enum을 선언했습니다. 이제 코드 어디에서든 이 enum의 값들을 참조할 수 있습니다.
Java Enum 예제
이번에는 고객이 주문한 커피 크기를 콘솔에 출력하는 프로그램을 작성해 보겠습니다. 출력된 값은 고객의 음료를 만드는 바리스타가 확인하게 됩니다.
다음 코드를 사용해 고객이 주문한 커피 크기를 콘솔에 출력할 수 있습니다:
enum Sizes {
SMALL, REGULAR, LARGE
}
class PrintSize {
Sizes coffeeSize;
public PrintSize(Sizes coffeeSize) {
this.coffeeSize = coffeeSize;
}
public void placeOrder() {
switch(coffeeSize) {
case SMALL:
System.out.println("This coffee should be small.");
break;
case REGULAR:
System.out.println("This coffee should be regular.");
break;
case LARGE:
System.out.println("This coffee should be large.");
break;
}
}
}
class Main {
public static void main(String[] args) {
PrintSize order173 = new PrintSize(Sizes.SMALL);
order173.placeOrder();
}
}
위 코드의 실행 결과는 다음과 같습니다:
This coffee should be small.
먼저 SMALL, REGULAR, LARGE 세 가지 값을 가지는 Sizes enum을 선언했습니다. 그다음 PrintSize 클래스를 선언했는데, 이 클래스는 고객 음료의 크기를 전달받아 콘솔에 출력하는 역할을 합니다.
메인 프로그램에서는 PrintSize 클래스를 사용하는 order173 객체를 생성했습니다. 생성자에 Sizes.SMALL을 인자로 전달하여 PrintSize 클래스의 coffeeSize 변수에 SMALL 값이 할당되도록 했습니다.
그다음 order173.placeOrder()를 호출해 PrintSize 클래스 내부의 switch-case 문을 실행합니다. switch문은 coffeeSize 변수의 값을 세 가지 case와 비교하고, 고객이 주문한 커피 크기에 맞는 메시지를 콘솔에 출력합니다.
고객이 스몰 사이즈 커피를 주문했으므로, 코드는 "This coffee should be small."이라는 메시지를 출력합니다.
자바 switch-case 문에 대해 더 자세히 알고 싶다면 자바 switch문 관련 튜토리얼을 참고해 보세요.
Java Enum 메서드
자바의 enum 클래스에는 enum 값을 조회하고 조작할 수 있는 다양한 내장 메서드가 포함되어 있습니다. 가장 많이 사용되는 다섯 가지 메서드를 소개합니다.
compareTo()
compareTo()는 enum의 상수들을 사전순으로 비교하고 두 상수의 ordinal(서수) 값 차이를 반환합니다. 앞선 예제의 enum 값으로 compareTo()를 사용한 예입니다:
int difference = Sizes.SMALL.compareTo(Sizes.LARGE); System.out.println(difference);
이 코드는 ordinal 값을 기준으로 SMALL과 LARGE의 차이를 반환합니다. 실행 결과:
-2
toString()
toString()은 enum 상수의 이름을 문자열로 변환합니다. LARGE 값을 문자열로 변환하는 예입니다:
String large_string = Sizes.LARGE.toString(); System.out.println(large_string);
실행 결과:
"LARGE"
name()
name() 메서드는 enum 클래스에서 상수를 정의할 때 사용된 이름을 그대로 반환합니다. REGULAR 커피 사이즈의 정의된 이름을 반환하는 예입니다:
String regular_name = Sizes.REGULAR.name(); System.out.println(regular_name);
실행 결과:
"REGULAR"
values()
values() 메서드는 enum에 포함된 모든 상수를 담은 자바 배열을 반환합니다. 사용 예는 다음과 같습니다:
Sizes[] sizeList = Sizes.values();
valueOf()
valueOf()는 문자열을 인자로 받아 같은 이름을 가진 enum 상수를 반환합니다. 이름이 REGULAR인 enum 상수를 가져오려면 다음 코드를 사용합니다:
String regular_constant = Sizes.valueOf("REGULAR");
System.out.println(regular_constant);
실행 결과:
REGULAR
결론
enum(enumeration의 줄임말)은 고정된 값 집합을 가지는 자바 데이터 타입입니다.
변수가 선택된 범위의 값 중 하나만 저장할 수 있어야 할 때 enum이 매우 유용합니다.
이 튜토리얼의 내용을 직접 연습해 보면 자바 enum을 능숙하게 활용할 수 있게 될 것입니다. 자바 코딩을 더 깊이 배우고 싶다면 자바 프로그래밍 완전 정복 가이드를 확인해 보세요.