HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
✍🏻
Learnary (learn - diary)
/
☀️
객채지향 사실과 오해 4장 정리 발표자료
☀️

객채지향 사실과 오해 4장 정리 발표자료

progress
Done
Tags
SW_Architecture

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

  • 한 실험을 통해, 인간은 어떤 본질적인 특성에 지니고 있느냐가 아니라 어떤 상황에 처해 잇느냐가 인간의 행동을 결정한다. 즉, 각 개인이 처해 있는 정황 또는 문맥이 인간의 행동 방식을 결정한다는 것이다.
  • 핵심은 인간의 행동을 결정하는 문맥, 정황 에서 보이지 않는 이면인 타인과의 협력이다.
  • 협력에 얼마나 적절한지에 따라 행동의 적합성이 결정되며 협력이라는 문맥이 인간의 행동 방식을 결정하는 것이다.
  • 객체 또한 협력이라는 문맥안에서 행동 방식을 결정한다.
  • 협력이라는 문맥을 고려하지 않은채, 객체의 상태와 행동부터 고민하면 안된다.
  • 가장 중요한 핵심은 객체 간 협력이 포커싱되어야 한다.
  • 훌륭한 객체지향 설계는 객체들 간의 요청 응답 속에 협력에 초첨을 맞춰 애플리케이션을 설계한다.
  • 협력이 자리를 잡으면 저절로 객체의 행동이 드러나고 뒤이어 적절한 객체의 상태가 결정된다.
  • 객체의 모양을 빚는 것은 객체가 참여하는 협력이다.
  • 어떤 협력에 참여하는지에 따라 객체에 필요한 행동을 결정,필요한 행동의 객체의 상태를 결정한다.
  • 개별적인 객체의 행동, 상태가 아니라 객체들간의 협력에 집중하라!

협력

  • 요청하고 응답하며 협력하는 사람들
    • 협력은 다수의 요청과 응답으로 구성되며 전체적으로 협력은 다수의 연쇄적인 요청과 응답의 흐름으로 구성된다.
    • 객체들의 세계는 동일한 목적을 달성하기 위해 협력하는 객체들의 공동체임을 기억하라. 객체들은 동일한 목적을 달성하기 위해 협력하고 있음을 기억하라.
    • 객체 지향 세계에서는 어떤 객체가 어떤 요청에 대해 대답해 줄 수 있거나, 적절한 행동을 할 의무가 있는 경우 해당 객체가 책임을 가진다고 말한다.
  • 누가 파이를 훔쳤지?
  • 재판 속의 협력

책임

💡
객체지향의 세계에서는 어떤 객체가 어떤 요청에 대해 대답해 줄 수 있거나 적절한 행동을 할 의무가 있는 경우 해당 객체가 책임을 가진다고 말한다. 책임은 객체지향 설게의 가장 중요한 재료이다. ‼️
  • 책임의 분류
    • 아는 것(노잉)
      • 개인적 정보에 관해 아는 것
      • 관련 객체에 관해 아는 것
      • 자신이 유도하거나 계산할 수 있는것에 관해 아는 것
    • 하는것(두잉)
      • 객체를 생성하거나 계산을 하는 등의 스스로 하는 것
      • 다른 객체의 행동을 시작시키는 것
      • 다른 객체의 활동을 제어하고 조절하는 것.
    • 명확한 책임이 애플리케이션의 미래(품질)을 결정한다.
    • 즉 책임은 객체의 외부에 제공해 줄수 있는 정보(아는것)와 외부에서 제공해 줄 수 있는 서비스(하는 것의 측면)의 목록이다.
    • 따라서 책임은 객체의 공용 인터페이스를 구성한다
  • 책임과 메시지
    • 협력안에서의 객체는 다른 객체로부터 요청이 전송됐을 경우에만 자신에게 주어진 책임을 수행한다.
    • 이처럼 객체가 다른 객체에게 주어진 책임을 수행하도록 요청을 보내는 것을 메시지 전송이라 하고, 구 객체간의 협력은 메시지를 통해 이루어진다.
    • 메시지는 협력을 위해 한 객체가 다른 객체로 접근할 수 있는 유일한 방법이다.
    • 책임 협력이라는 문맥 속에서 적용된다.
    • 객체 지향 설계는 협력에 참여하기 위해 어떤 객체가 어떤 책임을 수행해야 하고 어던 객체로부터 메시지를 수신할 것인지를 결정하는 것부터 시작하고 협력 안에서 어떤 클래스가 필요하고 어떤 메서드를 포함해야 하는지를 결정하는 것은 책임과 메시지에 대한 대략적인 윤곽을 잡 후에 시작해도 늦지 않는다.

역할

  • 책임의 집합이 의미 하는 것
    • 협력 내에서 다른 객체로 대체할 수 있음을 나타내는 일종의 표식이다.
  • 판사와 증인
    • 메시지가 곧 책임이다.
  • 역할이 답이다
    • 다양한 객체들이 협력에 참여할 수 있으므로 유연해지며 다양한 객체들이 동일한 협력에 참여할 수 있기 때문에 재사용성 또한 높아진다.
    • 역할은 곧 단순성, 유연성, 재사용성을 뒷받침한다.
  • 협력의 추상화
    • 역할의 큰 가치는 하나의 협력 안에 여러 종류의 객체가 참여할 수 있게 함으로써 협력을 추상화 할 수 있다.
    • 협력의 추상화는 설계자가 다뤄야 하는 협력의 개수를 줄이는 동시에 구체적인 객체를 추상적인 역할로 대체함으로써 협력의 양상을 단순화한다.
    • 결과적으로 애플리케이션 설계를 이해하고 기억하기 쉬어진다.
  • 대체 가능성
    • 행위 호환성 (동일한 책임 수행)

객체의 모양을 결정하는 협력

  • 흔한 오류
    • 시스템에 필요한 데이터를 저장하기 위해 객체가 존재한다는 선입견을 가지고 있다. 물론 데이터를 포함하는 것은 사실이지만 객체가 행위를 수행하는데 필요한 재료일 뿐이고, 객체가 존재하는 근원은 행위를 수행하여 협력에 참여하기 위해서다.
    • 실제로 포커싱되어야할 것은 객체의 행위와 책임이다.
 
  • 협력의 따라 흐르는 객체의 책임
    • 요청과 응답의 흐름은 객체가 협력에 참여하기 위해 수행될 책임이 된다.
    • 객체가 협력에 참여하기 위해 필요한 데이터와 행동이 어느 정도 결정된 후에 클래스 구현 방법을 결정해야 한다.
    • 협력에 필요한 책임을 결정하고 객체에게 책임을 할당하는 과정을 얼마나 합리적이고 적절하게 수행했는지가 객체지향의 설계의 품질을 결정한다.
    • 객체의 행위에 초점을 맞추기 위해서 협력이라는 문맥안에서 책임을 분배해야 한다.
    • 그리고 동시에 충분히 자율적으로 만들어야 한다.
 

객체지향 설계 기법

  • 책임 주도 설계
  • 디자인 패턴
  • 테스트 주도 개발
  • 설계하는 방법에서 필요한 도구들일 뿐이다. 핵심은 협력, 역할, 책임이다.
 
협력이라는 문맥 안에서 책임(메시지를 받고 행하는), 책임을 받고 수행 할 수 있는 추상적인 대체품들의 역할이 추출되어서 객체지향 프로그래밍이 구성됨을 말하고 있는것 같다고 느꼇다.
즉, 모든 출발은 협력이라는 정황아래에서부터 근원이 되어 시작함을 강조하는 것 같았다.( 바텀업 방식의 설계가 아닌 탑다운 방식)