enum 사용하기

junhyeong·2022년 12월 20일
0

오늘은 리뷰 작성기능을 만들기 전 order에 배송상태를 넣는 작업을 했다. (배송이 완료된 상태에서 리뷰 작성이 가능하도록 하기 위해서이다)

일단 작업은 배송 상태를 값객체를 만드는 것부터 시작했다.
값객체로 만들어서 상태들을 상수로 넣고 상태변경 메소드를 관리해주면 좋을것 같았기 때문이다.

과연 vo(값객체)여야만 하는가?

작업을 하면서 중간에 이게 값객체로 하는게 맞는건가, 그리고 이런 상태들을 vo에서 관리하는게 맞는건가 등 궁금증이 생겼다.

그래서 일단 적어두고 작업을 하던 중, 노아님이 내려오셔서 그 부분에 대해 질문을 드렸다.

그 결과 굳이 값객체로 바꿀 이유가 없다는 답변을 받았다.

상수는 enum 같은거로 따로 뺄 수 있고, 값하나를 value로 꺼내쓰는 용도면 굳이 값객체를 쓸 이유가 없다는 것이다

아직 vo에 대해 완벽하게 이해하진 못했지만 상수나 상태 변경은 노아님 말씀대로 order 객체 안에서도 충분히 가능한 일이라서 바로 바꾸기 시작했다.

enum?

일단 enum에 대해 알아봤는데 생각보다 활용법이 많아서 기본적인 부분만 공부했다.

Enum이란 Enumeration의 앞 글자로 열거라는 의미를 갖는다. 즉, 관련이 있는 상수들의 집합이다.

간단하게 enum의 유용성을 설명하자면 이런 코드들을

이렇게 바꿀 수 있다.

한눈에 보기에도 위의 코드 보다는 아래코드가 더 가독성이 좋은 걸 볼 수 있다. (아직 많지 않아서 잘모를 수도 있지만 상수가 많아질수록 가독성의 차이가 클것이다)

사용법

단순 열거

앞에서는 요소들이 특정 값(여기서는 한글 값)을 가져야해서 값을 넣어줬지만 이렇게 단순 열거도 가능하다

public enum status {
    SHIPPED, IN_TRANSIT, DELIVERED
}

생성자와 final 필드 추가

만약 앞에서 말한대로 enum요소에 특정값을 매핑하고 싶다면 이렇게 필드값을 추가해도 된다. (앞에서 값 1개로 예시를 들었기에 임의로 필드값 1개를 더 추가했다)

 public enum  status {
    	SHIPPED(1, "배송 준비중"),
    	IN_TRANSIT(2, "배송중"),
    	DELIVERED(3, "배송완료);
    
    	private final int number;
    	private final String value;
    
    	status(int number, String value) {  
        // Default 생성자는 private 으로 설정되어 있음. -> Enum 클래스는 생성자가 있다고 하더라도 new 연산으로 생성할 수 없다
    		this.number = number;
    		this.value = value;
    	}

이렇게 규칙이 존재하는 특정 요소들을 하나의 Enum 클래스로 묶어두면 가독성도 좋아지고 if 문으로 일일히 검사할 필요도 없어서 편리하다.

정리

  • enum을 사용하면 코드가 단순해지며 가독성이 좋아진다.
  • 데이터의 그룹화 및 관리가 쉽다

Action
일단 간단한 사용방법에 대해 알아봤다. 하지만 아직 정리하지 않은 내용도 많고 어떠한 상황에서 enum이 적합한지에 대해서는 판단이 어렵다는 생각이든다. 내일 더 자세히 공부해보자

profile
매일매일이 성장하는 하루가 될 수 있도록!

0개의 댓글

관련 채용 정보