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