객체지향 프로그래밍에서 '묻지 말고 시켜라(Tell, Don't Ask)'는 객체 간의 협력 관계를 설명하는 중요한 원칙 중 하나입니다. 이 원칙은 객체의 상태를 직접 조회하여 로직을 수행하는 것이 아니라, 객체에게 행동을 요청함으로써 객체의 캡슐화를 유지하고, 더 유연하고 관리하기 쉬운 코드를 작성하는 데 도움을 줍니다.
'묻지 말고 시켜라' 원칙의 중요성
객체지향 프로그래밍에서 각 객체는 자신의 데이터와 행동을 캡슐화하고, 다른 객체와 메시지를 통해 협력합니다. '묻지 말고 시켜라' 원칙은 이러한 캡슐화를 강조합니다. 객체의 내부 상태를 외부에서 직접 조회하고 결정하는 것이 아니라, 객체에게 원하는 행동을 요청함으로써 객체 스스로 자신의 상태를 관리하게 합니다. 이로 인해 객체 간의 결합도가 낮아지고, 유연성과 재사용성이 높아집니다.
예시: 잘못된 접근
class Rectangle {
private int width;
private int height;
public int getWidth() {
return width;
}
public int getHeight() {
return height;
}
}
class AreaCalculator {
public int calculateArea(Rectangle rectangle) {
return rectangle.getWidth() * rectangle.getHeight();
}
}
위 코드에서 AreaCalculator는 Rectangle의 상태를 '묻고' 있습니다. 이는 Rectangle의 캡슐화를 위반하고, 두 클래스 간의 결합도를 높입니다.
올바른 접근
class Rectangle {
private int width;
private int height;
public int calculateArea() {
return width * height;
}
}
class AreaCalculator {
public int calculateArea(Rectangle rectangle) {
return rectangle.calculateArea();
}
}
이 코드에서는 Rectangle에게 면적을 계산하도록 '시키고' 있습니다. 이는 캡슐화를 유지하고, Rectangle의 내부 구현이 변경되어도 AreaCalculator에 영향을 미치지 않습니다.
결론
'묻지 말고 시켜라' 원칙은 객체지향 프로그래밍에서 객체의 자율성을 존중하고, 강한 캡슐화를 유지하는 데 중요합니다. 이 원칙을 따름으로써, 코드는 더 유연하고 확장 가능하며, 유지보수가 용이해집니다. 객체 간의 협력이 자연스럽고, 각 객체의 역할과 책임이 명확해지는 효과를 가져옵니다.