기능과 구조의 통합 (feat. 책임-주도 설계)

OOP 2023. 2. 23. 03:50

지금껏 책을 읽으면서 생각하고 알게된 지식들이 여기서 완전해진다. 책.. 197 페이지이다. 이 부분은 포스팅을 보지말고 다시 읽는 것을 추천한다.. (그림도 너무 좋다..) 객체지향 패러다임은 모든 것이 객체라는 사상에서 출발한다. 프로그래머는 시스템을 사용자로부터 전송된 메세지를 수행하기 위해 책임을 수행하는 거대한 자율적인 객체로 본다. 시스템은 사용자와 만나는 경계에서 사용자의 목표를 만족시키기 위해 사용자와의 협력에 참여하는 커다란 객체다. 사용자에게 시스템이 수행하기로 약속한 기능은 결국 시스템의 책임으로 볼 수 있다. 시스템이라는 객체 안에는 더 작은 규모의 객체가 포함될 수 있다. 이제 시스템이 수행해야 하는 커다란 규모의 책임은 시스템 안에 살아가는 더 작은 크기의 객체들의 협력을 통해 ..

도메인 모델

OOP 2023. 2. 23. 02:57

들어가기 전에.. 객체지향 세계를 구축하기 위해서는 사용자에게 제공할 기능과 기능을 담을 안정적인 구조라는 재료가 준비되어 있어야 한다. 구조는 사용자나 이해관계자들이 도메인에 관해 생각하는 개념과 개념들 간의 관계로 표현한다. 기능은 사용자의 목표를 만족시키기 위해 책임을 수행하는 시스템의 행위로 표현한다. 일반적으로 기능을 수집하고 표현하기 위한 기법을 유스케이스 모델링이라 한다. 구조를 수집하고 표현하기 위한 기법을 도메인 모델링이라 한다. 본격적으로 도메인 모델에 대해 알아보자. 도메인 사용자가 프로그램을 사용하는 대상 분야를 도메인이라고 한다. 모델 모델은 지식을 선택적으로 단순화하고 의식적으로 구조화한 형태이다. 복잡성의 바다에서 길을 잃지 않고 중요한 문제에 집중할 수 있도록 필요한 지식만 ..

기능과 구조 설계

OOP 2023. 2. 23. 02:28

모든 소프트웨어 제품의 설계에는 두 가지 측면이 존재한다. 하나는 기능 측면의 설계이고.. 다른 하나는 구조 측면의 설계이다. 기능 측면의 설계는 제품이 사용자를 위해 무엇을 할 수 있는지에 초점을 맞춘다. 구조 측면의 설계는 제품의 형태가 어떠해야 하는지에 초점을 맞춘다. 설계의 가장 큰 도전은 기능과 구조라는 두가지 측면을 함께 녹여 조화를 이루도록 만드는 것이다. 소프트웨어 분야에서 예외가 없는 유일한 규칙은 요구사항이 항상 변경된다는 것이다. 설계라는 행위를 중요하게 만드는 것은 변경에 대한 필요성이다. 훌륭한 소프트웨어 설계자는 사용자가 만족할 수 있는 훌륭한 기능을 제공하는 동시에 예측 불가능한 요구사항 변경에 유연하게 대처할 수 있는 안정적인 구조를 제공하는 능력을 갖춰야한다. 그렇다면.. ..

책임의 자율성이 협력의 품질을 결정

OOP 2023. 2. 21. 16:42

객체의 책임이 자율적일수록 협력이 이해하기 쉬워지고 유연하게 변경할 수 있게 된다. 결과적으로 책임이 얼마나 자율적인지가 전체적인 협력의 설계 품질을 결정하게 된다. 근거1. 자율적인 책임은 협력을 단순하게 만든다. 자율적인 책임은 세부적인 사항들을 무시하고 의도를 드러내는 하나의 문장으로 표현함으로써 협력을 단순하게 만든다. 객체지향 커뮤니티의 전문 용어로 표현하자면 책임이 적절하게 추상화된다. "왕이 원하는 것은 단순히 '증언'하는 것 뿐이다." 근거2. 자율적인 책임은 객체의 외부와 내부를 명확하게 분리한다. 책임이 자율적이기 때문에 두 객체간 약속된 추상화된 책임만 완수할 수 있으면 어떤 방법을 선택할지는 전적으로 요청 받는 객체의 권한이다. 객체지향 커뮤니티의 전문 용어로 표현하자면 요청하는 객..

책임, 메세지 그리고 인터페이스

OOP 2023. 2. 13. 21:34

객체의 책임 협력에 참여하는 객체의 책임이 자율적이어야 한다는 사실을 강조한다. 여기서 자율성이란 자신의 의지와 판단력을 기반으로 객체 스스로 책임을 수행하는 방법을 결정할 수 있음을 의미한다. 메세지 메세지는 한 객체가 다른 객체에게 요청을 전송할 때 사용하는 메커니즘이다. 객체의 인터페이스는 객체가 수신할 수 있는 메세지의 목록으로 채워진다. 객체가 메세지를 수신했을 때 적절한 객체의 책임이 수행된다. 메서드란 메세지를 수신 했을 때 책임을 수행하는 방법을 의미한다. 메세지와 메서드의 구분은 객체를 외부와 내부라는 두 개의 명확하게 분리된 영역으로 구분하는 동시에 다형성을 통해 다양한 타입의 객체를 수용할 수 있는 유연성을 부과한다. 인터페이스 인터페이스는 객체가 책임을 수행하기 위해 외부로 부터 메..