• Blog

  • Snippets

계층형 설계1

May 19, 2024

쏙쏙들어오는 함수형 코딩

# 계층형 설계란 무엇인가?

애플리케이션을 여러 계층으로 나누어 각 계층이 특정한 역할과 책임을 가지도록 구성하는것을 계층형 설계라고 함

# 직접구현 패턴

아무리 강력한 기능을 하는 함수가 있더라도 복잡하지 않게 함수를 표현해야 함

// 넥타이 하나를 사면 무료로 넥타이 클립을 하나 주는 코드
function freeTieClip(cart){
var hasTie = false
var hasTieClip = false;
for(var i=0; i<cart.length; i++) {
var item = cart[i];
if (item.name === "tie")
hasTie = true;
if (item.name === "tie clip")
hasTieClip = true;
}
if (hasTie && !hasTie Clip) {
var tieclip = make_item("tie clip", 0);
return add item(cart, tieClip);
}
return cart;
}

장바구니 안에 제품이 있는지 확인하는 함수가 있다면 저수준의 반복문을 직접 쓰지 않아도 됨. 저수준의 코드(low level)는 추출해야 할 가능성이 높음.

function freeTieClip(cart){
var hasTie = isInCart(cart, "tie");
var hasTieClip = isInCart(cart, "tie clip");
if (hasTie && !hasTie Clip) {
var tieclip = make_item("tie clip", 0);
return add item(cart, tieClip);
}
return cart;
}
function isInCart(cart, name) {
for(var i=0; i<cart.length; i++) {
if (cart[i].name === name)
return true;
}
return false;
}

변경하기전과 변경하고나서의 호출그래프 차이

변경 하기 전 코드 image-01.png

변경 하고 나서의 코드 image-02.png

각 단계마다 화살표의 길이가 줄었고, low level의 코드를 직접 다이어그램에 표현하지 않아도 되었음.

# 호출그래프의 각 계층마다 존재하는 함수들은 각각 같은 목적을 가지고 있어야한다.

image-03.png

계층이 서로 구분되는 목적을 가지고있으면, 함수가 위치할 계층을 선택하는데 좋은 정보로 사용할 수 있음.

# 코드 리팩토링을 통해 다이어그램의 복잡성을 낮춰야한다.

호출 다이어그램에는 너무 많은 데이터가 있어 어느곳에 문제가 있는지 찾기 어려움. 계층형설계에서 문제는 세 가지 다른영역에서 찾을 수 있음.


문제를 파악할때 유리한 조건의 레벨에서 문제를 파악하면 되겠음.

다이어그램의 복잡성을 낮추고, 화살표의 길이를 짧게 만들었는데 이게 과연 좋은방향일까?

함수를 설계하는데 있어서 최선의 방법은 없지만, 팀원들과 함수를 설계하는 방식에 대해 논의 후 규칙을 만들고, 계속 함수를 설계하는 방법을 개선해나가면 함수를 설계하는데 있어서 개인뿐만 아니라 팀원들까지도 도움이 많이 될 것임.