[Java] Enum

Jeini·2025년 9월 24일
0

☕️  Java

목록 보기
62/70
post-thumbnail

❗️ 자바 실전에서 코드의 가독성과 안전성을 높여줄 수 있는 타입들을 익혀보자


💡 enum

✅ 정해진 값들의 집합
열거형 타입: 특정 타입이 몇 가지 한정된 값을 가지는 타입

  • 변수에 들어올 수 있는 값을 미리 제한하는 방법.
  • 예를 들어 요일 , 색상 , 계절 , 5단계 평가 같은 한정된 선택지가 있을 때 사용한다.
Day today = Day.MONDAY;
  • today 에는 오직 Day enum에 정의된 값(MONDAY, TUESDAY …)만 들어올 수 있다.
  • “월요일”, “화요일” 같은 문자열을 직접 쓰는 것보다 안전하고 실수가 줄어듦.

📌 enum 특징

특징설명
타입 안전성지정된 값만 허용, 잘못된 값은 컴파일 단계에서 잡음
클래스처럼 확장 가능필드, 생성자, 메서드 추가 가능
값 반복 가능values() 로 모든 값 순회 가능
비교 간단== 연산자로 비교 가능
상수 관리숫자나 문자열 상수보다 깔끔하고 유지보수 용이

📌 enum 사용하기

1. Enum 생성자 / final 필드 추가

public enum Color {
    RED("빨강"), GREEN("초록"), BLUE("파랑");

    private String koreanName;

    private Color(String koreanName) {
        this.koreanName = koreanName;
    }

    public String getKoreanName() {
        return koreanName;
    }
}

📌 핵심 포인트

  • Color.RED , Color.GREEN , Color.BLUE 각각이 Color 타입의 객체이다.

👉 즉, REDGREENBLUEColor 클래스의 인스턴스라고 보면 돼.

  1. RED("빨강")RED 라는 enum 상수 하나 만들고, "빨강" 이라는 값을 생성자에 전달
  2. private String koreanName;"빨강" 을 저장할 변수
  3. private Color(String koreanName) → 생성자, koreanName 변수에 값 저장
  4. getKoreanName() → 저장된 값을 꺼내주는 메서드

👉 즉, enum 상수 하나 하나가 자기만의 데이터를 가진 객체라고 생각하면 된다.

public enum Day {

    SUNDAY("일요일"),
    MONDAY("월요일"),
    TUESDAY("화요일"),
    WEDNESDAY("수요일"),
    THURSDAY("목요일"),
    FRIDAY("금요일"),
    SATURDAY("토요일");

    private String koreanName;

    Day(String koreanName) {
        this.koreanName = koreanName;
    }

    public String getKoreanName() {
        return koreanName;
    }
}

2. Enum과 Switch문 함께 쓰기

public class Main {
    public static void main(String[] args) {
        Day today = Day.MONDAY;
        
        switch (today) {
            case MONDAY:
                System.out.println("오늘은 일주일 시작" + today.getKoreanName() + "!");
                break;  
            case TUESDAY:
            case WEDNESDAY:
            case THURSDAY:
                System.out.println("오늘은" + today.getKoreanName() + "!");
                break;
            case FRIDAY:
                System.out.println("오늘은 주말전인 " + today.getKoreanName() + "!");
                break;
            case SATURDAY:
                System.out.println("오늘은 주말인 " + today.getKoreanName() + "!");
                break;
                
        }
    }
}

3. ordinal, compareTo, values 사용하기

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        // 각각 Enum 값 정의
        // Ordinal, compareTo, values

        Day monday = Day.MONDAY;
        Day sunday = Day.SUNDAY;
        Day thursday = Day.THURSDAY;

        System.out.println("ordinal 값: " + monday.ordinal());
        System.out.println("ordinal 값: " + sunday.ordinal());
        System.out.println("ordinal 값: " + thursday.ordinal());

        System.out.println("CompareTo: " + monday.compareTo(sunday));
        System.out.println("CompareTo: " + monday.compareTo(thursday));

        Day[] days = Day.values();
        System.out.println("Days: " + Arrays.toString(days));
    }
}
ordinal 값: 0
ordinal 값: 4
CompareTo: 1
CompareTo: -3
Days: [SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY]

4. 여러 값 연결하여 생성하기

public enum Gender {
    FEMALE("Female", "여자"),
    MALE("Male", "남자"),
    UNKNOWN("Unknows", "미정");

    private String englishTerm;
    private String koreanTerm;

    Gender(String englishTerm, String koreanTerm) {
        this.englishTerm = englishTerm;
        this.koreanTerm = koreanTerm;
    }

    public static Gender valueOfTerm(String str) {
        for (Gender gender : Gender.values()) {
            if(str.equals(gender.englishTerm) || str.equals(gender.koreanTerm)) {
                return gender;
            }
        }
        return Gender.UNKNOWN;
    }
}

profile
Fill in my own colorful colors🎨

0개의 댓글