본문 바로가기
개발

Enum 생성

by 공덕뉸나 2023. 8. 23.

도메인을 설계할 때 Enum을 사용하고자 하는 필드들이 몇 있었다.

Rest API를 만들 때 enum을 사용하여 값을 받을 때 @JsonCreator와 @JsonValue를 사용하여 직렬화와 역직렬화를 하였다.

직렬화란 객체를 전송 가능한 형태로 바꿔주는 것을 의미하고 역직렬화는 그 데이터들을 다시 자바 객체로 변화해주는 것으로 알면 된다.

 

우선 작성한 코드를 살펴보자.

@Getter
@RequiredArgsConstructor
public enum BoardCategory implements IdEnum {
    PET("PET", "반려동물"),
    FOOD("FOOD", "음식"),
    TRAVEL("TRAVEL", "여행");

    private final String id;
    private final String desc;

    @JsonValue
    public String getValue() {
        return this.name();
    }

    @JsonCreator
    public static BoardCategory of(String name) {
        for (BoardCategory obj : BoardCategory.values()) {
            if (obj.name().equalsIgnoreCase(name)) {
                return obj;
            }
        }
        return null;
    }
}

 

@JsonValue

enum에서 getValue 메서드에 @JsonValue를 넣어주어 이름을 통해 직렬화하게 한다.

getValue() 메서드에서 return 하는 값이 이 enum의 실제 표현이라는 것이다.

 

@JsonCreator

Json body를 받을 때 Json to Object 과정에서 역직렬화는 Jackson 라이브러리에서 실행된다.

위의 코드처럼 사용하게 되면 API 요청을 받아올 때 BoardCategory 값으로 받은 String은 @JsonCreator를 지정한 메서드의 파라미터로 들어가게 되고 해당 메서드 기능을 통해 Request DTO에 저장되게 된다.

 

이렇게 Enum을 생성했으면 Enum을 사용하는 필드에 @Enumerated 라는 어노테이션을 붙여줘야 한다.

@Column(columnDefinition = "varchar(50) COMMENT '카테고리'")
@Enumerated(EnumType.STRING)
private BoardCategory boardCategory;

 

Enum의 값을 Index가 아닌 텍스트 값 그대로 저장하고 싶을 때 위의 어노테이션을 붙여주면 DB에 Enum의 값 자체가 텍스트 그대로 저장이 된다.

 

전에 실무하면서 @Enumerated 어노테이션을 빼먹고 자꾸 데이터가 제대로 안넣어져서 헤맸던 기억이 있다,,

앞으로는 잘 기억해야지.. 망망!

 

 

'개발' 카테고리의 다른 글

JWT 활용한 로그인 구현 - 2  (0) 2023.08.31
JWT 활용한 로그인 구현 - 1  (0) 2023.08.30
BaseEntity 생성하기  (0) 2023.08.19
엔티티 생성  (0) 2023.08.18
도메인 설계  (0) 2023.08.17