11.7 세터 제거하기
리팩터링 전
리팩터링 후
🧷 배경
객체 생성 후에는 수정되지 않길 원하는 필드라면 세터를 제공하지 않을 것이다. 필드는 오직 생성자에서만 설정되며, 수정하지 않겠다는 의도가 명명백백해지고, 변경될 가능성이 봉쇄된다.
세터 제거하기 리팩터링이 필요한 상황은 두가지이다.
무조건 접근자 메서드를 통해서만 필드를 다루려 할 때 → 생성자에서만 호출하는 세터가 생겨나곤 한다. 세터를 제거해서 객체가 생성된 후에 값이 바뀌면 안 된다는 뜻을 분명히 하자.
클라이언트에서 생성 스크립트를 사용해 객체를 생성할 때
생성 스크립트란? 생성자를 호출한 후 일련의 세터를 호출하여 객체를 완성하는 형태의 코드를 말한다. → 설계자는 스크립트가 완료된 뒤로는 그 객체의 필드 일부는 변경되지 않는다고 생각하므로 세터들을 제거하여 의도를 정확하게 전달하는게 좋다.
🧷 절차
설정해야 할 값을 생성자에서 받지 않는다면 그 값을 받을 매개변수를 생성자에 추가한다.. 그런 다음 생성자 안에서 적절한 세터를 호출한다.
생성자 밖에서 세터를 호출하는 곳을 찾아 제거하고, 대신 새로운 생성자를 사용하도록 한다.
세터 메서드를 인라인한다.. 가능하다면 해당 필드를 불변으로 만든다.
🧷 예시
🧷 리팩터링 전
🧷 리팩터링 후
Last updated