게터와 세터, 그리고 temporal coupling

게터와 세터



오브젝트 지향(이하 OO)에서는 게터나 세터의 사용은 추천되어 있지 않습니다.
사용시에는 신중함이 요구됩니다.

이것은 tell, don't ask 라는 원칙과 관련이 있습니다.
오브젝트에 대해서 상태를 문의하는 (ask)가 아니고, 처리를 지시하는 (tell) 대로 구현하는 것이, OO다운 설계인 것입니다.

htps : // 마 r 찐후ぉwぇr. 이 m / b ぃき / 텐 l 어떤 sk. HTML

그 중에서도, 세터의 사용은 특히 피하는 편이 좋다고 생각됩니다.
개체의 뮤테이션은 버그의 온상입니다.
또한 값이 설정되어 있는지 검사가 난발되어 코드 기반 유지 보수성이 저하됩니다.

temporal coupling



일반적인 일본어 번역의 존재를 필자는 모릅니다만, 「시계열 의존」이라고 번역할지도 모릅니다.

특정의 순서로 불려 갈 필요가 있는 처리가 있는 경우, 그것을 temporal coupling 라고 합니다.
제대로 캡슐화되었다면 이런 일은 일어나지 않습니다.

이 제약의 존재는 얻어 베테랑 멤버의 머리 속에만 존재하며 팀의 암묵 지식이 됩니다.

세터 사용은 temporal coupling를 낳습니다.
예제는 의사 코드로 표시됩니다.
main() { 
    const user = new User()
    user.setId(10) // repo.save(user) より前に必ず呼び出さないといけないので、これは termporal coupling

    if (user.id) {
        userRepo.save(user)
    }
}

개선 예
main() { 
    // セッターを使わずに、初期化時にセットされることが保証されている
    const user = new User({id: 10})
    userRepo.save(user)
}

요약


  • 겟타와 세터의 남용은 안돼, 절대.
  • 특정의 순서로 호출될 필요가 있는 처리에 대해서, 안티 패턴으로서 temporal coupling 라고 부르는 이름이 붙어 있다.
  • 좋은 웹페이지 즐겨찾기