객체지향의 사실과 오해 | 01. 협력하는 객체들의 공동체

yeonk·2022년 11월 29일
0

OOP

목록 보기
1/7
post-thumbnail

참고사항: 조영호님의 객체지향의 사실과 오해를 읽고 정리한 글입니다.










객체 지향의 본질


객체지향은 객체를 지향하는 것이지 클래스를 지향하는 것이 아니다.
클래스의 구조와 메서드가 아니라 객체의 역할, 책임, 협력에 집중하라.





핵심 개념

  • 객체지향: 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법

  • 자율적인 객체: 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 객체

  • 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력

  • 각 객체는 협력 내에서 정해진 역할을 수행

    • 역할: 관련된 책임의 집합
  • 객체는 다른 객체와 협력하기 위해 메시지를 전송

  • 메시지를 수신한 객체는 메시지를 처리하는 데 적합한 메서드를 자율적으로 선택





객체지향과 클래스

핵심은 적절한 책임을 수행하는 역할 간의 유연하고 견고한 협력 관계를 구축하는 것이며, 클래스들의 정적인 관계가 아니라 메시지를 주고받는 객체들의 동적인 관계이다.

  • 클래스는 객체들의 협력 관계를 코드로 옮기는 도구이다.

  • 지나치게 클래스를 강조하는 프로그래밍 언어적인 관점은 객체의 캡슐화를 저해하고 클래스를 서로 강하게 결합시킨다.

  • 애플리케이션을 협력하는 객체들의 공동체가 아닌 클래스로 구성된 설계도로 보는 관점은 유연하고 확장 가능한 애플리케이션의 구축을 방해한다.










협력, 역할, 책임


시스템은 역할과 책임을 수행하는 객체로 분할되고, 시스템의 기능은 객체 간의 연쇄적인 요청과 응답의 흐름으로 구성된 협력으로 구현





협력

  • 협력의 핵심은 특정한 책임을 수행하는 역할들 간의 연쇄적인 요청과 응답을 통해 목표를 달성한다는 것





역할

역할은 관련성 높은 책임의 집합이며, 유연하고 재사용 가능한 협력 관계를 구축하는 데 중요한 설계 요소

  • 여러 객체가 동일한 역할 수행 가능

  • 역할은 대체 가능성을 의미

  • 각 객체는 책임을 수행하는 방법을 자율적으로 선택 가능

  • 하나의 객체가 동시에 여러 역할을 수행 가능





책임

객체 지향 설계는 적절한 객체에게 적절한 책임을 할당하는 것에서 시작
책임은 객체지향 설계의 품질을 결정하는 가장 중요한 요소

  • 애플리케이션의 기능은 더 작은 책임으로 분할되고 책임은 적절한 역할을 수행할 수 있는 객체에 의해 수행됨










객체


객체지향 설계의 묘미는 다른 객체와 조화롭게 협력할 수 있을 만큼 충분히 개방적인 동시에 협력에 참여하는 방법을 스스로 결정할 수 있을 만큼 충분히 자율적인 객체들의 공동체를 설계하는 데 있다.





객체란 무엇인가?

  • 협력에 참여하는 주체

  • 애플리케이션의 기능을 구현하기 위해 존재

  • 객체는 협력이 얼마나 조화를 이루는지를 결정하고 객체의 품질이 협력의 품질을 결정한다.





특징

  • 객체는 충분히 협력적이어야 한다.

  • 객체가 충분히 자율적이어야 한다.

    • 자율적: 자기 스스로의 원칙에 따라 어떤 일을 하거나 자기 스스로를 통제하여 절제하는 것





상태 & 행동

객체는 상태와 행동을 함께 지닌 실체이다.
객체가 협력에 참여하는 과정 속에서 스스로 판단하고 스스로 결정하는 자율적인 존재로 남기 위해서는 필요한 행동과 상태를 함께 지니고 있어야 한다.

  • 객체의 자율성은 객체의 내부와 외부를 명확하게 구분하는 것으로부터 나온다.

  • 객체는 다른 객체가 무엇을 수행하는지는 알 수 있지만 어떻게 수행하는지에 대해서는 알수 없다.

  • 객체의 관점에서 자율성이란 자신의 상태를 직접 관리하고 상태를 기반으로 스스로 판단하고 행동할 수 있음을 의미한다.

  • 객체는 상태와 행위를 하나의 단위로 묶는 자율적인 존재다.

  • 객체지향에서는 데이터와 프로세스를 객체라는 하나의 틀 안에 함께 묶어 놓음으로써 객체의 자율성을 보장한다.

  • 자율적인 객체로 구성된 공동체는 유지보수가 쉽고 재사용이 용이한 시스템을 구축할 수 있는 가능성을 제시한다.





메시지

객체지향에서의 의사소통 수단을 메시지라고한다.
한 객체가 다른 객체에게 요청하는 것을 메시지를 전송한다고 말하고 다른 객체로부터 요청을 받는 것을 메시지를 수신한다고 말한다.

  • 협력은 메시지를 전송하는 객체와 메시지를 수신하는 객체 사이의 관계로 구성된다.

    • 송신자(sender): 메시지를 전송하는 객체

    • 수신자(receiver): 메시지를 수신하는 객체





메서드

객체가 수신된 메시지를 처리하는 방법을 메서드라고 한다.

  • 메시지를 수신한 객체가 실행 시간에 메서드를 선택할 수 있다.
    객체지향 프로그래밍 언어를 구분 짓는 핵심적인 특징

  • 메시지와 메서드의 분리는 객체의 협력에 참여하는 객체들 간의 자율성을 증진시킨다.

  • 메서드를 분리하는 것은 객체의 자율성을 높이는 핵심 메커니즘










참고 자료


조영호, 『객체지향의 사실과 오해』, 위키북스

0개의 댓글