본문 바로가기

오브젝트

(3)
[오브젝트] 절챠지향과 객체지향 1) 절차지향과 객체지향- 일반적으로 절차적 프로그래밍은 우리의 직관에 위배된다.  우리는 관람객과 판매원이 자신의 일을 스스로 처리할 것이라고 예상한다.  하지만 절차적 프로그래밍의 세계에서는 관람객과 판매원이 수동적인 존재일뿐이다.  타인이 자신의 가방을 마음대로 헤집어 놓아도 아무런 불만을 가지지 않는 소극적인 존재다.  절차적 프로그래밍의 세상은 우리의 예상을 너무나도 쉽게 벗어나기 때문에  코드를 읽는 사람과 원활하게 의사소통하지 못한다.  - 더 큰 문제는 절차적 프로그래밍의 세상에서는 데이터의 변경으로 인한 영향을  지역적으로 고립시키기 어렵다는 것이다.  Audience와 TicketSellter의 내부 구현을 변경하려면   Theater의 enter 메서드를 함께 변경해야 한다.  - 변..
[오브젝트] 책임 1) 책임이란 무엇인가?- 객체를 설계하기 위해 필요한 문맥인 협력이 갖춰졌다고 하자.  다음으로 할 일은 협력에 필요한 행동을 수행할 수 있는 적절한 객체를 찾는 것이다.   이 때, 협력에 참여하기 위해 객체가 수행하는 행동을 책임이라고 부른다.  - 책임은 객체에 의해 정의되는 응집도 있는 행위의 집합으로,  객체가 유지해야 하는 정보와 수행할 수 있는 행동에 대해   개략적으로 서술한 문장이다.  - 즉, 객체의 책임은 '무엇을 알고 있는가'와 '무엇을 할 수 있는가'로 구성된다.  크레이그 라만(Craig Larman)은 이러한 분류 체계에 따라  객체의 책임을 크게 하는 것(doing)과 아는 것(knowing)의 두 가지 범주로 나누어 세분화하고 있다.  - 영화 예매 시스템에서 Screen..
[오브젝트] 의존성 관리하기 1) 의존성 관리하기란?- 잘 설계된 객체지향 애플리케이션은 작고 응집도 높은 객체들로 구성된다.  작고 응집도 높은 객체란 책임의 초점이 명확하고 한 가지 일만 잘 하는 객체를 의미한다.  이런 작은 객체들이 단독으로 수행할 수 있는 작업은 거의 없기 때문에  일반적인 애플리케이션의 기능을 구현하기 위해서는   다른 객체에게 도움을 요청해야 한다.   이런 요청이 객체 사이의 협력을 낳는다.  - 협력을 필수적이지만 과도한 협력은 설계를 곤경에 빠뜨릴 수 있다.  협력은 객체가 다른 객체에 대해 알 것을 강요한다.  다른 객체와 협력하기 위해서는 그런 객체가 존재한다는 사실을 알고 있어야 한다.  객체가 수신할 수 있는 메시지에 대해서도 알고 있어야 한다. - 이런 관점에서 객체지향 설계란 의존성을 관..