Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- 에릭 노먼드
- 리엑트를 다루는 기술
- 흥달쌤
- 쏙쏙 들어오는 함수형코딩
- 고등애플
- 출처 : 코딩애플
- 쏙쏙들어오는함수형코딩
- 오종택개발자님
- 로버트 C마틴
- 자바스크립트 딥다이브
- 출처 : https://www.boostcourse.org/
- 쏙쏙 들어오는 함수형 코딩
- 나는 flux좋아...
- https://product.kyobobook.co.kr/detail/S000001952246
- 출처 : 자바스크립트 딥다이브
- 클린코드다시읽기
- 출처 : 한입크기로 잘라먹는 타입스크립트
- 에릭 노이먼
- 에릭노이먼
- 큰돌의 CS책
- 갈길이 멀구나
- 유틸리티타입은 공식문서 자주 보자
- 김영한쌤
- 출처 : 코딩앙마
- 이웅모
- 출처는 코딩애플
- 쏙속 들어오는 함수형코딩
- 생코님Redux
- 출처는 코딩앙마
- 함수형 코딩
Archives
- Today
- Total
흰둥씨의 개발장
[함수형 코딩#8 ~ #9] 계층형 설계 본문
계층형 설계 : 소프트웨어를 계층으로 구성하는 기술 => 추상화
//계층형 설계 <계층 layer>
getsFreeShopping(); cartTax(); //비즈니스 규칙
\ |
removeItem(); calcTotal(); addItem(); setPrice(); // 장바구니를 위한 동작들
| / |
remove_items(); add_item(); | //카피온 라이트
| / |
.slice(); --------------------------| //언어를 지원하는 배열관련기능
계층형 설계감각을 키우기 위한 입력 단서
함수본문 | 계층구조 | 함수시그니처 |
길이 | 화살표 길이 | 함수명 |
복잡성 | 응집도 | 인자이름 |
구체화 단계 | 구체화 단계 | 인자값 |
함수 호출 | 리턴값 | |
프로그래밍 언어의 기능 사용 |
계층형 설계 감각을 키우기 위한 출력
조직화 | 구현 | 변경 |
새로운 함수를 어디에 둘지 | 구현 바꾸기 | 새 코드 작성할 곳 선택하기 |
함수를 다른곳으로 이동 | 함수 추출하기 | 적절한 수준의 구체화 단계 결정하기 |
데이터 구조 바꾸기 |
계층형 설계 패턴
패턴 1 ) 직접 구현 핵심은 추상화 레벨을 동일하게 설계해야 한다. - 같은 계층에 있는 함수는 같은 목적을 가지도록 설계하자 - 같은 계층에 있는 함수는 실질적인 기능이 동일하도록 설계하자 - 함수가 하는 일을 명확히 해서, 동작을 세분화 하자 (계층별로 함수를 정의할 때, 중복된 코드를 일반적인 함수로 빼서 재 사용하기) - 호출하는 화살표가 같은 길이를 가지도록 설계하자 (계층을 넘나들지 않도록, 같은 추상화 단계에서는 저수준의 로직은 고려x) - 줌레벨* 활용해서 계층형 설계의 문제점**을 찾기 |
*줌레벨 1. 전역 줌 레벨 (계층사이의 상호관계살펴보기) 2. 계층 줌 레벨 (특정 계층의 구현 살펴보기) 3. 함수 줌 레벨 (특정 함수의 구현 살펴보기) **계층형 설계의 문제점 1. 계층사이의 상호관계에서 발생 2. 특정 계층의 구현 3. 특정 함수의 구현 |
패턴 2 ) 추상화 벽(abstraction barrier) 세부구현 내용까지 생각하지 않고도, 비즈니스 로직을 설계할 수 있도록! - 계층 사이 벽을 두고, 벽 아래로는 동작에 대한 세부구현 함수를, 벽위의 함수는 동작의 개념만을 가져가도록 설계 - 세부구현 로직을 신경쓰지 않고, 빠르게 설계 가능 - 쉽게 구현하기 위해, 가독성편하게, 다른 팀과 조율할 것을 줄이기 위해, 주어진 문제에 집중하기 위해 - 코드 의존성 없앨 수 있음 (벽위에 있는 함수와 벽아래 있는 함수끼리) |
|
패턴 3 ) 작은 인터페이스 (minimal interface) 새로운 코드(기능)를 추가할 때는 최대한 기존 함수를 활용할수 있는 방향으로 가자 - 위치를 잘 못 잡으면 불필요한 것들이 생길 수 있음 - 기존에 만들어둔 함수들을 잘 이용하는 것이 곧 작은 인터페이스를 실현하는 것 |
|
패턴 4 ) 편리한 계층(comfortable layer) 위 패턴 1~3까지는 모두 실용적이어야만 가치있다. - 언제나 패턴을 적용하는 것은 불가능함 - 비용과 효율사이에서 접점을 찾아보기(이미 편리한 코드를 고칠 필요는 없다) - 코드가 지저분할 때는 패턴을 적용해보자 |
기능적 요구사항 : 소프트웨어가 정확히 해야 하는 일 ex) 더하기 함수는 더하기를 잘해야 함 등등...
비기능적 요구사항 : 기능적 요구사항 외의 요구사항 ex) 더하기함수 실행시 걸리는 시간, 보안, 등등...
ㄴ> 유지보수성 (maintainability) : 요구사항이 바뀌었을 때 쉽게 고칠 수 있는 코드는 어떤 코드인가?
=> 최상위 모듈 , 최상위 함수는 호출되지 않아 고치기 쉬움 (즉, 바뀔 일이 많은 가장 높은 코드는 상위에 있을수록, 적을수록 좋음)
ㄴ> 테스트성 (testability) : 어떤 것을 테스트 하는 것이 가장 중요한가?
=> 최하위 모듈, 최하위 함수를 테스트 하는 것이 좋음 (특히 상위와 많이 연결된 하위 함수를 많이 테스트하자)
ㄴ> 재사용성 (reusability) : 어떤 함수가 재사용하기 좋나?
=> 낮은 수준 단계의 함수일수록 재사용성이 높다 (낮은 수준 단계로 함수를 빼낼 수록 재사용하기 좋아짐)
'함수형 프로그래밍 > 쏙쏙 들어오는 함수형 코딩' 카테고리의 다른 글
[함수형 코딩#12~#13] 함수형 반복 / 체이닝 (0) | 2023.07.09 |
---|---|
[함수형 코딩#10~#11] 일급함수 (0) | 2023.07.07 |
[함수형 코딩#1~#6] 느낀점 (0) | 2023.07.02 |
[함수형 코딩#6] 변경가능한 데이터 구조를 가진 언어에서 불변성 유지하기 (0) | 2023.07.01 |
[함수형 코딩#5] 더 좋은 액션 만들기 (0) | 2023.06.29 |