-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
57 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 함수는 장바구니가 배열인지 몰라도됨 => 함수가 모두 비슷한 계층에 있다는 것을 의미함 | ||
- 함수가 모두 비슷한 계층에 있다면 직접 구현했다고 할 수 있음 | ||
|
||
## 직접 구현 패턴 리뷰 | ||
|
||
- 직접 구현한 코드는 한 단계의 구체화 수준에 관한 문제만 해결함 | ||
- 계층형 설계는 특정 구체화 단계에 집중할 수 있게 도와줌 | ||
- 구체화 수준에 집중하다보면 설계 감각을 키울 수 있음 | ||
- 호출 그래프는 구체화 단계에 대한 풍부한 단서를 보여줌 | ||
- 함수가 서로 어떻게 연결되어있는지 보여줌 | ||
- 함수를 추출하면 더 일반적인 함수로 만들 수 있음 | ||
- 일반적인 함수가 많을수록 재사용하기 좋음 | ||
- 함수로 빼내면 재사용할 수 있는 곳이 보임. 중복 코드 찾기를 위해 함수를 빼내는 것과 다름 | ||
- 구현을 명확하게 하기 위해 일반적인 함수를 빼내는 것임 | ||
- 일반적인 함수는 구체적인 함수보다 더 많은 곳에서 쓸 수 있음 | ||
- 복잡성을 감추지 않음 | ||
- 명확하지 않은 코드를 감추기 위해 도우미 함수를 만든는 것은 계층형 설계가 아님 | ||
- 계층형 설계에서 모든 계층은 바로 아래 계층에 의존해야함 | ||
- 복잡한 코드를 같은 계층으로 옮기면 안됨. 더 낮은 구체화 수준을 가진 일반적인 함수를 만들어 소프트웨어에 직접 구현 패턴을 적용해야함 |