오브젝트 공부 -2

송은우·2022년 10월 7일
0

TIL

목록 보기
21/61

객체는, 다른 객체의 인터페이스에 공개된 행동을 수행하도록 하는 요청을 하고, 요청을 받은 객체는 응답한다.
객체와 다른 객체와 상호작용하는 방법은 메시지를 전송하는 것이고, 다른 객체는 이를 수신하고, 자신만의 방법인 method 를 통해서 반환한다.
메서드와 메시지를 구분하는 것이 중요하다
메서드와, 메시지를 구분하는 것이 다형성에서 출발한다.
메서드를 호출한다 => 메시지를 전송한다로 변경해서 생각할 필요가 있다

   public Money calculateMovieFee(Screening screening){
        return fee.minus(discountPolicy.calculateDiscountAmount(screening));
    }

이렇게 영화 할인을 계산한다고 한다

근데 저게 끝이구나 싶은 느낌?
그냥 자기 가격을 들고있던 값 - 정책에 영화만 넣으면 상영관에 대한 것만 넣으면 끝
영화, 순서, 상영 시간을 다 들고있기에, 가장 편하게 진행할 수 있는 저게 베스트였다는거는 기억해야겠다는 생각?

코드의 의존성과, 실행 관계의 의존성은 다를 수 있다. 다형성 덕분
설계가 유연할 수록, 디버깅이 어려워진다. 이해도 어려워 진다
단순할 수록 디버깅이 쉬워지고, 재사용성과 확장 가능성이 낮아진다.
모든 것은 트레이드 오프가 발생한다

상속 베이스로 작성되는, 프로그래밍을 차이에 의한 프로그래밍이라고 합니다
상속=>부모 클래스가 제공하는 인터페이스를 자식이 물려받는다.
"물려받는 것"
재사용과는 다른 느낌이라고 보는게 좋음

상대가 어떤 객체인지는 중요하지 않다. 그냥 메시지를 보내고, 상대는수신할 수 있다는 것 뿐이 중요하다
자식 클래스가 자식 클래스를 대신 하는 것을 업캐스팅
동일한 메시지를 다른 클래스에서 받는 것을 다형성이라고 한다
실행 시간에 어떤 객체가 수신할 지, 선택되는 것은 지연 바인딩,동적 바인딩.
컴파일 타임은 초기 바인딩, 정적 바인딩

상속= 구현 상속+ 인터페이스 상속
구현 상속= 서브클래싱, 인터페이스 상속= 서브타이핑
코드 재사용= 구현상속. 부모 크래스가 자식 클래스 인터페이스 공유 가능하도록 만드느 것 인터페이스 상속

상속은 구현 상속이 아닌 인터페이스 상속을 위해서 사용해야 한다.
구현 목적이라면 변경에 취약해진다
c++의 Abstract Base Class를 의미함

추상화는 인터페이스에 초점을 맞춘다.
세부 내용을 무시하고, 상위 도메인 작성이 가능하다
디자인패턴이나, 프레임워크들 모두 추상화를 이용해 상위 정책을 정의하는 객체지향의 매커니즘을 활용하고 있다.

if문을 주의하자. if문이 있다면, 단일 책임을 어기고 있는 것이 아닌지 고민해라
컨텍스트 독립성 : 그냥 상속받은 어떤 결과와도 다 상호작용이 가능하다

합성이 상속보다 좋은 방법이 되는 경우가 많다
상속은 캡슐화 위반, 설계 유연하지 못하도록 만든다
컴파일 타임에 구조가 결정되어, 수정이 불가능하다
합성 + setter가 있다면 그것이 최고가 된다(interface를 통해 약하게 결합하ㅣㄱ에)

객체 지향이란, 객체를 지향하는 것이다. 적절한 협력을 식별하고, 협력에 필요한 적절한 책임을 할당하는 것. 책임 + 협력

profile
학생의 마음가짐으로 최선을 다하자

0개의 댓글