개발자 도전기
[JAVA] Getter와 Setter 본문
1. Getter, Setter를 사용하는 이유
객체의 필드(데이터)를 외부에서 마음대로 읽고 변경할 경우 객체의 무결성(결점이 없는 상태)이 깨질 수 있다. 예를 들어 자동차의 속력은 음수가 될 수 없는데, 외부에서 음수로 변경하면 객체의 무결성이 깨진다.
이러한 문제점 때문에 객체 지향 프로그래밍에서는 외부의 필드 접근을 막고 대신 메소드를 통해 필드에 접근하는 것을 선호한다. 그 이유는 메소드를 통해 데이터를 검증해서 유효한 값만 필드에 저장할 수 있기 때문이다. 이러한 역할을 하는 메소드가 Setter이다.
또, 필드값이 객체 외부에서 사용하기에 부적절한 경우 메소드로 적절한 값으로 변환해서 리턴할 수 있다. 이러한 역할을 하는 메소드가 Getter이다.
2. 작성 방법
필드값을 직접적으로 변경하지 못하게 private 접근 제한자를 사용해 차단하고 public으로 Getter, Setter를 선언해 필드값에 우회적으로 접근할 수 있게 한다.
private 타입 fieldName;
//Getter
public 타입 getFieldName(){
return fieldName;
}
//setter
public void 타입 setFieldName(fieldName){
this.fieldName = fieldName;
}
// boolean의 경우
public 타입 isFieldName(){
return fieldName;
}
인텔리제이를 사용할 때 alt + Insert 키를 사용하면 Generate에서 getter/ setter를 편리하게 생성할 수 있다.
3. 예시
public class Car {
private int speed;
private boolean stop;
public int getSpeed() {
return speed;
}
public boolean isStop() {
return stop;
}
public void setSpeed(int speed) {
if (speed < 0) {
this.speed = 0;
return;
}
this.speed = speed;
}
public void setStop(boolean stop) {
this.stop = stop;
if (stop == true) this.speed = 0;
}
}
public class CarExample {
public static void main(String[] args) {
Car myCar = new Car();
myCar.setSpeed(-50);
System.out.println("현재 속도" + myCar.getSpeed()); // 0
myCar.setSpeed(60);
System.out.println("현재 속도" + myCar.getSpeed()); // 60
if (!myCar.isStop()) {
myCar.setStop(true);
}
System.out.println("현재 속도" + myCar.getSpeed()); // 0
}
}
'개발공부 > JAVA' 카테고리의 다른 글
[JAVA] 상속 - 추상 클래스 (0) | 2024.03.08 |
---|---|
[JAVA] 상속 (0) | 2024.03.07 |
[JAVA] 접근 제한자(Access Modifier) (0) | 2024.03.06 |
[JAVA] static final(상수) (0) | 2024.03.06 |
[JAVA] 클래스 - 정적 멤버(static) (0) | 2024.03.05 |