기능 설계 vs 구조 설계

"소프트웨어 분야에서 예외가 없는 유일한 규칙은 요구사항이 항상 변경된다는 것이다."

기능 측면 설계란?

  • 제품이 사용자에게 무엇을 제공하는지에 초점

  • 사용자가 사용할 수 있는 기능 중심의 설계


구조 측면 설계란?

  • 제품의 형태와 내부 구조에 초점

  • 기능을 어떻게 배치하고 조직할 것인가에 대한 설계


훌륭한 소프트웨어의 조건

  • 기능은 충분조건 → 사용자가 원하는 동작을 수행하는 소프트웨어

  • 구조는 필요조건변화에 유연하고 확장 가능한 소프트웨어를 만들기 위한 기반


핵심 비교

구분
기능 설계
구조 설계

초점

사용자 요구

시스템 내부 구조

목적

무엇을 할 것인가

어떻게 설계할 것인가

변화 대응

자주 변함

안정적, 유지보수에 유리

예시

예약 기능, 결제 기능

계층 구조, 책임 분리, 모듈화


변화에 유연한 설계 전략

  • 변경 가능성이 높은 기능보다는 안정적인 구조 중심으로 설계해야 함

  • 그렇게 해야 변경의 여지를 남기고도 유연한 대응이 가능


객체지향 설계에서의 구조 중심 접근

  • 객체는 안정적인 구조의 단위

  • 시스템의 기능은 객체 간의 책임 분배를 통해 구현됨

  • 기능이 변경되더라도 객체 간 구조는 그대로 유지

  • 이는 객체를 기반으로 역할과 책임을 명확히 분리하고 메시지를 처리할 수 있다는 이야기


요약

  • 기능은 눈에 보이는 결과를 만들지만 구조는 그 결과를 오래도록 유지 가능하게 하는 기반이 된다.

  • 객체지향 설계는 변경에 강한 구조를 설계하기 위한 방법론이다.

  • 기능은 구조 위에 흘러가는 흐름이며, 마치 지도를 따라 자연스럽게 흐르듯 구성되어야 한다.

Last updated