본문 바로가기

Java

[Java] Enum 데이터 타입

728x90
반응형

Enum은 코드에서 상수를 그룹화하여 사용하기 쉽게 만들어주고, 코드의 가독성과 안전성을 높여준다.

오늘 포스팅에서는 예시를 통해 Enum을 사용하는 방법과 그 장점들을 자세히 설명하겠다.


1. 예시: 프로그램 상태를 관리하는 Enum

프로그램의 상태를 나타내는 Enum을 정의하여, 상태에 따라 프로그램이 다르게 동작하도록 할 수 있다. 이를 통해 상태에 따른 코드를 간결하고 명확하게 작성할 수 있다.

public enum ProgramState {
    STARTING,
    RUNNING,
    PAUSED,
    STOPPED
}

여기서 ProgramState는 Enum이며, STARTING, RUNNING, PAUSED, STOPPED는 각각 프로그램의 특정 상태를 나타내는 상수이다.

 

2. Enum을 사용하는 코드 예시

이제 프로그램의 상태를 관리하는 코드를 작성하여, 상태에 따라 다른 동작을 수행하도록 해보자.

public class Program {
    private ProgramState state;

    public Program() {
        state = ProgramState.STARTING;
    }

    public void setState(ProgramState state) {
        this.state = state;
        System.out.println("프로그램 상태가 " + state + "(으)로 변경되었습니다.");
    }

    public void performAction() {
        switch (state) {
            case STARTING:
                System.out.println("프로그램을 시작하는 중입니다...");
                break;
            case RUNNING:
                System.out.println("프로그램이 실행 중입니다.");
                break;
            case PAUSED:
                System.out.println("프로그램이 일시 정지되었습니다.");
                break;
            case STOPPED:
                System.out.println("프로그램이 종료되었습니다.");
                break;
            default:
                System.out.println("알 수 없는 상태입니다.");
                break;
        }
    }

    public static void main(String[] args) {
        Program program = new Program();

        program.performAction(); // STARTING 상태에 따른 동작 수행

        program.setState(ProgramState.RUNNING);
        program.performAction(); // RUNNING 상태에 따른 동작 수행

        program.setState(ProgramState.PAUSED);
        program.performAction(); // PAUSED 상태에 따른 동작 수행

        program.setState(ProgramState.STOPPED);
        program.performAction(); // STOPPED 상태에 따른 동작 수행
    }
}

 

3. Enum의 장점

  • 타입 안전성: Enum을 사용하면 잘못된 값이 사용되는 것을 방지할 수 있다. 예를 들어, ProgramState 타입으로 정의된 변수에는 STARTING, RUNNING, PAUSED, STOPPED와 같은 정의된 값만 설정할 수 있다.
  • 가독성: 상태를 숫자나 문자열로 관리하는 것보다, Enum을 사용하면 상태의 의미를 명확히 표현할 수 있어 코드의 가독성이 높아진다.
  • 유지보수 용이성: 새로운 상태를 추가하거나, 상태에 따른 동작을 수정할 때 Enum을 사용하면 더 쉽게 관리할 수 있다. 예를 들어, Enum에 새로운 상수를 추가하고 switch문에 새로운 케이스를 추가하면 된다.
  • switch와의 결합: Enum은 switch문과 결합하여 상태에 따라 다양한 동작을 수행할 수 있다. 이를 통해 코드가 더 간결하고 명확해진다.

4. Enum에 메서드 추가하기

Enum은 메서드와 필드를 가질 수 있다. 예를 들어, 각 상태에 대한 메시지를 반환하는 메서드를 추가해 보겠다.

public enum ProgramState {
    STARTING("프로그램을 시작하는 중입니다..."),
    RUNNING("프로그램이 실행 중입니다."),
    PAUSED("프로그램이 일시 정지되었습니다."),
    STOPPED("프로그램이 종료되었습니다.");

    private String message;

    ProgramState(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

public class Program {
    private ProgramState state;

    public Program() {
        state = ProgramState.STARTING;
    }

    public void setState(ProgramState state) {
        this.state = state;
        System.out.println("프로그램 상태가 " + state + "(으)로 변경되었습니다.");
    }

    public void performAction() {
        System.out.println(state.getMessage());
    }

    public static void main(String[] args) {
        Program program = new Program();

        program.performAction();

        program.setState(ProgramState.RUNNING);
        program.performAction();

        program.setState(ProgramState.PAUSED);
        program.performAction();

        program.setState(ProgramState.STOPPED);
        program.performAction();
    }
}

이제 performAction() 메서드는 상태에 따라 각기 다른 메시지를 출력하게 된다. 이를 통해 Enum을 더 강력하게 활용할 수 있다.


결론

Enum을 사용하면 상수들을 그룹화하여 코드의 가독성을 높이고, 타입 안전성을 보장하면서 복잡한 로직을 간결하게 표현할 수 있다. 프로그램의 상태 관리, 명령어 집합, 설정 옵션 등 다양한 상황에서 Enum은 매우 유용하다.

728x90
반응형