From f9f9406d31281f33ad8a29dfb8705668d2fa7a2b Mon Sep 17 00:00:00 2001 From: SangBeom Park Date: Thu, 23 May 2024 09:24:02 +0900 Subject: [PATCH] =?UTF-8?q?=EC=83=81=EB=B2=94=208=EC=9E=A5=20(#52)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\354\203\201\353\262\224.md" | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 "\354\261\225\355\204\260_8/\354\203\201\353\262\224.md" diff --git "a/\354\261\225\355\204\260_8/\354\203\201\353\262\224.md" "b/\354\261\225\355\204\260_8/\354\203\201\353\262\224.md" new file mode 100644 index 0000000..f981a88 --- /dev/null +++ "b/\354\261\225\355\204\260_8/\354\203\201\353\262\224.md" @@ -0,0 +1,57 @@ +## **계층형 설계** + +- 소프트웨어를 계층으로 구성하는 기술 +- 비즈니스 규칙, 장바구니를 위한 동작들, 카피-온-라이트, 배열 관련 기능 목적에 따라 계층으로 나눔 + +![image](https://github.com/muhandojeon/Grokking-Simplicity/assets/43921054/ddb6b4eb-ff0e-4c02-b7d7-d18974625f8a) + +## **계층형 설계 패턴** + +- 직접 구현 + - 계층형 설계 구조를 만드는데 도움이 됨 + - 함수 시그니처가 나타내고 있는 문제를 함수 본문에서 적절한 구체화 수준에서 해결해야함 + - 만약 너무 구체적이라면 코드에서 나는 냄새임 +- 추상화 벽 + - 호출 그래프에 어떤 계층은 중요한 세부 구현을 감추고 인터페이스를 제공함 + - 인터페이스를 사용하여 코드를 만들면 높은 차원으로 생각이 가능함 + - 고수준의 추상화 단계만 생각하면 되기 때문에 두뇌 용량의 한계를 극복 가능 +- 작은 인터페이스 + - 시스템이 커질수록 비즈니스 개념을 나타내는 중요한 인터페이스는 작고 강력한 동작으로 구성하는 것이 좋음 + - 다른 동작도 직간접적으로 최소한의 인터페이스를 유지하면서 정의해야함 +- 편리한 계층 + - 개발자의 요구를 만족시키면서 비즈니스 문제를 잘 풀수 있어야함 + - 계층을 추가하면 작업할 때 편리해야함 + +## **패턴1: 직접 구현** + +- 함수가 더 구체적인 내용을 다루지 않도록 함수를 일반적인 함수로 빼내는 것 + +![image](https://github.com/muhandojeon/Grokking-Simplicity/assets/43921054/f6f966d6-bfe1-4ef0-a659-7ad873fa4dc1) + + +- 너무 구체적이기 때문에 직접 구현 패턴을 따르지 않고 있음 +- 장바구니가 배열이라는 사실을 알 필요가 없음 +- array index, for loop는 언어 기능이고, make_item, add_item은 함수를 호출하기 때문에 **서로 다른 계층임** + +![image](https://github.com/muhandojeon/Grokking-Simplicity/assets/43921054/a65bf7d5-2c4b-4f44-ae22-5a31637dc580) + +- isInCart 함수를 만들어 공통으로 사용함 +- freeTieClip 함수는 장바구니가 배열인지 몰라도됨 => 함수가 모두 비슷한 계층에 있다는 것을 의미함 +- 함수가 모두 비슷한 계층에 있다면 직접 구현했다고 할 수 있음 + +## 직접 구현 패턴 리뷰 + +- 직접 구현한 코드는 한 단계의 구체화 수준에 관한 문제만 해결함 +- 계층형 설계는 특정 구체화 단계에 집중할 수 있게 도와줌 + - 구체화 수준에 집중하다보면 설계 감각을 키울 수 있음 +- 호출 그래프는 구체화 단계에 대한 풍부한 단서를 보여줌 + - 함수가 서로 어떻게 연결되어있는지 보여줌 +- 함수를 추출하면 더 일반적인 함수로 만들 수 있음 +- 일반적인 함수가 많을수록 재사용하기 좋음 + - 함수로 빼내면 재사용할 수 있는 곳이 보임. 중복 코드 찾기를 위해 함수를 빼내는 것과 다름 + - 구현을 명확하게 하기 위해 일반적인 함수를 빼내는 것임 + - 일반적인 함수는 구체적인 함수보다 더 많은 곳에서 쓸 수 있음 +- 복잡성을 감추지 않음 + - 명확하지 않은 코드를 감추기 위해 도우미 함수를 만든는 것은 계층형 설계가 아님 + - 계층형 설계에서 모든 계층은 바로 아래 계층에 의존해야함 + - 복잡한 코드를 같은 계층으로 옮기면 안됨. 더 낮은 구체화 수준을 가진 일반적인 함수를 만들어 소프트웨어에 직접 구현 패턴을 적용해야함 \ No newline at end of file