[Practice-3] Spring Data: Enum 고도화

2025. 12. 16. 12:25·Spring/JPA

1. 들아가며

이커머스 프로젝트에서 상품의 카테고리(Category)처럼 정해진 기준값을 다룰 때 Enum은 필수적이다. 하지만 실무에서는 단순히 값을 나열하는 것만으로는 부족한 경우가 많다. 이번 글에서는 '패션', '전자기기'와 같은 카테고리를 예시로, 기존의 단순한 Enum 사용법의 한계와 이를 필드와 생성자를 활용해 개선하는 방법을 정리해 본다.


2.  기존 방식: 단순 나열

2.1. 예시코드

가장 흔하게, 그리고 처음에 쉽게 작성하는 방식이다. 단순히 상수의 이름만 정의한다.

public enum Category {
    FASHION,
    ELECTRONICS,
    FOOD
}

2.2. 문제점

DB에 저장할 때는 문제가 없지만, 화면에 보여줄 때 문제가 발생한다. 사용자에게 "FASHION"이라는 영어 코드 대신 "패션의류"라는 친절한 한글 이름을 보여줘야 한다면, 결국 서비스 로직이나 뷰(View) 어딘가에 변환 코드가 덕지덕지 붙게 된다.

// Bad Practice: Enum 외부에서 설명을 관리함
public String getDisplayValue(Category category) {
    if (category == Category.FASHION) {
        return "패션의류";
    } else if (category == Category.ELECTRONICS) {
        return "전자기기";
    }
    return "기타";
}

 

  • 유지보수성 저하: 카테고리가 추가될 때마다 위와 같은 if문을 찾아다니며 수정해야 한다.
  • 응집도 하락: 카테고리 데이터와 그 설명이 분리되어 관리된다.

 


3. 새로운 방식: 필드와 생성자 활용

3.1. 예시코드

Java의 Enum은 특수한 '클래스'라는 점을 이용한다. Enum 상수가 자기 자신과 관련된 데이터(설명, 코드값 등)를 직접 가지도록 변경한다.

@Getter
public enum RootCategory {
    // 1. 생성자에 매핑할 데이터를 전달
    FASHION("패션의류"),
    ELECTRONICS("전자기기"),
    FOOD("식품/생활");

    // 2. 상태를 저장할 필드 선언 (Final 권장)
    private final String description;

    // 3. 생성자 (Enum은 private 생성자만 허용)
    RootCategory(String description) {
        this.description = description;
    }
}

3.2. 이점

// 클라이언트 코드
System.out.println(RootCategory.FASHION.getDescription()); 
// 출력: "패션의류"

 

  • 데이터의 일원화: "FASHION"이라는 코드와 "패션의류"라는 설명이 한곳(RootCategory)에 모여 있어 관리가 쉽다.
  • 사용 편의성: 외부에서 별도의 변환 로직 없이, Enum에게 직접 물어보면 된다.
  • 확장성: 추후에 '표시 순서(displayOrder)'나 '관련 이미지 URL' 같은 필드가 필요해져도, Enum 내부에 필드만 추가하면 되므로 기존 로직을 건드릴 위험이 적다.

 

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

[Practice-6] 단뱡향/양방향 선택 기준 (⭐⭐⭐)  (0) 2025.12.25
[Practice-5] 일대다/다대일 관계 정의  (0) 2025.12.16
[Practice-4] Spring Data: 무한 깊이 조회 패턴 (댓글/대댓글, 카테고리)  (0) 2025.12.16
[Practice-2] 연관관계 편의 메서드  (1) 2025.08.31
[Practice-1] JPA 연관관계 매핑과 성능 최적화: 흔한 오해와 올바른 접근법 (⭐⭐)  (0) 2025.08.28
'Spring/JPA' 카테고리의 다른 글
  • [Practice-5] 일대다/다대일 관계 정의
  • [Practice-4] Spring Data: 무한 깊이 조회 패턴 (댓글/대댓글, 카테고리)
  • [Practice-2] 연관관계 편의 메서드
  • [Practice-1] JPA 연관관계 매핑과 성능 최적화: 흔한 오해와 올바른 접근법 (⭐⭐)
h6bro
h6bro
백엔드 개발자의 기술 블로그
  • h6bro
    Jun's Tech Blog
    h6bro
  • 전체
    오늘
    어제
    • 분류 전체보기 (250) N
      • Java (18)
        • Core (9)
        • Design Pattern (9)
      • Spring (80)
        • Core (24)
        • MVC (6)
        • DB (10)
        • JPA (26)
        • Monitoring (3)
        • Security (11)
        • WebSocket (0)
      • Database (33)
        • Redis (15)
        • MySQL (18)
      • MSA (25) N
        • MSA 기본 (11)
        • MSA 아키텍처 (14) N
      • Kafka (30) N
        • Core (18) N
        • Connect (12)
      • ElasticSearch (11)
        • Search (11)
        • Logging (0)
      • Test (4)
        • k6 (4)
      • Docker (9)
      • CI&CD (10)
        • GitHub Actions (6)
        • ArgoCD (4)
      • Kubernetes (18)
        • Core (12)
        • Ops (6)
      • Cloud Engineering (4)
        • AWS Infrastructure (3)
        • AWS EKS (1)
        • Terraform (0)
      • Project (8)
        • LinkFolio (1)
        • Secondhand Market (7)
  • 블로그 메뉴

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

  • 공지사항

    • Cloud Engineering 포스팅 정리
  • 인기 글

  • 태그

    ㅈ
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
h6bro
[Practice-3] Spring Data: Enum 고도화
상단으로

티스토리툴바