리팩토링 20. 세터 제거하기
- etc/리팩토링
- 2023. 5. 1.
들어가기 전
이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다.
리팩토링 20. 세터 제거하기 (Remove Setting Method)
- Setter를 제공한다는 것은 해당 필드가 변경될 수 있다는 것을 뜻한다.
- 객체 생성 시, 처음 설정된 값이 변경될 필요가 없다면 해당 값을 설정할 수 있는 생성자를 만들고 세터를 제거해서 변경될 수 있는 가능성을 제거해야 한다.
Getter는 조회만 하기 때문에 사이드 이펙트를 거의 만들지 않는다. 하지만 Setter는 객체의 값을 변경하기 때문에 사이드 이펙트를 만들 가능성이 더욱 크다. 따라서 세터를 제거해서 변경될 수 있는 가능성을 제거해야 한다.
Before
아래 코드에서는 다음 요구사항이 존재한다고 가정해보자.
- Id는 처음 설정되면 변경되지 않음.
- name은 Setter를 통해 변경될 수 있음.
그런데 이 경우, id에 대해서는 setter()가 열려져 있다. 그런데 요구 사항에서는 한번 값이 셋팅된 이후에는 변경될 일이 없기 때문에 setter()를 사용할 일이 없다. 따라서 setter()를 제거해서 의도치 않은 변경사항을 제거하도록 한다.
public class Person {
private String name;
private int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
// Setter가 열려있음. (요구사항과 관련없음) → 제거 필요함.
public void setId(int id) {
this.id = id;
}
}
After
요구 사항을 만족하기 위해서 사용되지 않는 Setter는 삭제했다.
public class Person {
private String name;
private int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
// Setter 제거됨.
}
'etc > 리팩토링' 카테고리의 다른 글
리팩토링 22. 여러 함수를 변환 함수로 묶기 (0) | 2023.05.02 |
---|---|
리팩토링 21. 파생 변수를 질의 함수로 바꾸기 (0) | 2023.05.02 |
리팩토링 19. 질의 함수와 변경 함수 분리하기 (0) | 2023.05.01 |
리팩토링 18. 변수 쪼개기 (0) | 2023.05.01 |
리팩토링 16. 여러 함수를 클래스로 묶기 (0) | 2023.04.30 |