책
[객체지향의 사실과 오해] Chapter2 - 이상한 나라의 객체
꾸진
2022. 5. 25. 21:17
객체, 그리고 소프트웨어 나라
객체의 다양한 특성을 효과적으로 설명하기 위해서는 객체를 상태(state), 행동(behavior), 식별자(identity)를 지닌 실체로 보이는 것이 가장 효과적이다.
상태와 행동
- 객체의 상태를 변경시키는 것은 객체의 행동이다
- 객체의 상태를 변경할지 여부는 객체 스스로 결정한다
협력과 행동
- 객체가 다른 객체와 협력하는 유일한 방법은 다른 객체에게 요청을 보내는 것이다.
- 객체가 다른 객체와 메세지를 통해서만 의사소통할 수 있다.
메세지를 통해서만 의사소통할 수 있다는것은 우리가 getter, setter들을 지양하고 의미있는 메세지 자체로 객체간 협력할 수 있게 메소드를 구현하는걸 말하지 않을까 생각한다.
- 객체지향의 모든 세계에서 모든 객체는 자신의 상태를 스스로 관리하는 자율적인 존재다.
- 앨리스 객체의 키를 작게 만드는 것이 앨리스 자신인 것처럼 음료 객체의 양을 줄이는것은 음료 자신이어야한다.
class Alice {
private int height; // 키
private boolean canGoThroughDoor; //문을 지날수 있는지
public Alice(int height) {
this.height = height;
checkCanGoThroughDoor();
}
public void drinkBeverage(Beverage beverage, int quantity) {
// 앨리스는 음료를 마시고 난 후 음료를 마셨다는 메세지를 음료에 전송한다.
this.height -= quantity;
beverage.drunken(quantity);
checkCanGoThroughDoor();
}
private void checkCanGoThroughDoor() {
if(this.height <= 40) { //40센치 이하만 문을 지나갈 수 있다.
canGoThroughDoor = true;
}
}
}
class Beverage {
private int totalQuantity;
public void drunken(int quantity) {
this.totalQuantity -= quantity;
}
}
Alice alice = new Alice(50); // 앨리스의 키는 50센치이므로 문을 지나갈 수 없다.
Beverage beverage = new Beverage(20); //음료의 양은 20이다.
//앨리스는 음료 10을 마시고 문을 통과할 수 있게 된다.
alice.drinkBeverage(beverage, 10);
- Alice와 Beverage 클래스는 캡슐화된 상태이므로 외부에서 다른 객체의 상태를 변경할 수 없다.
-> Setter를 사용하게 되면 외부에서 다른 객체의 상태를 변경할 수 있기때문에 Setter를 지양해야하는 이유랑 연관되지 않을까 싶다.
- 상태를 외부에 노출시키지 않고 행동을 경계로 캡슐화 하는것은 결과적으로 객체의 자율성을 높인다.