계층형 설계

[쏙쏙 들어오는 함수형 코딩 Ch8-9]

계층형 설계 stratified design

소프트웨어를 계층으로 구성하는 기술. 각 계층에 있는 함수는 바로 아래 계층의 함수를 이용해 정의

각 계층을 정확히 구분하기는 어렵지만, 계층을 잘 구분하려면 구분하기 위한 다양한 변수를 찾고, 찾은 것을 가지고 어떻게 해야하는지 알아야 한다

계층형 설계 감각 키우기

입력

함수 본문

계층 구조

함수 시그니처

출력

조직화

구현

변경

계층형 설계 패턴

패턴 1: 직접 구현

패턴 2: 추상화 벽 abstraction barrier

활용

패턴 3: 작은 인터페이스 minimal interface

패턴 4: 편리한 계층 comfortable layers

ex. 넥타이 하나를 사면 무료로 넥타이 클립을 하나 주는 코드

유지보수 하기 어려운 코드

function freeTieClip(cart) {
  let hasTie = false;
  let hasTieClip = false;
  for (let i = 0; i < cart.length; i++) {
    const item = cart[i];
    if (item.name === 'tie') hasTie = true;
    if (item.name === 'tie clip') hasTieClip = true;
  }

  if (hasTie && !hasTieClip) {
    const tieClip = makeItem('tie clip', 0);
    return addItem(cart, tieClip);
  }

  return cart;
}

코드 개선하기

직접 구현 패턴 적용하기

저수준 코드 추출하기
호출 그래프를 만들어 함수 호출 시각화하기
Screenshot-2023-01-06-at-9-35-54-PM

비기능적 요구사항 nonfunctional requirements

유지보수성 maintainability

자주 바뀌는 코드는 가능한 위쪽에 있어야

테스트성 testability

시간이 지나도 변하지 않는 코드는 가장 아래 계층에 있어야

재사용성 reusability

낮은 수준으로 함수를 빼내면 재사용성이 더 높아짐

#develop #fp #architecture #stratified_design