본문 바로가기
  • log.info(" Nice Developer ");
Trouble Shooting

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

by kwan97 2022. 7. 11.
프로젝트 진행중 카테고리 기능 구현을 내가 맡게 되었다. 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

댓글