Java의 enum은 특정 값의 집합을 정의할 때 사용되는 데이터 타입으로, 열거형(enumeration)을 구현하는 데 적합합니다.
이를 활용하면 상수 집합을 더 가독성 있고 타입 안정성을 보장하는 방식으로 사용할 수 있습니다.
예를 들어, 특정 값만 허용되는 경우에 enum을 사용하면 실수를 방지할 수 있습니다.
특징
1. 값의 집합 정의
- enum을 사용하면 미리 정의된 상수 값의 집합을 만들 수 있습니다.
- 예: 색상, 요일, 방향 등과 같이 제한된 선택지가 있는 경우 사용.
2. 타입 안정성
- enum은 특정 값 외의 데이터가 들어갈 수 없도록 제한합니다.
3. 객체처럼 활용 가능
- 각 상수는 객체로 취급되며, 메서드와 필드를 가질 수 있습니다.
4. Switch문과 함께 사용 가능
- enum은 `switch`문에서 간단히 사용할 수 있어 코드 가독성이 향상됩니다.
사용법
기본적인 사용
다음은 요일을 정의하는 간단한 예제입니다:
public enum Day {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
public class EnumExample {
public static void main(String[] args) {
Day today = Day.MONDAY;
switch (today) {
case MONDAY -> System.out.println("오늘은 월요일입니다!");
case FRIDAY -> System.out.println("금요일입니다!");
default -> System.out.println("평범한 날입니다.");
}
}
}
값 추가 및 메서드 사용
enum은 필드와 메서드를 포함할 수 있습니다. 다음은 각각의 열거형에 값을 추가하고 메서드를 활용하는 예제입니다:
public enum Color {
RED("#FF0000"),
GREEN("#00FF00"),
BLUE("#0000FF");
private final String hexCode;
// 생성자
Color(String hexCode) {
this.hexCode = hexCode;
}
// 메서드
public String getHexCode() {
return hexCode;
}
}
public class ColorExample {
public static void main(String[] args) {
Color color = Color.RED;
System.out.println("Color: " + color);
System.out.println("Hex Code: " + color.getHexCode());
}
}
# 출력결과
Color: RED
Hex Code: #FF0000
메서드 오버라이드
각 열거형 값에서 메서드를 다르게 구현할 수도 있습니다:
public enum Operation {
ADD {
@Override
public int apply(int x, int y) {
return x + y;
}
},
SUBTRACT {
@Override
public int apply(int x, int y) {
return x - y;
}
};
// 추상 메서드
public abstract int apply(int x, int y);
}
public class OperationExample {
public static void main(String[] args) {
int result = Operation.ADD.apply(5, 3);
System.out.println("Result: " + result); // Result: 8
}
}
getHexCode() 메서드를 호출했을 때, 해당 상수와 연결된 문자열이 반환되는 방식은 다음과 같습니다:
1. 열거형 상수와 연결된 값 저장
- 열거형 Color는 각각의 상수(RED, GREEN, BLUE)와 문자열(HEX 코드)을 매핑하여 저장합니다. 이 매핑은 열거형의 생성자를 통해 이루어집니다.
- 예를 들어 Color.RED는 생성자를 통해 "#FF0000" 값을 저장합니다.
Color(String hexCode) {
this.hexCode = hexCode;
}
2. getHexCode() 메서드 호출
- 특정 상수의 getHexCode() 메서드가 호출될 때, 해당 상수와 연결된 hexCode 값을 반환합니다.
- 이 값은 private final String hexCode 필드에 저장된 데이터입니다.
public String getHexCode() {
return hexCode; // 상수에 연결된 HEX 코드 반환
}
3. 상수의 메서드 실행
- 예를 들어, Color.RED.getHexCode()를 호출하면 RED 상수에 할당된 HEX 코드인 "#FF0000"을 반환합니다.
작동 과정 예
코드 실행 과정을 간단히 요약하면:
1. 열거형의 RED 상수를 호출 → 이 상수는 내부적으로 hexCode 값으로 "#FF0000"을 가지고 있음.
2. getHexCode() 메서드를 호출 → RED 상수의 hexCode 값을 반환.
3. 출력 → 반환된 값 "#FF0000"을 화면에 출력.
장점
- 코드 가독성 향상: 상수를 직접 사용하지 않고 이름 있는 열거형으로 정리하여 의미를 명확히 합니다.
- 타입 안정성: 잘못된 값을 사용할 위험이 줄어듭니다.
- 객체 지향적 활용: 추가 필드와 메서드를 활용해 더욱 유연하게 사용할 수 있습니다.
적용 사례
- 상태 관리: 예) `ProcessState.STARTED`, `ProcessState.FINISHED`
- 설정 옵션: 예) `FontStyle.BOLD`, `FontStyle.ITALIC`
- API 응답 코드: 예) `HttpStatus.OK`, `HttpStatus.NOT_FOUND`
Java의 enum은 단순한 상수 집합을 넘어 객체 지향적이고 유연한 방식으로 활용 가능합니다.
Java의 `enum` 클래스의 `values()` 메서드는 해당 열거형에 정의된 모든 상수를 배열 형태로 반환합니다.
이를 활용하면 열거형의 상수를 반복 처리하거나 동적으로 접근할 수 있습니다.
---
### 특징
1. 모든 상수 반환
- `values()` 메서드는 열거형에 정의된 상수를 선언된 순서로 배열에 담아 반환합니다.
2. 자동 생성 메서드
- `values()`는 개발자가 명시적으로 작성하지 않아도 컴파일러가 자동으로 생성해줍니다.
3. 활용 목적
- 반복 작업이나 동적 처리가 필요한 경우 유용합니다.
---
### 예제
아래는 간단한 예제를 통해 `values()`의 동작을 설명합니다:
public enum Day {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
public class EnumValuesExample {
public static void main(String[] args) {
// 모든 enum 값 가져오기
for (Day day : Day.values()) {
System.out.println("Day: " + day);
}
}
}
#### 출력 결과
Day: MONDAY
Day: TUESDAY
Day: WEDNESDAY
Day: THURSDAY
Day: FRIDAY
Day: SATURDAY
Day: SUNDAY
---
### 활용 사례
1. 열거형 값 반복 처리
- 모든 상수를 순차적으로 접근하고 작업할 때 사용합니다.
2. UI 드롭다운 옵션 생성
- 열거형 값을 UI의 선택 옵션으로 제공할 때 활용할 수 있습니다.
3. 동적 조건 처리
- 특정 입력값에 따라 열거형 상수를 매칭하거나 검색할 때 사용할 수 있습니다.
---
### 주의점
- 반환된 배열은 복사본입니다. 따라서 배열을 수정해도 원본 열거형 정의에는 영향을 미치지 않습니다.
- 열거형 상수를 가져올 때 순서를 유지하므로 선언 순서에 따라 동작이 달라질 수 있습니다.
'프로그래밍 > Java' 카테고리의 다른 글
디자인패턴 (0) | 2025.04.09 |
---|---|
Optional (0) | 2025.04.08 |
이클립스 SVN LOCK 해제하기 (0) | 2023.01.18 |
이클립스, STS 메모리 설정 (0) | 2023.01.18 |
스트림(Stream) (0) | 2021.12.10 |