[Java-Enum] 자바 Enum 매핑: 이해와 활용법

2024. 12. 24. 13:33·Java
728x90
반응형

Java Enum은 특정 값들의 집합을 정의할 때 유용한 기능입니다.

✅ 주로 코드의 가독성을 높이고, 실수를 줄이는 데 도움을 주죠. 

 

오늘은 Enum의 기본 개념부터 데이터베이스와의 매핑까지, 하나씩 차근차근 알아보겠습니다.

 

1. What is Java Enum? 🤔

Enum(열거형)은 상수 집합을 표현하는 특수 클래스입니다.

예를들어 요일, 색상, 상태 같은 값들을 Enum으로 정의할 수 있어요.

 

기본 사용법

public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

 

Enum 값 사용

public class EnumExample {
    public static void main(String[] args) {
        Day today = Day.MONDAY;

        // 출력
        System.out.println("Today is: " + today);

        // 비교
        if (today == Day.MONDAY) {
            System.out.println("It's Monday!");
        }
    }
}

 

출력 결과:

Today is: MONDAY  
It's Monday!

 

📝 한 줄 요약

Enum은 미리 정해진 값의 집하을 표현하는 데 사용됩니다. 딱 떨어지는 값들(요일, 상태 등)이 사용하기에 딱입니다!


2. Enum에 추가 데이터와 기능을 넣어보기 🛠️

단순히 상수만 표현 할 수 있는 게 아니라

Enum에 추가 데이터를 넣거나 메서드를 정의해서 좀 더 간지?나게 사용하실 수 있습니다.

 

데이터와 메서드 추가하기

public enum Status {
    ACTIVE("활성화 상태 🟢"), 
    INACTIVE("비활성화 상태 🔴"), 
    PENDING("승인 대기 상태 🟡");

    private final String description;

    // 생성자
    Status(String description) {
        this.description = description;
    }

    // Getter 메서드
    public String getDescription() {
        return description;
    }
}

 

활용하기

public class EnumWithDescription {
    public static void main(String[] args) {
        Status status = Status.ACTIVE;

        System.out.println("Status: " + status);
        System.out.println("Description: " + status.getDescription());
    }
}

 

출력결과:

Status: ACTIVE  
Description: 활성화 상태 🟢

 

💡 Tip: 이런 식으로 Enum에 추가 정볼르 넣으면 화면 출력, 로그 기록 등 다영한 곳에서 활용할 수 있어요.


 

3. Enum과 데이터베이스 매핑하기 🗄️

Spring JPA 같은 ORM 프레임워크를 사용하면 Enum 값을 데이터베이스에 저장하거나 불러올 수 있어요.

보통 Enum 값을 문자열(String) 또는 숫자(Integer) 형태로 저장합니다.

 

1) 문자열로 저장하기 (추천)

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Enumerated(EnumType.STRING)  // 문자열로 저장
    private Status status;
}

 

ID STATUS
1 ACTIVE
2 INACTIVE

 

2) 숫자로 저장하기 

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Enumerated(EnumType.ORDINAL)  // 숫자로 저장
    private Status status;
}

 

ID STATUS
1 0
2 1

 

⚠️ 주의: ORDINAL 방식은 Enum 순서가 변경되면 문제가 생길 수 있어요. 웬만하면 STRING을 쓰는 걸 추천합니다!

 

4) 커스텀 매핑: 유연하게 사용하기

가끔 데이터베이스에 Enum을 저장할 때 커스텀 값을 사용해야할 상황이 오곤 합니다.

예를 들어, ACTIVE는 'A', INACTIVE는 'I'로 저장하고 싶다면 아래처럼 구현하면 됩니다.

 

커스텀 컨버터 작성하기

@Converter(autoApply = true)
public class StatusConverter implements AttributeConverter<Status, String> {

    @Override
    public String convertToDatabaseColumn(Status status) {
        switch (status) {
            case ACTIVE: return "A";
            case INACTIVE: return "I";
            case PENDING: return "P";
            default: throw new IllegalArgumentException("Unknown status: " + status);
        }
    }

    @Override
    public Status convertToEntityAttribute(String dbData) {
        switch (dbData) {
            case "A": return Status.ACTIVE;
            case "I": return Status.INACTIVE;
            case "P": return Status.PENDING;
            default: throw new IllegalArgumentException("Unknown dbData: " + dbData);
        }
    }
}

 

엔티티와 연결

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Convert(converter = StatusConverter.class)
    private Status status;
}

 

이상 Enum 매핑에 대한 설명이었습니다.

감사합니다.

 

 

 

728x90
반응형

'Java' 카테고리의 다른 글

[Java] SLF4J Logger(Simple Logging Facade for Java)  (0) 2025.04.04
[Java] 2. Java 핵심 라이브러리  (0) 2023.06.27
[Java] 1. What is Java?  (0) 2023.06.27
java.lang.ClassNotFoundException 오류  (0) 2023.03.09
Eclipse - Tomcat 정보: 프로덕션 환경들에서 최적의 성능을 제공하는, APR 기반 Apache Tomcat Native 라이브러리가, 다음 java.library.path에서 발견되지 않습니다:  (0) 2023.03.07
'Java' 카테고리의 다른 글
  • [Java] SLF4J Logger(Simple Logging Facade for Java)
  • [Java] 2. Java 핵심 라이브러리
  • [Java] 1. What is Java?
  • java.lang.ClassNotFoundException 오류
JongTachi
JongTachi
    반응형
  • JongTachi
    JongTachi의 개발 블로그
    JongTachi
  • 전체
    오늘
    어제
    • 분류 전체보기 (162)
      • Network (10)
      • Server (19)
        • Web (12)
        • WAS (6)
      • Java (8)
        • JVM (1)
        • Java Syntax (16)
        • IDE (5)
        • Lombok (2)
        • Util (1)
      • FrameWork (8)
        • Spring&SpringBoot (4)
        • MyBatis (4)
      • JSP (3)
      • JavaScript (12)
        • jQuery (3)
        • JSON (3)
      • APM (1)
      • Android (5)
      • VCS(Version Control System) (5)
        • Git (4)
        • SVN (1)
      • IT_Tools (15)
        • Jenkins (2)
        • MobaXterm (2)
        • Jeus (1)
        • DBeaver (3)
      • Certificate (1)
      • Linux (3)
      • DB (14)
        • MariaDB (0)
        • Oracle (8)
        • Redis (2)
      • IT Information (19)
      • Text Editor (2)
        • NotePad (2)
      • 비밀의방 (0)
      • 헬파티 여행 (1)
      • 경제 (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    Eclipse
    git
    HTTP
    톰캣
    자바스크립트
    IntelliJ
    Server
    db
    JSON
    보안
    오라클
    JQuery
    이클립스
    Javascript
    DBeaver
    Tomcat
    자바
    마이바티스
    인텔리제이
    Redis
    상태코드
    mybatis
    SQL
    java
    Linux
    디비버
    svn
    oracle
    Web
    WAS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
JongTachi
[Java-Enum] 자바 Enum 매핑: 이해와 활용법
상단으로

티스토리툴바