본문 바로가기
책/객체지향의 사실과 오해

객체지향의 사실과 오해 - 3장, 4장

by eunyoung 2023. 8. 20.

3장. 타입과 추상화

"일단 컴퓨터를 조작하는 것이 추상화를 구축하고, 조작하고, 추론하는 것에 관한 모든 것이라는 것을 깨닫고 나면 (휼륭한)컴퓨터 프로그램을 작성하기 위한 중요한 전제 조건은 추상화를 정확하게 다루는 능력이라는 것이 명확해진다."

 

추상화의 목적 : 모든 경우에 복잡성을 이해하기 쉬운 수준으로 단순화하는 것

 

분류는 객체지향의 가장 중요한 개념

 

타입 : 공통점을 기반으로 객체들을 묶기 위한 틀, 객체를 분류하기 위해서 사용하는 개념

 

객체가 어떤 행동을 하느냐에 따라서 객체의 타입이 결정됨(메서드를 호출을 통해서 어떤 객체가 실행되는지를 결정)

-> 다형성 : 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있는 능력

 

객체가 동일한 타입으로 분류되기 위해서는 공통의 행동을 가져야 함(인터페이스의 상속???) -> 객체를 결정하는 것은 행동임.

 

캡슐화 : 외부에 행동만을 제공하고 데이터는 행동 뒤로 감추는 것

추상화 : 중요한 부분을 강조하기 위해서 불필요한 세부 사항을 제거시켜 단순화하게 만드는 것

 

일반화, 특수화 : 객체의 상태를 표현하는 데이터가 아니라 행동임.

 

슈퍼타입, 서브타입

 

객체지향에서 중요한 것은 동적으로 변하는 객체의 상태와 상태를 변경하는 행위임. 클래스는 단지 타입을 구현하기 위해 프로그래밍 언어에서 제공하는 구현 메커니줌 중 하나.

 

4장. 역할, 책임, 협력

"우리 모두를 합친 것보다 더 현명한 사람은 없다."

 

객체지향에서 중요한 것은 객체들 사이에서 이뤄지는 협력

 

협력 : 객체들 사이에 다수의 요청과 응답으로 구성됨.

책임 : 객체의 외부에 제공해 줄 수 있는 정보와 외부에 제공해줄 수 있는 서비스 목록임. 책임은 객체의 공용 인터페이스를 구성함. 객체가 다른 객체에게 주어진 책임을 수행하도록 요청을 보내는 것은 메세지 전송을 통해서 이루어짐.

역할 : 협력 내에서 다른 객체로 대체할 수 있는 일종의 표식임. 동일한 역할을 수행하는 객체들이 동일한 메세지를 수신할 수 있기 때문에 동일한 책임을 수행할 수 있다는 것은 중요(동일한 인터페이스를 상속한 객체는 인터페이스 안의 메서드를 수행할 수 있다는 것????)

 

객체가 존재하는 이유는 행위를 수행하며 협력에 참여하기 위해서이다. 객체지향의 핵심은 클래스를 어떻게 구현하는 것이 아니라 객체가 협력 안에서 어떤 책임과 역할을 수행할 것인지를 결정하는 것

 

  • 책임-주도 설계
    객체의 책임 중심으로 시스템을 구축하는 설계 방법
  • 디자인 패턴(반복적으로 발생하는 문제와 그 문제에 대한 해법의 쌍으로 정의됨.)
    역할, 책임, 협력의 템플릿 / 책임-주도 설계의 결과물
  • 테스트-주도 개발
    책임을 수행할 객체 또는 클라이언트가 기대하는 객체의 역할이 메세지를 수신할 때 어떤 결과를 반환하고 그 과정에서 어떤 객체와 협력할 것인지에 대한 기대를 코드로 작성하는 것