JPA

JPA에서 Enum 타입 사용하기

F12:) 2023. 8. 4. 21:55

 

오늘은 JPA 실습을 하던 중, Enum 타입을 사용한 것에 대해서 배운 내용을 토대로 정리해보겠습니다!

 

 


1. Enum이란?

간단하게 Enum에 대해서 짚고 넘어가겠습니다. Enum은 열거형이라고도 불리며, Enum 내에 선언된 값은 선언된 순서대로 순서를 갖습니다.

 

아래와 같이 사용할 수 있습니다.

public enum OrderStatus {
    ORDER, CANCEL
}

이렇게 되면, ORDER는 0에 매핑되고, CANCEL은 1에 매핑됩니다. 따라서 순서 또한 갖습니다.

 

 

추가적으로, 코드에서 봤다시피 Enum은 보통 대문자로 표기해줍니다. 관례니 따라줍시다.

 


2. JPA에서 Enum을 사용하는 이유

그렇다면 우리는 JPA에서 Enum을 왜 사용할까요??

 

우리는 아래와 같은 표를 보면 바로 알 수 있습니다.

적절한 예시는 아닐 수 있지만, 우리는 여기서 주문 테이블에 집중해봅시다.

 

주문 테이블에 있는 item 2는 무엇을 나타내나요?? 바로 monitor입니다.

만약 우리가 아래와 같은 Enum타입의 item을 선언했다면 가능할 것입니다.

public enum Item{
	MOUSE, KEYBOARD, MONITOR
}

이렇게 되면 mouse는 0에, Keyboard는 1에, monitor는 2에 매핑되어 DB에 저장되게 될 것입니다.


3, JPA에서 Enum 사용하는 방법

간단합니다!!

 

Enum을 선언하고, 우리가 Entity에 Enum으로 구현된 필드의 위에 아래와 같은 어노테이션만 붙여주면 됩니다.

 @Enumerated(EnumType.STRING)

사실 이 어노테이션의 파라미터로는 EnumType.ORDINAL과 EnumType.STRING이 있습니다.

default는 ORDINAL이고 우리는 STRING을 쓰는 것이 권장됩니다!!

 

왜 그럴까요??

 

ORDINAL은 말그대로 순서를 토대로 수를 부여합니다. 우리가 기존에, 사용했던 Enum 타입으로 예를 들어봅시다.

 

현재 우리는 MOUSE, KEYBOARD, MONITOR로 DB에 기록이 되고 있다고 한다면, 0과 1과 2로 DB의 item 값은 기록될 것입니다.

그런데 우리가 만약 MOUSE, KEYBOARD, SPEAKER, MONITOR와 같은 순서로 Enum 타입을 바꾸게 되면 어떻게 될까요?? DB에는 0부터 2까지의 숫자로 이루어져 있으므로, 기존에 MONITOR였던 DB의 값들(엔티티라고도 하죠)이 모두 SPEAKER로 바뀌게 되는 현상을 보일 수 있습니다.

 

따라서 우리는 STRING을 사용합니다. STRING은 말그대로, Enum에 명시된 STRING을 토대로 DB에 값을 부여하므로, 만약 우리가 중간에 값을 바꾼다고 하면 DB에도 바뀌게 됩니다!!

 

따라서 우리는 Enum 타입을 사용할 때, 특이한 케이스가 아니라면 STRING으로 사용하는 것이 좋다고 판단됩니다.


오늘은 JPA에서 Enum을 사용하는 법에 대해 알아봤습니다!!

사실 알고보면 간단한데, 너무 설명이 길었나 싶네요...ㅎ...

 

아마 다음은 임베디드 타입에 대해서 다룰 것 같네요!! 그 때는 더 간단하고 잘 눈에 들어오게 써보길..!