일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- DBeaver
- Tomcat
- 인텔리제이
- IntelliJ
- Linux
- svn
- SQL
- HTTP
- git
- 오라클
- 자바
- Server
- java
- Javascript
- 상태코드
- 마이바티스
- JSON
- db
- 보안
- 톰캣
- WAS
- JQuery
- Redis
- 모바텀
- Eclipse
- 디비버
- 이클립스
- mybatis
- oracle
- 자바스크립트
- Today
- Total
JongTachi의 개발 블로그
[Java-Enum] 자바 Enum 매핑: 이해와 활용법 본문
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 매핑에 대한 설명이었습니다.
감사합니다.
'Java' 카테고리의 다른 글
[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 |
연산자(Operator) (0) | 2022.12.26 |