자바에서는 private, public, protected, public과 같은 접근 제한자가 존재한다.
이를 통해 데이터를 외부로부터 숨기거나, 접근을 막고, 또는 접근에 처리를 강제화한다.
여기서 getter와 setter는 클래스 변수를 private으로 하고, 다른 메소드를 통해 제어하는 역할을 맡는다. private이 되면 해당 변수는 클래스 안에서만 노출되게 된다.
getter
getter는 다른 사람들로 하여금 사용할 필요가 있는 변수값을 가져올 수 있게 해주는 함수라고 보면 된다.
클래스 안에 private 변수 age, name이 있으면 바깥에서는 getAge(), getName()이라는 getter함수를 통해 private 변수임에도 값을 가져올 수 있게 도와주는 역할을 한다.
이렇게 변수들의 외부 노출을 제한하고, 노출 범위를 정해주는 것이 getter고, 그러한 속성이 은닉성이다.
setter
setter는 다른 사람들로 하여금 해당 변수의 값을 설정할 수 있게 해주는 함수이다.
클래스 안에 private 변수 age, name이 있으면 바깥에서는 setAge(14), setName('홍길동')이라는 setter함수를 통해 객체의 private 데이터의 값을 설정할 수 있게 도와주는 역할을 한다. 그리고 setAge(-1)같이 원치않는 데이터 값이 들어왔을 때의 예외처리를 할 수도 있다.
이를 통해 제한 없이 가능한 것을 접근 제한자로 막고, 접근 범위에 한해서 함수로 대입전 값을 필터링 후 들어가게 하기 위해 사용된다.
getter와 setter를 사용하는 이유는, 데이터를 보호하기 위함이다.
데이터를 불러올 때, 한번 더 가공하는 과정을 거침으로써, 내부 데이터가 결함을 가지지 않도록 하는 것이다.(무결성)
단, 무분별한 setter는 데이터 무결성을 헤칠 수 있다.(그래서 getter는 몰라도 setter 사용은 지양하는게 좋다고 한다)
이를 해결하기위해, 객체를 생성하는 생성자와, 이를 표현하는 메소드를 분리하여 사용하는 Builder 패턴을 이용해서 데이터 조금 더 직관적인 코드를 작성할 수 있다고 한다.