tech/Spring

[Spring] enum이란?

sunm2n 2025. 7. 3. 15:47

enum (enumeration, 열거형)

 

서로 연관된 상수들을 한곳에 모아 이름으로 관리하기 위한 자바의 특수한 데이터 타입이다.

 

enum 예시 코드

 

이렇게 하면 요일을 문자열이나 숫자로 관리하는 것보다 타입 안정성(type safety) 있게 관리 가능하다.

 

 

 

enum을 쓰는 이유

 

 

의미 있는 이름 부여로 가독성 향상 (ex: Direction.NORTH vs 0)

타입 안전 보장: 잘못된 값이 들어가는 것을 방지

switch문, if문에서 가독성 높게 사용 가능

다른 클래스와 동일하게 필드, 메서드, 생성자 추가 가능

 

 

 

특징

enum은 java.lang.Enum을 상속 (다른 클래스를 상속할 수는 없음)
내부적으로 public static final 상수처럼 동작
생성자에 접근 제한이 걸려 있어 외부에서 인스턴스 생성 불가
name(), ordinal() 메서드 기본 제공

  • name() → 상수 이름 반환
  • ordinal() → 선언 순서의 인덱스(0부터) 반환

에제 : 필드와 메서드 추가

 

 

 

Grade.GOLD.getValue() → 2 반환

실무에서 DB Enum 매핑, 상태 관리, switch-case 처리에 자주 사용

 

switch-case 사용 예시

 

 

 

Enum 값 이름이 DB나 API와 1:1로 매핑되면 이름 변경 시 주의 필요
Enum은 상속이 안 되므로 상태별 행동이 복잡해지면 상태 패턴(State Pattern)으로 전환 고려
ordinal()은 중간에 enum 값이 추가/삭제되면 값이 달라지므로 DB 저장용으로 사용 금지, name() 또는 직접 매핑된 코드 값 사용

 

 

요약

 

enum은 관련 상수 집합을 타입 안정성 있게 관리하는 용도로 사용.

상수 외에 필드, 메서드, 생성자 추가 가능.

스프링/자바 실무에서는 상태, 역할, 코드 값 관리, switch 처리에 자주 사용.

DB 매핑 시 name() 기반으로 매핑하거나 별도의 코드 필드를 두어 관리하는 것이 안전

 

'tech > Spring' 카테고리의 다른 글

[Spring] Config  (0) 2025.07.09
[Spring] SOLID 원칙을 잘 지키고 있는가  (0) 2025.07.04
[Spring] long VS Long  (1) 2025.07.03
[Spring] 좋은 객체 지향 프로그래밍이란?  (1) 2025.06.24
[Spring] 스프링이란?  (5) 2025.06.24