여기에서 사용된 코드는 실제 토이프로젝트에 사용한 코드이며, 어떻게 활용하였는지 나타내기 위해 작성했습니다.
들어가며
Enum을 통해 얻는 기본적인 장점?
- 문자열과 비교해, IDE의 적극적인 지원을 받을 수 있습니다.
- 자동완성, 오타검증, 텍스트 리팩토링 등등
- 허용 가능한 값들을 제한할 수 있습니다.
- 리팩토링시 변경 범위가 최소화 됩니다.
- 내용의 추가가 필요하더라도, Enum 코드외에 수정할 필요가 없습니다.
이외에도 데이터들 간의 연관관계 표현, 상태와 행위를 한 곳에서 관리, 데이터 그룹 관리, 관리 주체를 DB에서 객체로 등 활용할 수 있는 부분이 정말 많았습니다.
제가 이 때 진행한 프로젝트는 정말 간단한 프로젝트이며
당근마켓처럼 물품이 등록되어있으며 그 물품을 Buyer가 구매 요청을 하는 시스템입니다.
작성된 글처럼 엄청난 효과를 누리진 못했더라도 규모가 큰 프로젝트가 아니였음에도
Enum을 최대한 사용해 오타검증, 값 제한, 리팩토리 변경 범위 최소화를 좋은 방향으로 충분히 이끌어낼 수 있었습니다.
요구사항 및 테이블 구조
- 구매 제안이 등록될 때, 제안의 상태는 `제안` 상태가 된다.
- 대상 물품의 주인은 구매 제안을 `수락`할 수 있다.
- 대상 물품의 주인은 구매 제안을 `거절`할 수 있다.
- 구매 제안을 등록한 사용자는, 자신이 등록한 제안이 수락 상태일 경우, 구매 `확정`을 할 수 있다.
제안, 수락, 거절, 확정 총 4가지의 상태를 갖고있을 수 있습니다.
Enum을 적용하기 전 코드
Negotiation Entity 값
Negotiation Service 값
물품 주인이 "수락"으로 바꾼 상태인지 확인하는 메서드
"수락"으로 되어있는 물품을 Buyer가 확정으로 바꾸는 메서드
물품 주인이 "입력한 값"으로 상태를 바꾸는 메서드
이러한 식으로 하드 코딩이 되어있습니다.
이렇게 작성하면 어떤 문제가 발생할 수 있을까?
1. status 상태를 내가 원하는 값으로 막 변경할 수 있습니다.
거절도 아닌, 수락도 아닌 상태가 나타날 수 있습니다. -> 지정된 값을 벗어납니다.
2. 내용이 추가될 때, 하나 하나 "수락", "거절"등 반복되는 코드를 작성할 때 오타가 발생할 수 있습니다.
오타 발생으로 인하여 서비스의 큰 장애가 올 수 있습니다.
3. 리팩토링 진행 시 모든 값들을 찾아서 하나 하나 다 변경해줘야 합니다.
Enum으로 작성이 되어있었으면 Enum의 값만 수정해주면 쉽게 해결할 수 있는 문제입니다.
지금까지 Enum을 적용하기 전 단점을 살펴봤습니다.
이제 Enum을 적용하는 과정을 보여드리겠습니다.
Enum을 적용한 코드
Enum) NegotiationStatus
NegotiationEntity
NegotiationService
- Enum 클래스 안에 있는 메서드를 적극 활용 가능합니다.
- 이 메서드 하나로 제대로 된 값을 받은 상태인지 알 수 있습니다.
- 오타로 인한 실패가 없어집니다.
- 내용 추가가 필요해도 Enum클래스만 수정하면 해결됩니다!
Enum을 활용하는 방법
작성한 Enum 클래스를 다시 한 번 보겠습니다.
기본 Enum
이러한 값을 어떻게 쓸 수 있을까요?
순서대로 출력된 값입니다.
이제 저희는 DB에는 SUGGEST, CONFIRM, ACCEPT등 영어로 담고
필요한 값은 .getStatus() 메서드를 활용해 한글을 출력할 것입니다.
Enum안에 정의한 메서드
String 값을 넣었을 때 값이 존재한다면
return NegotiationStatus를 해주는 것을 확인할 수 있습니다.
지금까지 Enum을 어떻게 학습했고
어떻게 적용하고 어떻게 활용했는지 알아봤습니다.
부족함이 많지만 새로운 내용을 학습한다면 추가할 수 있도록 하겠습니다.
출처:
https://techblog.woowahan.com/2527/
'Java' 카테고리의 다른 글
빌더 패턴(Builder pattern)을 써야하는 이유, @Builder (0) | 2023.02.07 |
---|---|
StringTokenizer 사용법 (0) | 2022.06.30 |
JAVA - 배열, 배열이란? (0) | 2022.06.13 |
과제 가위 바위 보 게임 다양한 방법 (switch문 , 나머지 값 활용) (0) | 2022.06.13 |
가위바위보 게임( do-while로 만들기) (0) | 2022.06.12 |