• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

setter에 대해서 궁금점이 있습니다.

22.08.25 23:46 작성 조회수 188

2

안녕하세요!

강의를 잘 듣고 있는 신입 개발자입니다 ㅎㅎㅎ..

setter 사용에 대해서, 궁금한 점이 있습니다.

우선, 저는 setter 사용이 왜 안좋은지에 대해서 명확한 답을 얻지 못했습니다. 심지어 Java로 개발된 여러 프레임워크나 라이브러리 등에서 많은 setAttribute와 같은 메서드가 사용되는 것을 보았기 때문입니다. 심지어 Spring 역시도요.

여러 블로그에 해당 주제에 대해 찾아보면 다음과 같은 이유가 나옵니다.

  1. 변경된 의도를 파악하기 어렵다.

  2. 객체의 일관성을 유지하기 어렵다.

어떤 class의 프로퍼티를 변경하려면 결국은 해당 클래스의 특정 메서드를 통해 변경을 해야합니다. 일반적으로 class의 변수는 private하게 선언되기 때문에요,

즉 setAttribute를 쓰지않는다면,

updateAttribute와 같은 별도의 메서드를 생성해서 변경해야 합니다.

1. 변경된 의도를 파악하기 어렵다 의 이유라면, updateAttribute와 같은 메서드와 setAttribute와 같은 메서드의 readability의 차이가 있다는 말로 귀결되는데, 사실 저희가 setter에 대한 거부반응을 모두 지우고 두 메서드를 바라본다면 저는 차이를 느끼기 어렵습니다. 혹시 아닌가요...?

2. 객체의 일관성을 유지하기 어렵다. 의 이유라면, 객체를 Immutable하게 유지하기 위함인데, 때에 따라서는 이러한 전략이 필요하지만 그렇지 않다면, 객체 값(프로퍼티)의 변경이 발생할 때 마다 새로운 인스턴스를 생성해야 한다는 말이 됩니다. 이거는... 많이 변경되어야 하는 객체라면 메모리 문제가 너무 커지지 않을까요?

개인적으로 Builder와 생성자에 관한 것은 해당 문제와 연관성이 별로 없다고 생각하기 때문에, 위 두가지 이유가 결국 근거라고 생각해요.

강사님 역시 setter에 대해 사용하지 않는 것을 권고한다고 말씀하셔서, 혹시 어떤 명확한 이유인지 궁금해서 여쭤보고 싶습니다.

답변 1

답변을 작성해보세요.

2

안녕하세요, chanho0912님!! 크으~~ 정말 좋은 질문이십니다 ㅎㅎㅎ

사실은 이 주제가 답변드리기 굉장히 길기도 하고, 코드와 함께 보여드려야 하다보니 영상으로 답변을 준비해보았습니다!!

영상을 요약드리면 이렇습니다.

  1. setter는 도메인 지식을 충분히 표현하지 못한다.

  2. setter는 응집성을 떨어트린다.

  3. setter는 신규 요구사항을 구현하거나 코드를 추적할 때에 불리하다.

  4. (다른 이야기) 기술적인 요구사항은 비교적 명확한 반면, Business를 표현하는 도메인은 필드의 이름도 바뀌고~ 필드가 바뀌는 이유도 바뀌고, 함께 변경되어야 하는 조건도 계속해서 바뀝니다.

  5. (다른 이야기) 보통 불변 객체 관련해서는 메모리보다는 성능 (CPU) 문제가 잦다고 알고 있습니다! - (제가 잘 모르고 있을 수도 있어요) - 이런 성능 문제를 해결하기 위해서는 메모리에 자주 사용되는 불변 객체를 미리 만들어 두기도 합니다!

>> 유튜브 영상 <<

보다 자세한 이야기는 위의 영상을 참고해주시면 좋을 것 같습니다~!

혹시라도 아직 해소되지 않으신 궁금증이 있으시다면 편하게 남겨주세요!!!

감사합니다 ㅎㅎㅎㅎ

chanho0912님의 프로필

chanho0912

질문자

2022.08.29

영상까지 직접 찍어주시고... 감사드립니다.

  1. setter는 도메인 지식을 충분히 표현하지 못한다.

  2. setter는 응집성을 떨어트린다.

  3. (다른 이야기) 기술적인 요구사항은 비교적 명확한 반면, Business를 표현하는 도메인은 필드의 이름도 바뀌고~ 필드가 바뀌는 이유도 바뀌고, 함께 변경되어야 하는 조건도 계속해서 바뀝니다.

이 부분에 대해서 제가 미처 고민하지 못한 부분을 찝어주셨네요, 사실 말씀하신 것 처럼 정답이 없는 부분인 것 같긴 하지만, 강사님 의견이 충분히 타당하다고 생각합니다. 남은 강의 열심히 수강하겠습니다. 감사합니다 ㅎㅎㅎ

아이고~~ 다행입니다 ㅎㅎㅎㅎ 넵넵!! 남은 부분도 보시다가 질문 있으시면 편하게 남겨주세요~!!! 감사합니다!!! 😊