객체 지향 프로그래밍

상태(필드)와 행위(메서드)를 가진 객체를 중심으로 설계하고, 객체 간 협력으로 프로그램을 구성하는 프로그래밍 패러다임입니다.

4대 특징

Tell Don't Ask 원칙

객체의 데이터를 꺼내 와 호출부에서 판단하지 말고, 객체에게 필요한 동작을 수행하도록 메시지를 보내라는 원칙입니다. 이를 지키면 캡슐화가 유지되고, 객체 스스로 자기 데이터를 다루므로 응집도는 높아지고 결합도는 낮아집니다.

// 위반: 데이터를 꺼내 호출부에서 검증하고 다시 채워 넣음
if (account.getBalance().compareTo(amount) < 0) {
    throw new IllegalStateException("잔액 부족");
}
account.setBalance(account.getBalance().subtract(amount));

// 준수: 객체에게 메시지만 전달
account.withdraw(amount);

다이아몬드 문제

다중 상속을 허용하는 언어에서 발생하는 모호성 문제입니다. B와 C가 A를 상속해 같은 메서드를 오버라이딩하고, D가 B와 C를 동시에 상속하면 D가 어느 구현을 물려받아야 하는지 알 수 없습니다.

Java는 클래스의 다중 상속 자체를 지원하지 않아 이 문제를 막고, 인터페이스의 다중 구현만 허용합니다.

핵심 정리

→ 객체 지향 프로그래밍이란 무엇이고, 어떤 특징이 있나요?

CSLOG에서 보기