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 사용하는 것 같았다

이 부분은 추후 좀더 알아보기로하고,, 일단 다시 코드작성으로,,,