-
Setter 사용을 지양해야 하는 이유Spring 2023. 1. 19. 16:42
Setter 사용을 지양해야 한다. 이유는 여러가지가 있지만, 가장 큰 두 가지 이유는
1. Setter를 사용하면 값을 변경한 의도를 파악하기 어렵다.
public Member updateMember(long id) { final Member member = findById(id); member.setFistName("value"); member.setLastName("value"); return member; }
단순히 이렇게 setter로 값을 변경했을 때, 시간이 지나고 다시 위 코드를 봤을 때는 값을 왜 변경하게 되었는지 알기위해 코드를 역추적해서 찾아가야 한다.
2. 객체의 일관성을 유지하기 어렵다.
회원의 이름을 변경하는 메서드를 만들었다고 가정했을 때 무작정 setter로 값을 변경하게 되면, 회원의 이름을 다른 곳에서 변경할 수 있게 되어 문제가 발생한다.
Setter의 대안
- setter를 열어두지 않고 의미있는 메서드를 만들어 사용해야한다.
- setName, setAge 등은 필드의 상태를 목적없이 set하는 것이다.
- 이것을 updateUserInfo(String name, int age) 와 같이 메소드로 변경해야 한다.
- 도메인 모델 패턴에서는 이런 메서드를 도메인에 구현하여 응집도 있게 개발한다.
- 서비스에서는 이런 도메인의 비즈니스 메서드를 조립하고 트랜잭션 단위로 잘 묶는 것이 포인트이다.
Setter를 사용하지 않는 코드
@Transactional public PostResponseDto update(PostRequestDto requestDto) { Post post = postRepository.findById(requestDto.getId()) .orElseThrow(() -> new IllegalArgumentException("해당 게시글이 없습니다. id = " + requestDto.getId())); return post.update(requestDto.getTitle(), requestDto.getContent()); }
'Spring' 카테고리의 다른 글
Spring의 @EventListener (0) 2023.01.30 Entity와 DTO 분리하기 (0) 2023.01.25 PasswordEncoder, BcryptPasswordEncoder (0) 2023.01.19 Spring Security : Web Ignore (0) 2023.01.19 @EqualsAndHashCode, equals, hashCode (0) 2023.01.18