[Java/Spring Boot] enum(열거형)을 사용한 카테고리 만들기
프로젝트 진행중 카테고리 기능 구현을 내가 맡게 되었다. 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이다.