본문 바로가기

CS

[책 정리] 객체 지향의 사실과 오해

반응형

http://www.yes24.com/Product/Goods/18249021

객체 지향의 사실과 오해를 읽고 나름대로 정리했는데, 막상 정리하려고 보니 굉장히 어려웠다... 메모하면서 책을 읽는 방식으로 해봐야 할 것 같다.

학교에서 배웠던 객체지향과 비교하면서 책을 읽으니까 더 재밌고 쉽게 읽었던 것 같고, 사람들이 말하는 TDD와 DDD가 왜 중요한지를 알게된 계기가 되었다.

 

개념 1. “객체지향이란 실세계를 직접적이고 직관적으로 모델링할 수 있는 패러다임” 이라는 설명은 객체지향의 기반을 이루는 철학적인 개념을 설명하는데는 적합하지만 유연하고 실용적인 관점에서 설명하기에는 적합하지않다.

  • 실제 객체지향의 목표 = 새로운 세계를 창조하는 것이다.
  • 객체지향에서 가장 중요한 3가지 개념 = 협력, 역할, 책임
  • 객체지향에서 시스템은 자율적인 객체들의 공동체로 본다.
  • 객체는 자율적이여야하고, 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합이다.
  • 객체는 다른 객체와 협력하기 위해서 메시지를 사용한다.
  • 메시지를 받은 객체는 자율적으로 적합한 메소드를 사용하여 메시지를 처리해 응답한다.

개념 2. 객체지향에서 클래스는 도구일 뿐이다.

  • 클래스는 객체지향 프로그래밍 언어의 관점에서 매우 중요한 구성요소인것은 분명하지만, 객체지향의 핵심을 이루는 중심 개념이라고 말하기에는 무리가 있다.
  • 객체지향에서 핵심은 객체의 관점으로 어떤 객체들이 어떤 메시지를 주고받으면 협력하는지를 파악하는 것이다.
  • 클래스는 단순히 협력에 참여한는 객체를 구현하는 도구일 뿐이다.

개념 3. 행동이 상태를 결정한다.

객체에서 상태는 단지 특정 시점에 객체가 가지고있는 정보의 집합으로 객체의 구조적 특징을 표현한다.

행동은 외부의 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동이다. 행동의 결과로 자신의 상태를 변경하거나 다른 객체에게 메시지를 전달할 수 있다.

객체의 상태는 자신의 행동에 의해서만 변경되는데 이렇게 자신의 상태를 외부에 노출하지 않고, 행동만 외부로 노출하는 자율적인 객체가 곧 캡슐화를 의미한다.

개념 4. 객체 지향 설계 기법

책임-주도 설계

협력에 필요한 책임들을 식별하고 적합한 객체에게 책임을 할당하는 방식으로 애플리케이션을 설계한다.

  1. 시스템이 사용자에게 제공해야 하는 기능인 시스템 책임을 파악한다.
  2. 시스템 책임을 더 작은 책임으로 분할한다.
  3. 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당한다.
  4. 객체가 책임을 수행하는 중에 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 객체 또는 역할을 찾는다.
  5. 해당 객체 또는 역할에게 책임을 할당함으로써 두 객체가 협력하게 된다.

디자인 패턴

패턴은 전문가들이 특정 문제를 해결하기 위해 이미 식별해 놓은 역할, 책임, 협력의 모음이다. 특정한 상황에 적용 가능한 디자인 패턴을 잘 알고있다면 책임-주도 설계의 절차를 따르지 않고도 역할, 책임, 협력 관계를 빠르게 잡아낼 수 있다.

테스트 - 주도 개발

테스트를 먼저 작성하고 테스트를 통과하는 구체적인 코드를 추가하면서 애플리케이션을 완성해가는 방식이다.

책임을 수행할 객체 또는 클라이언트가 기대하는 객체의 역할이 메시지를 수신할 때 어떤 결과를 반환하고 그 과정에서 어떤 객체와 협력할 것인지에 대한 기대를 코드의 형태로 작성하는 것이다.

테스트 - 주도 개발은 다양한 설계 경험과 패턴에 대한 지식이 없는 사람들의 경우에는 온전한 혜택을 누리기가 어렵다. 객체지향에 대한 깊이 있는 지식을 요구한다.

개념 5. 객체는 자율적인 존재이다.

자율적인 객체는 스스로의 의지와 판단에 따라 각자 맡은 책임을 수행하는 객체를 의미한다.

개념6. 책임은 설계의 품질을 좌우한다.

적절한 책임을 적절한 객체에게 할당하는 과정에서 적절한 책임이 자율적인 객체를 낳고, 자율적인 객체들이 모여 유연하고 단순한 협력을 낳는다.

  1. 자율적인 책임은 협력을 단순하게 만든다.
  2. 자율적인 책임은 외부와 내부를 명확하게 분리한다.
  3. 책임이 자율적인 경우 책임을 수행하는 내부적인 방법을 변경하더라고 외부에 영향을 미치지 않는다.
  4. 자율적인 책임은 협력의 대상을 다양하게 선택할 수 있는 유연성을 제공한다.
  5. 객체가 수행하는 책임들이 자율적일수록 객체의 역할을 이해하기 쉬워진다.

책임이 자율적일수록 적절하게 ‘추상화'되며 ‘응집도'가 높아지고, ‘결합도'가 낮아지며, ‘캡슐화’가 증진되고, ‘인터페이스와 구현이 명확히 분리'되며, 설계의 ‘유연성'과 ‘재사용성'이 향상된다.

개념 7. 메시지를 따라라.

메시지는 객체들이 서로 협력할 때 사용할 수 있는 유일한 수단이다.

메시지는 How(어떻게 수행 될 지?)가 아닌 Who(누가)/What(무엇을 원하는 지?)를 결정한다.

객체의 구체적인 타입과 무관하게 메시지를 이해할 수 있는 객체들을 서로 연결하고 협력 가능하게 만드는 것은 유연하고 재사용 가능한 설계를 낳는 토양이다.

다형성은 객체가 아니라 객체들이 주고받는 메시지에 초점을 맞춰야 한다.

개념 8. 메시지가 인터페이스를 결정한다.

인터페이스는 행동들의 목록인 책임을 뜻한다.

인터페이스와 구현을 분리해야한다.

객체를 설계할 때 외부에 노출되는 인터페이스와 내부에 숨겨지는 구현을 명확하게 분리해서 고려해야 한다.

소프트웨어는 항상 변하기 때문에 변경을 관리해야 한다.

구현 = 변경으로부터 안전지대, 인터페이스 = 위험 지대

반응형

'CS' 카테고리의 다른 글

바람직한 설계의 특징: Code Complete 2  (0) 2023.07.02
정보처리기사 필기 정리 노션 공유  (0) 2022.04.14