Java Enum 정리
목차
Enum 이란?
Java에서 enum은 상수 값을 정의하는 데 사용되는 특별한 데이터 타입입니다. enum을 사용하면 코드를 보다 깔끔하고, 가독성이 좋으며, 유지보수도 용이하게 할 수 있습니다. 이번 글에서는 enum의 기본 사용법부터 다양한 활용법까지 설명하고, 실용적인 예시도 함께 제공하겠습니다.
1. Enum 기본 사용법
Java에서 enum을 선언하는 방법은 다음과 같습니다.
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
위의 예시는 일주일의 요일을 enum으로 정의한 예시입니다. enum은 일반적으로 대문자로 작성하며, 각 항목은 콤마로 구분됩니다.
2. Enum을 변수로 사용하기
enum은 switch문이나 조건문에서 유용하게 사용될 수 있습니다. 예를 들어, 요일을 변수로 받아 특정 작업을 수행하는 방법을 아래와 같이 작성할 수 있습니다.
public class EnumExample {
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
public static void printDay(Day day) {
switch (day) {
case MONDAY:
System.out.println("It's Monday!");
break;
case FRIDAY:
System.out.println("It's Friday!");
break;
case SUNDAY:
System.out.println("It's Sunday!");
break;
default:
System.out.println("Just another day.");
break;
}
}
public static void main(String[] args) {
printDay(Day.MONDAY);
printDay(Day.SUNDAY);
}
}
출력:
It's Monday!
It's Sunday!
3. Enum에 필드 추가하기
enum은 단순히 상수 값만 저장하는 것이 아니라, 필드와 메소드도 포함할 수 있습니다. 예를 들어, 각 요일에 대해 번호를 부여하고 싶다면, 필드를 추가하여 다음과 같이 구현할 수 있습니다.
public enum Day {
SUNDAY(1), MONDAY(2), TUESDAY(3), WEDNESDAY(4), THURSDAY(5), FRIDAY(6), SATURDAY(7);
private final int dayNumber;
Day(int dayNumber) {
this.dayNumber = dayNumber;
}
public int getDayNumber() {
return dayNumber;
}
}
public class EnumWithFieldsExample {
public static void main(String[] args) {
for (Day day : Day.values()) {
System.out.println(day + " is day number " + day.getDayNumber());
}
}
}
출력:
SUNDAY is day number 1
MONDAY is day number 2
TUESDAY is day number 3
WEDNESDAY is day number 4
THURSDAY is day number 5
FRIDAY is day number 6
SATURDAY is day number 7
4. Enum에 메소드 추가하기
enum에 메소드를 추가하여 각 상수에 대해 다양한 로직을 적용할 수도 있습니다. 예를 들어, 요일에 따른 활동을 출력하는 메소드를 추가할 수 있습니다.
public enum Day {
SUNDAY {
@Override
public void activity() {
System.out.println("Relax, it's Sunday!");
}
},
MONDAY {
@Override
public void activity() {
System.out.println("Start working, it's Monday.");
}
},
TUESDAY {
@Override
public void activity() {
System.out.println("Work hard, it's Tuesday.");
}
},
// 나머지 요일도 정의 가능
;
public abstract void activity();
}
public class EnumWithMethodsExample {
public static void main(String[] args) {
Day.MONDAY.activity();
Day.SUNDAY.activity();
}
}
출력:
Start working, it's Monday.
Relax, it's Sunday!
5. Enum 활용 예시
5.1. 상태 관리
enum을 상태 관리에 활용할 수 있습니다. 예를 들어, 주문의 상태를 관리할 때 enum을 사용하면 코드가 더욱 직관적이고 관리하기 쉬워집니다.
public enum OrderStatus {
PENDING, SHIPPED, DELIVERED, CANCELLED;
}
public class Order {
private OrderStatus status;
public Order(OrderStatus status) {
this.status = status;
}
public void printOrderStatus() {
System.out.println("Order Status: " + status);
}
public static void main(String[] args) {
Order order = new Order(OrderStatus.SHIPPED);
order.printOrderStatus();
}
}
출력:
Order Status: SHIPPED
6. Enum의 장점
- 타입 안전성: enum을 사용하면 값이 제한되므로, 잘못된 값이 들어갈 가능성을 줄일 수 있습니다.
- 상수 관리 용이: 여러 상수 값을 한 곳에서 관리할 수 있어 코드가 깔끔하고, 유지보수가 용이합니다.
- 가독성: enum은 값의 의미를 쉽게 알 수 있도록 해줍니다.
Java Enum 메소드 정리
Java에서 enum은 상수 값들의 집합을 정의하는 타입으로, 다양한 내장 메소드들을 제공합니다. 이 메소드들은 enum을 다루기 쉽고 효율적으로 만들어 주며, 오늘은 그 중에서 가장 자주 사용되는 valueOf(), values(), name(), ordinal()에 대해 알아보겠습니다.
1. valueOf()
valueOf() 메소드는 주어진 이름과 일치하는 enum 항목을 반환합니다. 문자열로 enum 값을 찾고자 할 때 사용됩니다.
예시
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
public class EnumValueOfExample {
public static void main(String[] args) {
// 문자열을 enum 값으로 변환
Day day = Day.valueOf("MONDAY");
System.out.println("Enum value: " + day);
}
}
출력:
Enum value: MONDAY
valueOf()는 해당 이름의 항목이 존재하지 않으면 IllegalArgumentException을 발생시킵니다.
2. values()
values() 메소드는 enum 타입의 모든 값을 배열 형태로 반환합니다. enum에 정의된 모든 항목을 순회하고자 할 때 유용합니다.
예시:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
public class EnumValuesExample {
public static void main(String[] args) {
// 모든 enum 값 출력
for (Day day : Day.values()) {
System.out.println(day);
}
}
}
출력:
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
values()는 enum 항목들을 순차적으로 반환하는 배열을 제공합니다. 이 메소드는 항상 자동으로 생성되므로 개발자가 따로 작성할 필요는 없습니다.
3. name()
name() 메소드는 enum 항목의 이름을 문자열로 반환합니다. 이는 enum 값의 이름을 출력하거나 비교할 때 유용합니다.
예시:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
public class EnumNameExample {
public static void main(String[] args) {
Day day = Day.MONDAY;
System.out.println("Enum name: " + day.name());
}
}
출력:
Enum name: MONDAY
name() 메소드는 enum 항목의 선언된 이름을 그대로 반환합니다. 이 메소드는 모든 enum 항목에 자동으로 생성됩니다.
4. ordinal()
ordinal() 메소드는 enum 항목의 순서를 반환합니다. enum 항목이 정의된 순서대로 인덱스를 0부터 부여하고, 이를 반환합니다.
예시:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
public class EnumOrdinalExample {
public static void main(String[] args) {
Day day = Day.WEDNESDAY;
System.out.println("Ordinal value: " + day.ordinal());
}
}
출력:
Ordinal value: 3
ordinal() 메소드는 enum 항목의 순서값을 반환합니다. 예를 들어, SUNDAY는 0, MONDAY는 1, WEDNESDAY는 3입니다.
5. compareTo()
compareTo() 메소드는 두 enum 항목의 순서를 비교합니다. ordinal() 값에 기반해 비교하는 방식으로, compareTo()는 Comparable 인터페이스를 구현한 enum 클래스에서 제공됩니다.
예시:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
public class EnumCompareToExample {
public static void main(String[] args) {
Day day1 = Day.MONDAY;
Day day2 = Day.WEDNESDAY;
// 순서 비교
System.out.println(day1.compareTo(day2)); // -2
}
}
출력:
-2
compareTo() 메소드는 두 enum 항목의 순서를 비교하여, 첫 번째 항목이 두 번째 항목보다 앞에 있으면 음수, 뒤에 있으면 양수를 반환합니다. 동일한 경우 0을 반환합니다.
6. valueOf()와 name() 차이점
- valueOf()는 문자열로 enum 값을 찾을 때 사용하고, 해당 이름의 값이 없으면 예외가 발생합니다.
- name()은 이미 enum 객체에 대한 메소드로 해당 객체의 이름을 문자열로 반환합니다.
예시:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
public class EnumNameAndValueOfExample {
public static void main(String[] args) {
Day day1 = Day.MONDAY;
Day day2 = Day.valueOf("MONDAY");
System.out.println("Using name(): " + day1.name()); // MONDAY
System.out.println("Using valueOf(): " + day2); // MONDAY
}
}
출력:
Using name(): MONDAY
Using valueOf(): MONDAY
결론
Java의 enum은 다양한 내장 메소드들을 제공하여, 상수 집합을 관리하고 조작하는 데 매우 유용합니다. valueOf(), values(), name(), ordinal()과 같은 메소드를 적절히 활용하면 코드를 더 간결하고 효율적으로 작성할 수 있습니다. 각 메소드의 특성을 잘 이해하고 필요에 맞게 활용해 보세요.
이 포스트에서는 enum의 기본적인 사용법부터 필드 추가, 메소드 사용법까지 다양하게 다뤄보았습니다. 이를 바탕으로 다양한 Java 프로젝트에서 enum을 적극적으로 활용해 보세요!