- 기능과 구조 설계2023년 02월 23일
- starryeye
- 작성자
- 2023.02.23.오전02:28
모든 소프트웨어 제품의 설계에는 두 가지 측면이 존재한다.
하나는 기능 측면의 설계이고..
다른 하나는 구조 측면의 설계이다.
기능 측면의 설계는 제품이 사용자를 위해 무엇을 할 수 있는지에 초점을 맞춘다.
구조 측면의 설계는 제품의 형태가 어떠해야 하는지에 초점을 맞춘다.
설계의 가장 큰 도전은 기능과 구조라는 두가지 측면을 함께 녹여 조화를 이루도록 만드는 것이다.
소프트웨어 분야에서 예외가 없는 유일한 규칙은 요구사항이 항상 변경된다는 것이다.
설계라는 행위를 중요하게 만드는 것은 변경에 대한 필요성이다.
훌륭한 소프트웨어 설계자는 사용자가 만족할 수 있는 훌륭한 기능을 제공하는 동시에
예측 불가능한 요구사항 변경에 유연하게 대처할 수 있는 안정적인 구조를 제공하는 능력을 갖춰야한다.
그렇다면..
좋은 소프트웨어 설계란 무엇인가..
나중에라도 변경할 수 있는 여지를 남겨 놓는 설계이다.
설계를 하는 목적은 나중에 설계하는 것을 허용하는 것이며,
설계의 일차적인 목표는 변경에 소요되는 비용을 낮추는 것이다.
변경에 대비하고 변경의 여지를 남겨 놓는 가장 좋은 방법은
자주 변경되는 기능이 아닌 안정적인 구조를 중심으로 설계하는 것이다.
객체지향에서의 좋은 설계로의 접근방법
자주 변경되지 않는 안정적인 객체 구조를 바탕으로 시스템 기능을 객체 간의 책임으로 분배한다.
객체의 구조에 집중하고 기능이 객체 구조를 따르게 만들자.
그러면, 시스템 기능은 더 작은 책임으로 분할되고 적절한 객체에게 분배되기 때문에
기능이 변경되더라도 객체 간의 구조는 그대로 유지된다.
이것이..
객체를 기반으로 책임과 역할을 식별하고 메시지를 기반으로 객체들의 협력 관계를 구축하는 이유이다.
안정적인 객체 구조는 변경을 수용할 수 있는 유연한 소프트웨어를 만들 수 있는 기반을 제공한다.
"객체지향의 사실과 오해" 책에서 발췌
'OOP' 카테고리의 다른 글
기능과 구조의 통합 (feat. 책임-주도 설계) (0) 2023.02.23 도메인 모델 (0) 2023.02.23 책임의 자율성이 협력의 품질을 결정 (0) 2023.02.21 책임, 메세지 그리고 인터페이스 (0) 2023.02.13 다음글이전글이전 글이 없습니다.댓글