Java 기초 (enum, Generic)

KimGwangmin·2026년 9월 4일

enum

값의 목록을 정의할 수 있다. 상태를 관리할 때 유용하다.
String으로 상태를 관리하면 오타나 Case-sensetive 문제가 발생할 수 있다.
enum은 문자열로 의미를 이해할 수 있으면서, 목록에 있는 값만을 허용할 수 있다.

public enum OrderStatus {
    READY, MAKING, DONE
}

java의 enum은 클래스이다. 각 enum 상수는 필드를 가질 수 있으며, 생성자를 통해 값을 초기화 할 수 있다. 또한 메서드를 가질 수 있다.

public enum Season {
    // 상수를 정의하면서 생성자에 값 전달
    SPRING("봄", 1),
    SUMMER("여름", 2),
    FALL("가을", 3),
    WINTER("겨울", 4);

    // 필드 선언
    private final String koreanName;
    private final int value;

    // Enum 생성자 (private 생략 가능)
    Season(String koreanName, int value) {
        this.koreanName = koreanName;
        this.value = value;
    }

    // Getter 메서드
    public String getKoreanName() {
        return koreanName;
    }

    public int getValue() {
        return value;
    }
}

public class Main {
    public static void main(String[] args) {
        Season season = Season.SPRING;
        
        System.out.println(season.getKoreanName()); // 출력: 봄
        System.out.println(season.getValue());      // 출력: 1
    }
}

raw type

List orders = new ArrayList();

orders.add("아메리카노");
orders.add(100);
orders.add(true);

String first = (String) orders.get(0);
String second = (String) orders.get(1); // type mismatch

이 배열은 아무 타입이든 추가할 수 있게 되므로, 값을 꺼낼 때 최상위 타입인 Object로 돌려준다. 명시적으로 형변환을 해준다고 해도 타입 에러가 발생할 위험이 있다.

Generic

클래스나 메서드가 사용할 타입을 외부에서 지정해줄 수 있다.
List<String>으로 선언한다면, 애초에 String만 들어갈 수 있게 되니 위와 같은 문제가 발생하지 않는다. 동시에, 하나의 코드를 여러 타입에 대해 재사용할 수 있다.

0개의 댓글