어떤 값을 리턴하는 함수는 사이드 이팩트가 없어야 한다. (내부 값을 변경하지 않아야 하고, 다른 행동을 수행하면 안된다.)
Setter 제거하기
Setter를 제공하는 것은 내부 상태가 변경될 수 있다는 것을 의미한다. 객체 생성시 처음 설정된 값이 변경될 필요가 없다면 해당 값을 설정할 수 있는 생성자를 만들고 Setter를 제거해서 변경될 수 있는 가능성을 제거하기.
//AsIspublicclassPerson {privateint id;privateString name;Person(int id,String name){this.id= id,this.name= name;}publicStringgetName(){returnthis.name;}publicintgetId(){returnthis.id;}publicvoidsetName(String name){this.name= name;}publicvoidsetId(int id){this.id= id;}}//ToBe//만일, id는 변경되지 않는 값이라고 하면 setter는 없애기publicclassPerson {privateint id;privateString name;Person(int id,String name){this.id= id,this.name= name;}publicStringgetName(){returnthis.name;}publicintgetId(){returnthis.id;} public void changeName(String name){this.name = name;} //setter도 단순히 set~ 으로 명명하는 것보다는 보다 이해하기 쉬운 명시적인 이름으로 작명해주는 것이 바랍직하다.
}
파생 변수를 질의 함수로 바꾸기
계산해서 알아낼 수 있는 변수는 제거
계산 자체가 데이터의 의미를 잘 표현하는 경우가 존재
해당 변수가 어디선가 잘못된 값으로 수정될 수 있는 가능성을 제거할 수 있다.
계산에 필요한 데이터가 변하지 않는 값이라면, 계산의 결과에 해당하는 데이터 역시 불변 데이터이기 때문에 변수를 유지할 수 는 있다.