Getter, Setter 사용하는 이유
- 객체의 무결성을 보장하기 위해 사용
- 예를 들어, 만양 외부에서 몸무게라는 필드에 직접 접근한다면 0보다 낮은 값을 줄 수도 있다. 이 경우 객체의 무결성이 깨지기 때문에 이를 방지하기 위해 Getter/Setter를 사용하여 데이터의 무결성을 지켜줌
무결성이란 무엇인가?
- 데이터의 정확성과 일관성을 유지하고 보증하는 것
Getter/Setter 사용으로 데이터 무결성이 지켜지는 이유
- Getter, Setter를 이용하여 데이터를 생성 및 접근을 하게 되면 들어오는 값을 바로 저장하는게 아닌, 한 번 검증하고 처리할 수 있도록 할 수 있기 때문에 무결성이 지켜진다.
- Getter: 본 필드의 값을 숨긴 채 내부에서 가공된 값을 꺼낼 수 있다.
- Setter: 필드를 private로 만들어 외부의 접근을 제한한 후, Setter를 사용해 전달받은 값을 내부에서 가공해 필드에 넣어줄 수 있다.
Getter/Setter를 사용할 때의 다른 이점
- Getter/Setter와 같은 엑세스 함수 사용 시, 위와 같은 데이터 무결성과 유효성 검사가 가능
- 객체의 필드를 private과 같은 접근제한자를 두면서 객체지향의 목적인 정보은닉이 가능
Setter 보다는 Builder
- 무분별한 Setter는 무결성을 해칠 수 있다.
- 단순히 setter로 데이터를 수정하면, 어떤 부분을 수정하는지, 어디서 데이터를 수정하는지 알 수 없다.
- Builder 패턴이란
- 복잡한 객체를 생성하는 방법을 정의하는 클래스와 표현하는 방법을 정의하는 클래스를 별도로 분리하여, 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공하는 패턴
결론
-
Getter와 Setter를 사용하는 이유는, 데이터를 보호하기 위함.
데이터를 불러올 때, 한 번 더 가공하는 과정을 거침으로써, 내부 데이터가 결함을 가지지 않도록 하는 것(무결성)
단, 무분별한 Setter는 데이터 무결성을 해칠 수 있다.
-
이를 해결하기 위해, 객체를 생성하는 생성자와, 이를 표현하는 메소드를 분리하여 사용하는 Builder 패턴을 이용해서 데이터를 조금 더 직관적인 코드로 작성할 수 있다.