본문 바로가기
프로그래밍/Java

Enum

by freeelifee 2025. 4. 8.
728x90

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. 동적 조건 처리
   - 특정 입력값에 따라 열거형 상수를 매칭하거나 검색할 때 사용할 수 있습니다.

---

### 주의점
- 반환된 배열은 복사본입니다. 따라서 배열을 수정해도 원본 열거형 정의에는 영향을 미치지 않습니다.
- 열거형 상수를 가져올 때 순서를 유지하므로 선언 순서에 따라 동작이 달라질 수 있습니다.

728x90

'프로그래밍 > 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