[TIL] Java Enum 간단하게 정리

NCOOKIE·2025년 3월 14일
0

TIL

목록 보기
14/20

Enum

  • 상수들의 집합
  • 내부적으로 final class처럼 동작한다.
  • 객체처럼 필드와 메소드를 가질 수 있다.
  • 특정 상태를 표현하는데 유용하다.
  • final static int 보다 더 객체지향적인 방식으로 코드를 작성할 수 있다.

Enum도 객체이다

  • 각 ENUM 값은 인스턴스(instance)다.
  • ENUM 값마다 필드, 생성자, 메소드를 가질 수 있다.
  • 각 ENUM 값들은 싱글턴 객체로 관리된다.
  • ENUM은 new 키워드로 생성할 수 없지만, 내부적으로 자동으로 생성되는 객체다.

Enum은 다양한 관점의 상수이다

일반적인 상수는 단순히 값만을 가지지만, ENUM은 다양한 관점에서 상수를 표현할 수 있다.

enum OrderStatus {
    PENDING, SHIPPED, DELIVERED, CANCELLED;
}

public class Order {
    private OrderStatus status;

    public Order() {
        this.status = OrderStatus.PENDING;
    }

    public void shipOrder() {
        if (status == OrderStatus.PENDING) {
            this.status = OrderStatus.SHIPPED;
        }
    }
}
  • ENUM을 활용하면 특정한 상태(State) 를 명확하게 표현할 수 있습니다.
  • OrderStatus를 사용하면 String을 비교하는 것보다 타입 안정성이 보장된다.

ENUM과 메소드

ENUM은 단순한 상수의 모음이 아니라, 객체처럼 동작하는 클래스이기 때문에 메서드도 가질 수 있다.

enum Direction {
    NORTH {
        @Override
        public void describe() {
            System.out.println("위쪽 방향입니다.");
        }
    },
    SOUTH {
        @Override
        public void describe() {
            System.out.println("아래쪽 방향입니다.");
        }
    };

    public abstract void describe();
}
  • ENUM 값마다 서로 다른 동작을 정의할 수 있다.
  • abstract 메서드를 선언하여 각 ENUM 값이 구현하도록 만들 수 있다.
  • 위 코드에서는 생성자 생략 가능. 필드가 없기 때문

ENUM과 인터페이스

ENUM은 인터페이스도 구현할 수 있다. 이를 활용하면 ENUM을 더욱 유연하게 사용할 수 있다.

interface Printable {
    void print();
}

enum Level implements Printable {
    LOW {
        public void print() { System.out.println("낮은 레벨"); }
    },
    HIGH {
        public void print() { System.out.println("높은 레벨"); }
    }
}
  • ENUM이 인터페이스를 구현하면 다형성을 활용할 수 있다.
  • ENUM을 인터페이스 기반으로 설계하면 유지보수가 쉬워진다.

❓ 퀴즈

  1. ENUM을 사용할 때 생성자를 정의하는 이유는?

    ⇒ ENUM은 클래스이기 때문. 객체를 생성 시 생성자가 있어야 한다. (필드가 있을 때)

  2. ENUM을 활용하면 final static 상수보다 어떤 점이 더 좋은가?

    ⇒ 협업하는 사람들이 같은 생각을 할 수 있게 그룹핑 해준다.

profile
일단 해보자

0개의 댓글