- Published on
2024.01.21
[함수형 코딩] - 08. 계층형 설계 Ⅰ
소프트웨어 설계
코드를 만들고, 테스트하고, 유지보수하기 쉬운 프로그래밍 방법을 선택하기 위해 미적 감각을 사용하는 것
설계를 잘하면 아이디어를 코드로 구현하고 테스트하고 유지보수하기 쉽다.
계층형 설계
소프트웨어를 계층으로 구성하는 기술
계층형 설계 패턴
패턴 1: 직접 구현
구체화 수준? 오프-바이-원 에러? 추상화 단계? 🤔
계층 구조는 복잡하지 않게 함수를 표현해야 한다.
어떤 설계 원칙을 가지고 설계하지 않다보면 제대로 설계하지 않고 그냥 기능 구현부터 하게 된다. => 나중에 유지보수하기 어려움.
직접 구현 패턴을 통해 함수를 만들면, 저수준의 반복문을 직접 쓰지 않을 수 있다. 저수준의 코드는 추출해야 할 가능성이 높다.
직접 만든 함수와 언어 기능은 추상화 수준이 다른데, 반복문과 배열 인덱스를 참조하는 등 의 기능은 더 낮은 추상화 단계이다.
함수가 여러 계층을 사용하고 있을 때, 한 함수에서 서로 다른 추상화 단계를 사용하면 코드가 명확하지 않아 읽기 어렵다.
서로 다른 추상화 단계에 있는 기능을 사용하면 직접 구현 패턴이 아니다. 함수가 모두 비슷한 계층에 있어야 직접 구현했다고 할 수 있다.
직접 구현 패턴으로 구현하면 같은 계층에 있는 함수는 같은 목적을 가져야 한다.
각 계층은 추상화 수준이 다르다. 한 계층의 함수는 더 낮은 수준의 내용을 알지 않아도 된다.
3단계 줌 레벨
1. 전역 줌 레벨
2. 계층 줌 레벨
3. 함수 줌 레벨
함수 줌 레벨을 사용하면 함수 하나가 가진 화살표를 비교할 수 있고, 직접 구현 패턴을 적용하면 해당 함수는 모두 같은 길이의 화살표를 가져야 한다. 화살표의 길이를 같게 만드는 일반적인 방법은 중간에 함수를 두는 것.
직접 구현한 코드는 한 단계의 구체화 수준에 관한 문제만 해결한다.
코드를 읽을 때 이해해야 하는 것이 많은데 구체화 단계가 다르다면 이해하기 더 어렵다.
함수를 추출하면 더 일반적인 함수를 만들 수 있다.
일반적인 함수가 많을수록 재사용하기 좋다.
복잡성을 감추지 않는다.
명확하지 않은 코드를 감추기 위해 '도우미 함수'를 만들 수 있지만, 이는 계층형 설계가 아니다. 복잡한 코드를 같은 계층으로 옮기면 안된다.
이거 읽고 찔렸는데 프로젝트 초기에 함수를 몽땅 분리하고 그걸 훅이라고 했었다. 지금 생각하면 단순하게 전체를 옮겨 놓고 코드를 감춘 것에 불과한 게 여기서 얘기한 내용 그대로였다.. 🙃
이번 챕터를 읽고 느낀 점은 처음부터 잘하자이다. 만들고 분리하는 과정을 거치면서 정교해지는 것도 좋은데, 설계를 머리에 두고 처음부터 코드를 작성하면 나중에 리팩터링의 수고도 줄어들고, 처음부터 코드를 완성해가는 작업도 더 수월할 것 같다. 생각만 하고 내가 지키지 못하는 것도 물론 많지만 ㅎㅎ..🙄
또 구체화 수준
이나 추상화 단계
등 공부를 하면서 많이 듣고 보았지만 뚜렷하게 개념을 잘 알지 못하는 용어도 많이 나와서 공부가 더 필요하다고 느꼈다. 대애~충 감은 있는데 남들에게 설명하라고 하면 못하겠는 용어들? 🤔
아직 챕터의 내용이 다 끝나지 않아 다음 챕터까지 공부해봐야겠지만 분리에 관해서 좋은 내용을 배운 챕터였다. 물론 바로 써먹긴 힘들것 같다 ㅎ