Trouble Shooting

[Java/Spring Boot] enum(열거형)을 사용한 카테고리 만들기

kwan97 2022. 7. 11. 10:32
프로젝트 진행중 카테고리 기능 구현을 내가 맡게 되었다. string값으로 컬럼을 만들어 클라이언트에게 넘겨주는 간단한 방법이 있지만 부트캠프 마지막 프로젝트인 만큼 퀄리티 높고 나에게 남길 수 있는 방법으로
카테고리 기능을 구현하고 싶어 enum을 사용하게 되었다.

enum 이란?

JDK 1.5버젼 부터 사용할 수 있게 된 enum열거형서로 연관된 상수들의 집합이라고 정의 할 수 있다.

enum을 사용하면 코드의 가독성이 높아지며 키워트 enum을 사용함으로써 구현의 의도가 열거임을 명확하게 나타낼 수 있다.(enum의 존재를 아예 모르는 사람이라면... 쩝...)

 

enum 사용하여 카테고리 기능 만들기

 

카테고리 화면 피그마

내가 구현해야 할 카테고리 기능이 들어가는 페이지다.

계층적 카테고리가 아닌 같은 종류의 목표들을 분류해주는게 주되다 보니 enum이 굳이 필요한가 싶지만 카테고리의 종류를 점차 늘려 갈 수도 있기 때문에 enum을 활용하기로 결정하였다.

 

기존에 내가 만들었던 카테고리 코드를 보여주고 싶지만 정말 별거 없는 단순한 코드였다.

 

@Column(nullable = false)
private String category;

 

String 값으로 컬럼을 만들어 클라이언트의 요청에 String값으로 보내주게끔 작성하였다.

이렇게 하니 이름만 category인 빈껍데기 컬럼에 불과했었다.

그래서 이왕 구현하는거 좀 더 퀄리티 있게 만들어보자 해서 카테고리 만드는 방법을 구글링 해보던 중 enum을 발견하여 사용하게 되었다.

 

우선 아래 사진에서와 같이 enum을 사용할 패키지를 만들어준다.

난 enums -> Category로 만들었다.

 

enum을 활용하여 작성한 카테고리 코드다.

 

import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
public enum Category {

    //enum 구현중
    HEALTH("건강"),
    HABIT("습관"),
    STUDY("공부"),
    HOBBY("취미");

    private String name;

    Category(String name) {
        this.name = name;
    }

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

 

보다시피 enum은 생성자와 메서드를 생성 가능하다.

 

    /*
    class Category{
        public final Day HEALTH = new Category();
        public final Day HABIT = new Category();
        public final Day STUDY = new Category();
        public final Day NAME = new Category();
     */

 

만약 enum을 사용하지 않았더라면 위 코드처럼 카테고리 항목당 초기화를 해줬어야 할 텐데 카테고리 항목이 많거나 종류가 점점 늘어난다면  코드의 가독성이 떨어졌을 것이다.

 

enums 패키지에 있던 Categoty를 Model패키지로 불러와 Colum으로 만들어 주는 방법으로 @Enumerated 어노테이션이 있다.

@Enumerated 어노테이션의 기능
1. enum의 선언된 순서를 Integer 값으로 변환하여 DB 컬럼에 꽂아준다.
2. enum의 선언된 상수의 이름을 String 클래스 타입으로 변환하여 DB에 꽂아준다. 즉, DB 클래스 타입은 String이다. 

 

728x90