객체의 필드(데이터)를 외부에서 마음대로 읽고 변경할 경우 객체의 무결성(결점이 없는 성질)이 깨질 수 있다. 예를 들어 자동차의 속력은 음수가 될 수 없는데, 외부에서 음수로 변경하면 객체의 무결성이 깨진다.
Car myCar = new Car();
myCar.speed = -100;
이러한 문제점 때문에 객체지향 프로그래밍에서는 직접적인 외부에서의 필드 접근을 막고, 그 대신 메서드를 통해 필드에 접근하는 것을 선호한다. 그 이유는 메서드가 데이터를 검증해서 유효한 값만 필드에 저장할 수 있기 때문이다. 이러한 역할을 하는 메서드가 Setter이다.
다음 코드를 보자. speed 필드는 private 접근 제한을 가지므로 외부에서 접근하지 못한다. speed 필드를 변경하기 위해서는 Setter인 setSpeed() 메서드를 이용해야 한다.
private double speed;
public void setSpeed(double speed) {
if(speed < 0) {
this.speed = 0;
return;
} else {
this.speed = speed;
}
}
외부에서 객체의 필드를 읽을 때에도 메서드가 필요한 경우가 있다. 필드값이 객체 외부에서 사용하기에 부적절한 경우, 메서드로 적절한 값으로 변환해서 리턴할 수 있기 때문이다. 이러한 역할을 해주는 것이 Getter이다.
다음 예시를 보자. speed 필드는 private 접근 제한을 가지므로 외부에서 읽지 못한다. speed 필드를 읽기 위해서는 Getter()인 getSpeed() 메서드를 이용해야 한다. getSpeed() 메서드는 마일단위의 필드값을 km 단위로 변환해서 외부로 리턴한다.
private double speed; // speed의 단위는 마일
public double getSpeed() {
double km = speed * 1.6;
return km;
}
다음은 Getter와 Setter의 기본 작성 방법을 보여 준다. 필요에 따라 Getter에서 변환 코드를 작성하거나 Setter에서 검증 코드를 작성할 수 있다.
private 타입 fieldName;
// Getter
public 타입 getFieldName() {
return fieldName;
}
// Setter
public void setFieldName(타입 fieldName) {
this.fieldName = fieldName;
}
필드 타입이 boolean일 경우에 Getter는 get으로 시작하지 않고 is로 시작하는 것이 관례이다. 예를 들어 stop 필드의 Getter는 다음과 같이 작성할 수 있다.
private boolean stop;
public boolean isStop() {
return stop;
}
Getter / Setter 메서드 자동 생성
이클립스는 클래스에 선언된 필드에 대해 자동으로 Getter와 Setter 메서드를 생성시키는 기능이 있다. 필드를 선언한 후 메뉴에서 [Source] - [Generate Getters and Setters]를 선택하면 선언된 필드에 대한 Getter와 Setter를 자동 생성할 수 있는 대화상자가 실행된다.
'Language > JAVA' 카테고리의 다른 글
| [JAVA] 상속 (0) | 2024.09.04 |
|---|---|
| [JAVA] 싱글톤 패턴 (0) | 2024.09.04 |
| [JAVA] 접근 제한자 (0) | 2024.09.04 |
| [JAVA] import 문 (0) | 2024.09.04 |
| [JAVA] 패키지 (0) | 2024.09.04 |