객체 지향 프로그래밍에서 객체의 데이터는 객체 외부에서 직접적으로 접근하는 것을 막는다.
이유- 객체 데이터를 외부에서 마음대로 읽고 변경할 경우 객체의 무결성(결점이 없는 성질)이 깨어질 수 있기 때문! 바뀌니까 ㅠ
그래서 객체 지향 프로그래밍에서는 메소드를 통해서 데이터를 변경하는 방법을 선호한다!
→ 데이터는 외부에서 접근할 수 없도록 막고 메소드는 공개해서 외부에서 메소드를 통해 데이터에 접근하도록 유도함 : Setter 메소드
외부에서 객체의 데이터를 읽을 때도 메소드를 사용하는 것이 좋은데, 이 때 객체 외부에서 객체의 필드값을 사용하기에 부적절한 경우가 있다... 이 경우 메소드로 필드값을 가공한 후 외부로 전달: Getter 메소드
-외부에서 필드값을 읽을 수만 있고 변경하지 못하도록 하려면(읽기 전용) Getter 메소드만 선언하거나, Setter 메소드를 private 접근 제한을 갖도록 선언하기
public class GetSet {
// 필드 생성
private int speed;
private boolean stop; // 자동차가 멈췄을 때 true 0, 자동차가 달릴 때 false 1
// 우클릭 > Source > Generate Getters and Setters
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
if (speed < 0) {
this.speed = 0; // 음수일 경우 0을 주기
return; // 함수 끝냄
} else {
this.speed = speed; // 양수가 들어오면 그대로 값을 세팅하면 됨
}
}
public boolean isStop() {
return stop;
}
public void setStop(boolean stop) {
this.stop = stop;
if (stop == true) this.speed = 0; // 한 줄이라 중괄호 생략
}
}
public class GetSetEX {
public static void main(String[] args) {
// 클래스에 대한 인스턴스 생성
GetSet getset = new GetSet();
// setSpeed메소드에 접근 -> private 필드에 간접 접근 가능하게 됨
getset.setSpeed(30); // 속도변경
System.out.println(getset.getSpeed()); // 30 (수정하고 값을 가져올 수 있다)
if(!getset.isStop()) { // 달리고 있을 때가 조건
getset.setStop(true); // 멈춤 (GetSet 클래스에서 stop을 줬고 true 값이니까 0이 나옴
System.out.println(getset.getSpeed()); // 0
}
}
}
[출력 결과]
30
0
코드 읽기는 너무나 어렵고요... 이렇게 대충 클래스 정리 마무리... 이론 공부할 시간도 코드 공부할 시간도 넘나리 부족하구먼 ㅠㅠ 슬프다