java_spring (2024.05 ~ 2024.10)
코드 리팩토링(builder pattern)
qordpsem
2024. 9. 30. 16:17
#user 저장하는 코드
User newUser = new User();
newUser.setStatus(UserStatus.ACTIVE);
newUser.setRole(UserRole.NORMAL);
newUser.setName(signUpRequest.getName());
newUser.setEmail(signUpRequest.getEmail());
newUser.setPassword(passwordEncoder.encode(signUpRequest.getPassword()));
newUser.setPhone(signUpRequest.getPhone());
newUser.setAddress(signUpRequest.getAddress());
newUser.setBirth(signUpRequest.getBirth());
#builder pattern 으로 수정한 코드
User entity에 @Builder 어노테이션 추가 후 아래와 같이 수정함
User newUser = User.builder()
.status(UserStatus.ACTIVE)
.role(UserRole.NORMAL)
.name(signUpRequest.getName())
.email(signUpRequest.getEmail())
.password(passwordEncoder.encode(signUpRequest.getPassword()))
.phone(signUpRequest.getPhone())
.address(signUpRequest.getAddress())
.birth(signUpRequest.getBirth())
.build();
setXXX 하는것보다 이게 더 깔끔한 것 같다
#builder pattern
필요한 데이터만 설정 가능, 유연성 확보 가능, 가독성 up, 변경가능성 최소화
객체 생성 시 특정 파라미터가 필요 없으면 새로 생성자 만들어줘야하지만, builder 사용 시 동적으로 처리 가능함
builder 사용 시 새로운 변수 추가되어도 기존 코드 영향주지 않음 등의 장점이 있다고 함
지금도 이미 entity 안에다가 새로 생성자를 만들어준건 아니라서 와닿는 장점은 아니지만 납득은 했다,,
#entity 안에? serice 안에?
나는 service 코드를 작성하다가 바꾸게 된건데 좀 더 찾아보니 대부분 entity에 builder 사용하는 것 같았다
이 부분은 추후 좀더 알아보기로하고,, 일단 다시 코드작성으로,,,