[오브젝트] 18일차

da__ell·2023년 8월 19일
0

독서 - 오브젝트

목록 보기
18/25
post-thumbnail

p.225 ~ p.234

하향식 기능 분해의 문제점

하향식 기능 분해를 실제로 설계에 적용하면 다음과 같은 문제들에 직면할 수 있다.

  • 시스템은 하나의 메인 함수로 구성되어 있지 않다.
  • 기능 추가나 요구사항 변경으로 인해 메인 함수를 빈번하게 수정해야 한다.
  • 비즈니스 로직이 사용자 인터페이스와 강하게 결합된다.
  • 너무 이른 시기에 함수들의 실행 순서를 고정시키기 때문에 유연성과 재사용성이 저하된다.
  • 데이터 형식이 변경될 경우 파급효과를 예측할 수 없다.

→ 하향식 접근의 근본적 문제점은 변경에 취약한 설계를 낳는다는 것이다.

  • 시스템은 하나의 메인 함수로 구성되어 있지 않다.

대부분의 시스템에서 하나의 메인 기능이란 개념은 존재하지 않는다. 모든 기능들은 규모에서 차이가 있지만 기능성 측면에서 독립적이고 완결된 하나의 기능을 표현한다.

이런 측면에서 모든 기능을 자식 노드로 가지는 하나의 메인 기능을 선택하는 것은 현실적으로 어렵다.

  • 메인함수의 빈번한 수정

시스템은 여러 개의 정상으로 구성되기 때문에 메인 함수를 유일한 정상(top)으로 간주하는 하향식 기능 분해는 새로운 기능을 추가할 때마다 매번 메인 함수를 수정해야 한다.

  • 비즈니스 로직과 사용자 인터페이스의 결합

하향식 접근법은 비즈니스 로직을 설계하는 초기 단계부터 입력 방법과 출력 양식을 함께 고민하도록 강제한다. → 코드 안에서 비즈니스 로직과 사용자 인터페이스 로직이 밀접하게 결합된다.

기능을 분해하는 과정에서 사용자 인터페이스의 관심사와 비즈니스 로직의 관심사를 동시에 고려하도록 강요 → 관심사의 분리라는 아키텍처 설계의 목적 달성이 어려움

  • 성급하게 결정된 실행 순서

하향식 접근법은 설계를 시작하는 시점부터 시스템이 어떻게 동작하는지에 집중하도록 만든다.
처음부터 구현을 염두에 두기 때문에 자연스럽게 함수들의 실행 순서를 정의하는 시간 제약을 강조한다.

실행 순서나 조건, 반복과 같은 제어구조를 미리 결정하여야 하기 때문에 중앙집중 제어 스타일의 형태가 강제된다.

하지만 함수의 제어구조는 빈번한 변경의 대상이다. 하향식 접근법을 통해 분해된 함수들은 상위 함수에 문맥에서만 의미를 가지기 때문에 기능을 추가하거나 변경할 때 매번 기존 함수의 제어구조를 변경하도록 만든다.

→ 객체 지향은 함수 간의 호출 순서가 아니라 객체 사이의 논리적인 관계를 중심으로 설계를 이끌기 떄문에 하나의 구성요소로 시스템의 제어가 집중되지 않고 여러 객체들로 제어의 주체가 분산된다.

  • 데이터 변경으로 인한 파급효과

하향식 기능 분해의 문제는 어떤 데이터를 어떤 함수가 사용하는지 추적하기 어렵다. → 데이터 변경으로 인한 함수에 미치는 영향을 예상하기 어렵다.

데이터 변경으로 인한 영향을 최소화 하려면 데이터와 함께 변경되는 부분과 그렇지 않은 부분을 명확히 분리해야 한다. → 잘 정의된 퍼블릭 인터페이스를 통해 데이터에 대한 접근을 통제 (정보 은닉, 모듈)

언제 하향식 분해가 유용한가?

하향식 분해는 작은 프로그램과 개별 알고리즘을 위해서는 유용한 패러다임이다. 하지만 실제로 동작하는 커다란 소프트웨어를 설계하는 데 부적절하다.

profile
daelkdev@gmail.com

0개의 댓글