getter와 setter
private 멤버 변수의 문제점
* 멤버 변수를 private로 하면 외부에서 정보를 보거나 변경하지 못한다.
문제는 정보 보기와 변경을 둘 다 못한다는 것이다.
* 정보는 보여주지만 변경은 하지 못하게 하고 싶다.
이런 제어는 접근제어자로만은 불가능하다.
* 따라서 private 멤버 변수는 그대로 두고
get과 set를 담당하는 메서드를 만들어 원하는 제어가 가능하도록 한다.
* 이런 함수를 getter함수, setter함수라고 한다.
언제 사용함
* 멤버변수의 정보 보기와 변경의 접근제어자를 다르게 하고 싶을 때
* 멤버 변수를 바꿀 때 조건을 추가하고 싶을 때
* 사용자가 원하는 데이터가 직접 저장되어있는 게 아닌
계산을 해야만 하는 상황일 때
getter / setter의 기본 형태
* 이름은 보통 get or set + (원하는 데이터명)으로 짓는다.
getName, setAge, getSex, setDate 등등
//getter
public <멤버 변수 자료형> getXXX(){
return <멤버 변수명>;
}
//setter
public void setXXX( <멤버변수 자료형> <변수명> ){
this.멤버변수 = 매개변수;
}
데이터가 없지만 반환해주는 getter
* 객체 안에는 km의 정보만을 가지고 있지만
사용자는 private 멤버 변수에 무엇이 있는지 모르고, 알고 싶지도 않다.
* 사용자는 getMi()이라는 메서드의 존재만을 알고 사용한다.
* 실제로 Mi을 저장한 변수는 없어서, 중독되는 데이터가 없다.
// km를 저장한 변수만이 있다.
private int km;
public int getKm(){
return km;
}
// km를 사용해 mi을 계산하고 바로 리턴
public int getMi(){
return (km / 1.609);
}
어떻게 사용할까
* 멤버 변수는 필요한 게 아니면 private로 만들자.
일단 private로 만들고, 필요할 때 변경하자.
* public setter가 객체를 망가트릴 위험이 있으면 안 된다.
setter는 미리 만들어 놓지 말고, 필요하면 그때 만들자.
* public getter는 비교적 자유롭게 추가해도 된다.
마무리
* 자바에서 getter / setter는 단순한 함수이다.
프로그래머끼리 필요에 따라 기준을 만들어, 이름 붙인 것일 뿐.
* C#은 언어 자체에서 이런 getter / setter를 지원한다.
귀여운 그림은 쭐어님이 그리셨습니다.
'자바 JAVA' 카테고리의 다른 글
[JAVA]자바 - 내포 클래스 Nested Class (0) | 2021.07.17 |
---|---|
[JAVA]자바 - 싱글톤 패턴 Singletone Pattern (0) | 2021.07.15 |
[JAVA]자바 - 생성자 Constructor (0) | 2021.07.03 |
[JAVA]자바 - 다형성 Polymorphism (1) | 2021.06.30 |
[JAVA]자바 - 데이터 추상화 Data Abstraction (0) | 2021.06.29 |