오브젝트 object 요약 1~2

Mr_Gu·2022년 1월 16일
0

books

목록 보기
3/8
post-thumbnail

01. 객체 설계

소프트웨어가 가져야 하는 세 가지 기능 (로버스마틴, 클린 소프트웨어)

  1. 실행 중에 제대로 동작하기
  2. 변경에 대비하기
  3. 이해하기 쉬워야 함.

초기 설계 코드
Theater가 Customer, Bag, TicketSeller, TicketOffice 모두 조작
즉 Theater가 위에 언급된 모든 객체를 알고 직접 조작하는 형태였다.
Theater가 모든 행위를 다 담당하는 것은 이해하기 힘든 코드다.

해결 방법
책임의 분산 : Theater가 할 일을 Customer, TicketSeller에게 분산
자율성 확립 : 책임 분산시키면서 Customer, TicketSeller가 자기 스스로 동작함.
의인화 : 소프트웨어 세계에서는 무생물도 자율적인 객체다.

의존성, 결합도, 응집도
의존성 : 협력에 의존성이 없을 수는 없다.
결합도 : 의존성이 불필요하게 과할 경우 이를 결합도가 높다라고 표현한다.
응집도 : 자기와 연관된 작업만 실행하고 그 외 일은 다른 객체에게 위임하는 객체를 가리켜 응집도가 높다고 한다.

꼭 필요한 의존성만 남겨 결합도는 낮추고 응집도는 높히자.

02. 객체지향 프로그래밍

객체 지향 프로그래밍의 전반적인 면모를 살펴보는 장이다. 이 장의 내용은 이후 장에서 좀더 구체화 된다. 번외로 code 구현 이해보다는 설계에 따른 code 변화에 집중하자.

도메인 구조
영화 예약 시스템은 할인 조건과 할인 방법이 독립적으로 적용되는 구조를 가지고 있다.
이를 반영하여 시스템을 DiscountPolicy와 DiscountCondition으로 분리!
도메인 개념은 잘 변하지 않기 때문에 이를 잘 활용하도록 하자.

자율적인 객체
1. 객체는 상태와 행동을 함께 가지는 복합적인 존재
2. 객체는 스스로 판단하고 행동하는 자율적인 존재, 자율적인 부분은 캡슐화를 통해 외부와의 통로를 차단하고 협력하는 부분만 public interface를 통해 소통하자.

객체와 관련해서 결합도, 응집도, 자율성 등의 내용은 4장에서
객체 지향 이전의 역사는 7장에서 다룬다.

협력
객체 끼리 메시지를 수신하고 전송하며 서로의 책임을 완수하며 결국에는 시스템의 책임을 수행하는 과정.

협력, 책임, 역할 구조는 3장에서 책임 주도 설계는 5장에서 메시지와 관련된 부분은 6장에서 자세히 다룬다.

다형성
동일한 메시지라도 어떤 객체가 연결되어 있는지에 따라 실행하는 메서드가 다른데 이를 다형성이라고 한다.

8장에서는 의존성에 관한 내용을, 9장에서는 다형성과 관련하여 유연한 설계 원칙을 다룬다.

코드 재사용

상속

  • 서브 클래싱(구현 상속) : 단순히 코드 재사용을 위해 상속을 사용한 경우
  • 서브 타이핑(인터페이스 상속) : 다형성을 구현하기 위해 상속을 활용한 경우

코드 재사용 용도로 사용하는 상속은 나쁘다.

합성
상속으로 코드 재사용하는 대신 재사용할 코드를 가지고 있는 클래스의 객체를 맴버 변수로 두던 매개 변수로 주입받던 받아서 해당 객체의 인터페이스를 활용하는 방식을 쓰자.

10 장과 11 장에서 상속의 나쁜점, 합성의 예시, 믹스인 등을 자세히 배운다.

추상화

장점으로는 1. 세부적인 내용을 무시한 채 상위 내용에 집중할 수 있게 해준다. 2. 1번 특성 덕분에 기존 구조를 고치지 않고 새로운 기능을 쉽게 추가할 수 있다.
다만... 추상화를 이용한 유연한 설계에도 tradeoff가 있다. 이번 장에서도 구조가 복잡해지는 비용을 더 크게 본건진 몰라도 기존 DiscountPolicy와 로직이 살짝 다른 NoneDiscountPolicy를 위해 따로 인터페이스를 만들지 않았다. 단순히 코드가 많아지는 것 이외에도 런타임 의존성과 컴파일타임 의존성이 달라져 이해하기 힘든 코드가 만들어진다는 점도 비용이다.

이후 다형성에 대해 다루면서 tradeoff에 대해서 더 자세히 서술한다.

profile
그냥... 즐기자..

0개의 댓글