일단, 참고URL을 먼저 명시하고 시작하려고 한다
https://techblog.woowahan.com/2527/
1. 허용 가능한 값을 제한할 수 있음
2. 리팩토링 변경 범위가 최소화됨
쿠팡이츠, 배달의 민족, 요기요와 같은 배달애플리케이션을 이용하여 음식을 주문하는 과정을 상상해보자
클라이언트와 서버가 약속한 JSON 형식의 DTO가 다음과 같이 생겼다고 가정하자
주문 요청후, 주문에 성공하여 주문이 완료된 상태를 나타내는 Response를 아래와 같이 리턴한다고 가정하자
public class ResponseDto {
private String status;
private String orderId;
private String createdAt;
}
String으로 표시된 status는 ORDERED, Ordered, order 중 어떠한 값인지 예상할 수 없다
아래와 같이 바꾼다면,
1) Status에는 ORDERED, PREPARED, PICKUP, DELIVERED 가 있고
2) ORDERED, Ordered, order 중 ORDERED로 쓰이겠구나 예측할 수 있다
public class RequestDto {
private Status status;
private String orderId;
private String createdAt;
}
enum Status {
ORDERED,
PREPARED,
PICKUP,
DELIVERED
}
public class DeliveryService {
public ResponseDto getNextStep(Status current, String orderId){
Status next = current.getNextStep();
// 장점1) current 안에서 enum 이 정의된 순서 다음을 가져오도록 순회할 수 있다
return ResponeDto.builder()
.status(next)
.orderId(orderId)
.build();
}
}
ORDERED로 사용했었지만, ORDER로 바꾸고 싶다고 가정하자
if( ??? == "ORDERED"){
// 아래와 같이 여러 곳에 String으로 박혀있다면...
// 1) 하나하나 찾아 고쳐야 한다
// 2) 나중엔 Ordered, Order인지 뭔지 헷갈린다
}
enum은 한 곳만 바꾸면 된다 (IDE가 도와줌)
내가 나중에 봤을 때 이해하기 좋은 코드를 작성하자
[Java] Java 메모리 구조, Reflection, (0) | 2024.01.06 |
---|---|
[Java] Exception, try-catch-finally, try-with-resources (0) | 2023.12.24 |
2. 생성자에 매개변수가 많다면 빌더를 고려해라 (0) | 2023.10.17 |
댓글 영역