객체지향 ‐ 객체지향 - dnwls16071/Backend_Summary GitHub Wiki

📚 객체지향

  • 객체지향은 데이터 및 데이터와 관련된 프로시저를 객체라고 불리는 단위에 묶는다.
  • 객체(Object)란 무엇일까?
    • 객체의 핵심은 바로 기능을 제공하는 것에 있다.
    • 예를 들어, 스피커는 소리 크기를 줄이는 기능과 소리 크기를 키우는 기능이 있을 것이다.
    • 스피커가 "어떻게" 소리를 줄이고 키우는 것이 중요한 것이 아니다. "어떤" 기능을 제공하는 것이 중요한 것이다.

📚 캡슐화(Encapsulation)

  • 도움이 되는 규칙 1. Tell, Don't Ask
  • 도움이 되는 규칙 2. 데미테르의 법칙

⭐Tell, Don't Ask

  • 데이터를 물어보지 않고 기능을 실행해달라.
// Bad(X)
// member.getExpiryDate() -> 만료일자를 가져온다.
if (member.getExpiryDate() != null) {
  // 만료 시 처리 로직(어쩌구 저쩌구...)
}

// Good(O)
if (member.isExpired()) {
  // 만료 시 처리 로직(어쩌구 저쩌구...)
}
  • Bad 케이스와 같이 데이터를 읽는 것은 데이터 중심으로 코드를 작성하게 만드는 원인이 되며, 절차지향적인 코드를 유도하게 된다.
  • 데이터 대신 기능을 실행해달라고 명령하면 해당 기능을 어떻게 구현했는가 여부가 감춰지게 된다. 기능 구현이 캡슐화되었다는 의미가 된다.

⭐데미테르의 법칙 - 예제(신문 배달부와 지갑)

  • 메서드에서 생성한 객체의 메서드만을 호출
  • 파라미터로 받은 객체의 메서드만을 호출
  • 필드로 참조하는 객체의 메서드만을 호출