🌱 Setter
일반적으로 객체 지향 프로그래밍에서 객체의 데이터는 객체 외부에서 직접적으로 접근하는 것을 막는다. 그 이유는 객체의 데이터를 외부에서 마음대로 읽고 변경할 경우 객체의 무결성(결점이 없는 성질)이 깨어질 수 있기 때문이다. 예를 들어 자동차의 속도는 음수가 될 수 없는데, 외부에서 음수로 변경하면 객체의 무결성이 깨어진다.
이러한 문제점을 해결하기 위해 객체 지향 프로그래밍에서는 메소드를 통해서 데이터를 변경하는 방법을 선호한다. 데이터는 외부에서 접근할 수 없도록 막고 메소드는 공개해서 외부에서 메소드를 통해 데이터에 접근하도록 유도한다. 그 이유는 메소드는 매개값을 검증해서 유효한 값만 데이터로 저장할 수 있기 때문이다. 이러한 역할을 하는 메소드가 Setter이다.
✔ Setter의 예시
void setSpeed(double speed) {
// 매개값이 음수일 경우 speed 필드에 0으로 저장하고, 메소드 실행 종료
if(speed<0) {
this.speed = 0;
return;
} else {
this.speed = speed;
}
}
🌱 Getter
외부에서 객체의 데이터를 읽을 때도 메소드를 사용하는 것이 좋다. 객체 외부에서 객체의 필드값을 사용하기에 부적절한 경우도 있다. 이런 경우에는 메소드로 필드값을 가공한 후 외부로 전달하면 된다. 이런 메소드가 바로 Getter이다.
✔ Getter의 예시
double getSpeed() {
// 필드값인 마일을 km 단위로 환산 후 외부로 리턴
double km = speed*1.6;
return km;
}
🌱 Setter와 Getter 요약 정리
클래스를 선언할 때 가능하다면 필드를 private로 선언해서 외부로부터 보호하고, 필드에 대한 Setter와 Getter 메소드를 작성해서 필드값을 안전하게 변경/사용하는 것이 좋다. 검증 코드나 변환 코드는 필요에 따라 추가해야 한다.
✔ Setter와 Getter의 메소드 사용 예시
private 타입 fieldName;
//Getter
public 리턴 타입 getFieldName() {
return fieldName;
}
//Setter
public void setFieldName(타입 fieldName) {
this.fieldName = fieldName;
}