Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java) 타입 세이프 열거형(Type-safe Enum)이란 무엇일까?

자바의 열거형(Enum)은 타입 세이프(type-safe)하다는 특징을 가지고 있습니다. 이는 열거형이 자체적인 네임스페이스(namespace)를 갖기 때문에, 열거형 상수로 미리 정의된 값 이외의 다른 값을 할당할 수 없다는 의미입니다.

타입 세이프 열거형은 Java 1.5 버전부터 공식적으로 도입되었습니다. 또한 열거형은 참조 타입(reference type)에 해당하기 때문에 클래스나 인터페이스와 유사하게 동작하며, 개발자가 열거형 선언 내부에 메서드와 변수를 직접 정의하는 것도 가능합니다.

예제 1: 기본적인 열거형 사용법

아래 예제는 열거형에 정의된 모든 상수를 values() 메서드를 통해 순회하며 출력하는 코드입니다.

import java.util.*;
enum JobType {
    permanent,
    contract
}
public class EnumTest1 {
    public static void main(String []args) {
        print(JobType.values());
    }
    public static void print(JobType[] list) {
        for (int i=0; i < list.length; i++) {
            System.out.println(list[i]);
        }
    }
}

실행 결과

permanent
contract

예제 2: 열거형 상수별 메서드 오버라이딩

열거형은 단순한 상수 나열을 넘어, 각 상수마다 고유한 동작을 정의할 수 있습니다. 아래 예제에서는 추상 메서드를 선언하고, 각 열거형 상수가 이를 서로 다르게 구현하고 있습니다.

enum JobType {
    permanent {
        public void print(String str1) {
            System.out.println("This is a permanent " + str1);
        }
    },
    contract {
        public void print(String str2) {
            System.out.println("This is a contract " + str2);
        }
    };
    abstract void print(String name);
}
public class EnumTest2 {
    public static void main(String[] args) {
        JobType dt1 = JobType.permanent;
        JobType dt2 = JobType.contract;
        dt1.print("job");
        dt2.print("job");
    }
}

실행 결과

This is a permanent job
This is a contract job

정리

타입 세이프 열거형을 사용하면 잘못된 값의 할당을 컴파일 시점에 방지할 수 있어 코드의 안정성과 가독성이 크게 향상됩니다. 특히 상태나 분류를 표현해야 하는 경우 문자열이나 정수 상수 대신 열거형을 사용하는 것이 자바 프로그래밍의 모범 사례(best practice)로 권장됩니다.