ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.