[JAVA] Enum이란?

2025. 9. 18. 14:34·JAVA

실습 과제 간 Enum 을 활용하여 작업해야 하는 과제가 있었는데, Enum에 대한 개념을 확실히 잡고가지 않아 어려움이 많았다.

그래서 이번 기회에 Enum을 확실히 잡고 넘어가기 위해 아래 정리하고자 한다.

Enum의 개념은 무엇인가?

  • Enum은 상수 데이터들의 집합. 정해져 있는 한정된 데이터 묶음을 Enum으로 사용하면 보다 구조적으로 프로그래밍 할 수 있음

Enum은 어떤 구조인가?

  • Enum 상수 하나당 자신의 인스턴스(객체)를 만들어 public static final 필드로 공개하는 것과 같다.
  • 아래의 예시 코드를 통해 비교해보자
public enum Operator {
    ADD, SUBTRACT, MULTIPLY, DIVIDE
}

가 내부적으로 어떤 구조로 되어있는가에 대해 확인해보자면

public final class Operator extends Enum<Operator> {
    // 1. 상수(객체)
    public static final Operator ADD = new Operator("ADD", 0);
    public static final Operator SUBTRACT = new Operator("SUBTRACT", 1);
    public static final Operator MULTIPLY = new Operator("MULTIPLY", 2);
    public static final Operator DIVIDE = new Operator("DIVIDE", 3);

    // 2. 모든 상수를 보관하는 배열
    private static final Operator[] VALUES = { ADD, SUBTRACT, MULTIPLY, DIVIDE };

    // 3. private 생성자 (외부에서 new 불가)
    private Operator(String name, int ordinal) {
        super(name, ordinal);
    }

    // 4. values(), valueOf() 메서드 자동 생성
    public static Operator[] values() { return VALUES.clone(); }
    public static Operator valueOf(String name) { ... }
}

 

각각의 객체를 생성하고, 배열에 그 상수가 보관되며 배열을 복사한 값으로 조회가 가능하도록 하게 하는 구조적인 특징을 볼 수 있다.
모든 enum은 자동으로 java.lang.Enum<T> 클래스를 상속하기 때문에 아래의 구조적인 내용들이 적용되는 것!

 

Enum은  어떻게 사용하는가?

  • Enum은 크게 아래의 상황에서 활용되고 사용될 수 있다
    ① 값 비교 (== 연산자)
    ② 호출 / 출력
    ③ switch문 활용
    ④ 반복문에서의 활용
    ⑤ 연산 대체
    • 내가 진행하는 계산기 과제에서는 연산처리를 대체하는 부분까지 고려하여 enum을 활용해볼 예정

Enum이 제공하는 것은 무엇인가?

  • 타입 안정성
    • enum으로 정의된 값만 사용할 수 있음
    • 잘못된 문자열이나 숫자는 컴파일 단계에서 막힘
  • 자동 생성 메서드(내장 메서드)
메서드 설명 리턴 타입
name() 열거 객체의 문자열을 리턴 String
ordinal() 열거 객체의 순번(0부터 시작)을 리턴 int
compareTo() 열거 객체를 비교해서 순번 차이를 리턴 int
valueOf(String name) 문자열을 입력받아서 일치하는 열거 객체를 리턴 enum
values() 모든 열거 객체들을 배열로 리턴 enum[]

 

  • 가독성 향상
    • 기존 코드에서 숫자나 문자열 대신 의미있는 이름(상수) 사용
    • 코드를 읽고 이해하기가 쉬워짐
  • 자체 클래스 상속 (Enum<T>)
    • 위의 예시에서도 설명했지만 모든 enum은 java.lang.Enum 클래스를 상속함
      • 대신 이로 인해 다른 클래스를 상속받을 수 없음
    • 공통 기능(비교, 이름 반환 등)을 기본으로 제공


Enum을 어디까지 확장해서 사용하는 것이 적절한가?

Enum은 크게 3가지의 확장성이 있다고 확인할 수 있었다.

① 단순 상수 집합 표현 : 방향, 상태, 요일, 연산자 등 한정된 선택지를 표현

public enum Direction { NORTH, SOUTH, EAST, WEST }


② 속성 추가를 한 형태 : 상수에 코드 값 / 설명 / 기호 같은 부가 정보를 붙일 때

public enum Operator {
    ADD("+"), SUBTRACT("-");

    private final String symbol;
    Operator(String symbol) { this.symbol = symbol; }
    public String getSymbol() { return symbol; }
}

 

③ 상수별 개념 및 행동 정의 : 각 상수가 다른 동작을 해야할 때

public enum Operator {
    ADD { @Override public int apply(int a, int b) { return a + b; } },
    SUBTRACT { @Override public int apply(int a, int b) { return a - b; } };
    public abstract int apply(int a, int b);
}

 

➕ 모든 로직을 enum 안에서 구현하려고 하면 배보다 배꼽이 더 커지는 현상으로 가독성이 되려 더 떨어지게 될 수 있음을 유의 ! 

'JAVA' 카테고리의 다른 글

[JAVA] 객체 지향 프로그래밍 개념 정리 (OOP)  (0) 2025.09.19
[JAVA] JSP vs Thymleaf 개념 더 알아보기  (0) 2025.09.19
[JAVA] 자바 개념 확장 - Generic, Lambda, Stream, Thread  (0) 2025.09.17
[JAVA] 자바 개념 확장 - Exception, Optional, Colletion  (0) 2025.09.17
JAVA 객체지향 개념 정리  (1) 2025.09.16
'JAVA' 카테고리의 다른 글
  • [JAVA] 객체 지향 프로그래밍 개념 정리 (OOP)
  • [JAVA] JSP vs Thymleaf 개념 더 알아보기
  • [JAVA] 자바 개념 확장 - Generic, Lambda, Stream, Thread
  • [JAVA] 자바 개념 확장 - Exception, Optional, Colletion
stark77
stark77
하마의 IT 자기개발 이모저모, 백엔드 개발자로 거듭나기
  • stark77
    하마의 개발자 성장일기
    stark77
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 컴퓨터구조와 운영체제
        • 컴퓨터구조
        • 운영체제
      • SQL 기초
      • Spring
        • 백엔드 기초
        • Spring 실습
      • JAVA
        • Java 실습
      • HTML&CSS
        • HTML&CSS 실습
      • Git&GitHub
        • Git&GitHub 실습
      • 내배캠 끄적끄적
        • Today I Learned
      • 유용한 툴 및 사이트 정리
      • 취미
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Github
    객체지향
    JPA
    실시간 데이터 처리
    java
    네트워크 기초
    String.format
    Til
    MVC
    백엔드 기초
    Spriingboot
    웹소켓
    프로세스와 쓰레드
    Java 문법기초
    BEAN
    git
    SpringSecurity
    thymleaf
    다형성
    RestTemplate
    Spring
    Stomp
    jsp
    경합조건과 교착상태
    for문
    백엔드 기초다지기
    객체지향프로그래밍
    HTML&CSS
    algorithm
    WebSocket
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
stark77
[JAVA] Enum이란?
상단으로

티스토리툴바