2장.

  1. 구현하기 전에 먼저 각 객체들이 어떤 상태인지 어떤 행동을 가지는지를 결정해야한다.
  2. 각 객체들은 독립적인 존재가 아닌 기능 구현을 위한 공동협력체의 일원으로 봐야한다.
  3. 클래스 내부의 인스턴스 변수들은 private으로 선언하여 외부의 접근을 막자.
    • 오로지 적절한 퍼블릭 메소드만을 사용해 내부상태를 변경할수 있게 해야한다.
  4. 내부와 외부를 구분해야하는 이유는 무엇일까 ?
    • 경계의 명확성이 객체의 자율성을 보장한다
      • 무슨소린지 이해를 못하겠음
      • 어느정도 명확한 경계를 통한 자율성의 범위를 정한다는것인지 ?
    • 구현의 자유를 제공한다.
      • 위와 같은 이야기인듯 ? 헷갈림.
  5. 객체는 상태와 행동을 같이 갖는 복합적인 존재
  6. 4번이야기를 좀더하자면 객체의 접근을 통제하면 좀더 자율적이게 됨.
    • 왜냐 다른곳에서 접근할수 없으므로 스스로 상태를 관리, 판단 할수 있게됨
    • 그렇기 떄문에 자율적이게 되는것.
  7. 외부에서 접근 가능한 부분은 퍼블릭 인터페이스
  8. 내부에서만 접근가능한것은 구현 ( implements )
  9. 인터페이스와 구현의 분리 원칙은 훌륭한 객체지향 프로그램을 만들기위해 따라야하는 핵심원칙이다.
  10. 객체가 객체와 통신하는법은 메세지를 전송하는것 뿐이다. 객체가 메세지를 수신하면 수신했다고 한다.
    • 이처럼 수신된 메세지를 처리하기위한 객체 자신만의 방법을 메소드라고 부른다.
  11. 템플릿 패턴을 이용하여 부모클래스에서 로직에대한 구현을 해놓고 자식클래스에서 세부사항을 구현한다.
  12. 전략패턴사용 다양한경우의 조건일 경우 interface를 이용한 전략패턴 사용
  13. 이러한 전략적패턴이라던지 템플릿패턴같은것들 사용하면 디버깅은 어려워지나 유지보수성은 좋아지고 유연성도 늘어난다.
  14. 자식클래스가 부모클래스를 대신하는것을 업캐스팅이라고 한다.
  15. 11~14까지가 다형성
    • 위와같은 부모클래스를 자식클래스들이 상속받아 어떤클래스가 실행되는지에 따라 결과도 달라진다.
  16. 이렇게 런타임시점에 결정되는것을 지연바인딩 또는 동적바인딩이라고 부른다
  17. 컴파일 시점에 결정되는것은 초기바인딩 또는 정적바인딩이라고 한다.
  18. 구현된 코드를 상속받는것은 변경에 취약한 코드다
    • 왜냐면 최상위코드가 변경이되면 하위코드도 다 변경해줘야하기 때문..
  19. 추상화를 사용하면 세부적인 내용을 무시한채 상위 정책을 쉽고 간단하게 표현할 수가 있다.
    • 추상화를 이용해 상위정책을 기술한다는 것은 기본적인 애플리케이션의 협력 흐름을 기술한다는 것을 의미
  20. 추상화를 사용할경우 그 추상클래스나 인터페이스를 상속이나 구현한 어떤 클래스를 추가하면 확장가능해진다.
  21. 이런것들을 컨텍스트 독립성이라고 불린다. 유연한 설계분야에서 진가를 발휘한다.
    • 결론은 유연성이 필요한곳에 추상화를 사용하라
  22. 추상클래스와 인터페이스 중에 어떤것을 고를것인지는 트레이드오프를 통해 정한다.
  23. — 상속 —
    1. 상속은 캡슐화를 위반한다 2. 설계를 유연하지 못하게한다. 위에서 설명함
  24. 캡슐화 위반은 부모클래스의 구현이 자식클래스에게 노출되기 때문.
    • 의문점 디폴트 메소드를 통한 인터페이스의 상속은 왜나온것인가 ?

'book > 오브젝트' 카테고리의 다른 글

5장 - 2. 책임 할당을 위한 GRASP 패턴  (0) 2021.05.09
5장 - 1 책임 할당하기  (0) 2021.05.08
4장 설계 품질과 트레이드오프  (0) 2021.05.05
오브젝트 3장 - 역할, 책임, 협력  (0) 2021.04.30
오브젝트 1장  (0) 2021.04.28

+ Recent posts