1일차 1-13 page요약함수형 프로그래밍은 코드를 액션, 계산, 데이터로 구분하며, 일급 추상이라는 개념을 통해 코드를 재사용하고자 하는 목표로 한다.기존의 코드를 액션, 계산, 데이터로 잘 구분할 수 있다면 MSA에 적용할 수 있는 부분들이 많다. 발췌함수형 프로
요약함수형 코딩의 1차 목표인 액션 계산 데이터를 나누는 것을 이야기한다.해결하고자 하는 문제를 간략히 나누다 보면 온통 액션으로 이루어져 있다(그렇게 보인다)실제로는 액션안에는 계산과 데이터를 분리 해낼 요소들이 굉장히 많고 끝없이 분리 할 수 있다. 책에서는 분리를
요약액션을 쪼개는 내용을 다룬다. db에서 값을 읽는 행위는 액션, 거기서 나온 자료는 데이터로 구분한다. 데이터를 조합해서 새로운 데이터를 만드는 것이 계산이다. 계산의 정의는 실행 시점에 상관없이 같은 입력에 대해서는 항상 같은 결과를 리턴하는 것인데 변하지 않는
요약팝업, 콘솔, 공유변수 조작 등은 액션으로 간주된다.액션은 가능한 작게 만들어야 하고 액션과 관련 없는 코드는 모두 제거해야 한다. 결정이나 계획 관련된 부분은 계산으로 분리 할 수 있다. 액션에서 계산을 분리할때는 지켜야할 것들이 있다.명시적인 입력과, 명시적인
!요약 액션을 계산으로 바꾸기 서브루틴 추출하기 : 동작을 유지하며 코드를 바꾸는 것 (지역변수를 입력으로 받고 지역변수를 리턴한다) 함수 추출하기 : 쇼핑카트.push() 보다는 쇼핑카트를 명확한 객체로 설정하고 쇼핑카드.addItem()로 작성하여 명확한 의미를
암묵적 입출력을 줄여 설계를 개선한다.함수의 동작을 바꿨기 때문에 엄밀히 말하면 리팩터링이라고 할 수 없다.복사본을 사용하여 변수를 조작하는게 잃는것보다 얻는게 많다. 코드가 느리면 나중에 최적화 하면된다. 섣부른 최적화는 하지 않는다.계산에서도 암묵적 입출력을 줄였다

요약설계는 엉켜있는 코드를 푸는 것이다.크고 복잡한것이 더 잘만들어졌다고 느낄 수 있지만 오히려 잘 분리하는 방법을 찾는게 더 어렵다.비즈니스 로직이 녹아 있는 함수와 파라미터의 이름보다 일반적인 이름을 사용한다.그리고 비즈니스 로직은 그 일반적인 함수들을 감싸서 만든
함수형코딩 106-115요약불변형데이터로 만드는 것 복사하기변경하기리턴하기기존의 값을 변경시키지 않았기 때문에 영향을 주지 않았기 때문에 액션이 아니고 계산이 되는 것이다.함수형코딩 116-129요약결과를 반환하는 것이 읽기 작업이다.기본컬렉션 함수중에는 읽기와 쓰기를
변경 가능한 데이터를 읽는 것은 액션이다. 변경 가능하다는 것은 읽는 시점에 원하는 데이터가 아닐 수 있기 때문에 함수의 순수성을 해치고 함수의 동작을 예측 가능하기 어렵게 만든다.불변 데이터를 읽는 것은 계산이다. 예측 가능하다.불변 데이터 구조는 변경 가능한 데이터
함수형코딩151-161방어적 복사 규칙들어오고 나갈때 딥카피api는 json으로 통신하는데 json은 딥카피다. (방어적복사=비공유아키텍처)통제할 수 있는 데이터를 바꿀 때 카피온 라이트 (얕은 복사)신뢰 할 수 없는 코드와 데이터를 주고 받아야 할 때 (깊은 복사)j
함수형코딩 172~185 패턴 1 : 직접 구현마케팅 캠페인 관련 함수가 장바구니가 배열이라는 것을 알아야 할까요?저수준의 코드는 추출해야한다. 한 함수에서 서로 다른 추상화 단계를 사용하면 코드가 명확해지지 않는다.서로 다른 함수가 같은 박스를 가르킨다는 건 같은
함수형코딩 186~200같은 계층에 있는 함수는 같은 목적을 가져야 하고, 두 단계 이상의 계층을 넘어서면 안된다.함수가 가르키는 화살표의 길이(계층 이동 단계)를 비교하는 것은 복잡성을 측정하는데 좋은 방법이다. 호출 그래프를 통해 설계를 개선할 수 있는 것을 찾을
함수형코딩 211-220추가적인 비즈니스 로직은 추상화벽 위에 있는 계층에 구현하면 된다추상화 벽에 코드가 많을 수록 구현이 변경될때 수정 할 게 많다추상화벽은 낮은 수준의 코드, 버그가 많을 수도 있다.낮은 추상화 수준은 이해하기 어렵다.추상화벽에 코드가 많을 수록
함수형코딩 233~252 수, 목 분량사용되는 변수의 형태를 함수이름에 직접적으로 명시하면 그건 냄새나는 코드유사한 형태가 반복된다.이런 냄새나는 코드를 바꿀 수 있는 두가지 방법이 있다.암묵적인 인자 드러내기 함수 본문을 콜백으로 바꾸기암묵적인 인자 드러내기setP
함수형 코딩 253 - 266반복문안에 있는 본문은 항상 달라서 매번 반복문을 만들었는데 고차 함수를 이용해서 반복문에서 다른 부분만 함수로 넘겨주면 된다.= 함수 본문을 콜백으로 만들기왜 본문을 함수로 감싸서 넣나? -> 안그러면 함수를 호출할때 먼저 실행 되어 버린
25일차고차 함수는 다음과 같은 특징과 목적을 갖는다.함수를 반환하는 함수.반복적인 코드를 제거한다.기본틀<287p>고차 함수로 프로그램을 만들면 더 일반적으로 만들 수 있다.마치 복잡한 퍼즐을 푸는것 같고 똑똑해지는 느낌을 받지만 좋은 엔지니어링은 퍼즐을 푸는
함수형코딩 289~302 26일차 요약 함묵적인자는 명시하고 본문(달라지는구현)은 콜백으로 바꾸기 map : 새로운 함수를 리턴하는 카피온라이트로 구현된다. filter : map + 조건문, 조건문에 부합하는 element만 반환된다. 함수를 전달하는 3가지 방
함수형코딩 303-314 27일차요약Reduce는 사전적 의미로는 줄이다이다. 배열의 요소들을 조건에 따라서 하나의 값으로 합치는 기능을 수행한다.그래서 배열 요소들의 총 합 등과 같은 연산이 가능한 것이다.초기값을 무조건 정해줘야한다. 다만 JS에서는 초기값을 지정하
함수형코딩 315~326 28일차요약체이닝 : 체인처럼 엮어 복합적인 계산을 표현한다.비즈니스 로직 : 우수고객을 뽑은 다음 -> 가장 비싼 구매를 가져온다.체이닝의 목적은 코드의 가독성을 높이고, 중복을 줄이며, 비즈니스 로직을 간결하고 명확하게 표현하는 것이다.발췌
함수형코딩 327~336 29일차요약가진 것: 전체고객 배열필요한 것 : 1번이상 구매한 고객들의 이메일 목록and조건은 filter 2번 사용하면 됨.앞으로 반복문은 map, filter, reduce를 사용해서 해결하자.배열 일부에서만 동작 시키려면 해당하는 배열을
체이닝 팁데이터만들기 : 함수형 도구는 배열 전체를 다룰 때 잘 동작한다. 특정 배열중 일부를 다룰 때는 그 일부를 다른 배열로 생성해야 한다.배열 전체 다루기 : map, filter, reduce로 배열을 처리한다.작은 단계로 나누기 : 알고리즘이 한번에 많은 일을
함수형코딩 359~383 (32,33일차)객체 업데이트 하기배열과 같은 방법으로 조회, 변경, 반환 순으로 작업한다.중첩된 Object의 경우 조회1-조회2-변경-설정2-설정1 순서로 작업한다.조회1-조회2-변경-설정2-설정1 해당 부분에서조회1-조회2-변경-설정2-설
여러 타임 라인이 존재하는 함수 호출을 단순화 해본다. 자바스크립트는 단일스레드 방식이기 때문에 2개의 타임라인을 하나로 합쳐서 생각 할 수 있다. 두 타임라인을 동시에 실행하는데 공유하는 자원이 있다면 문제가 생긴다. 공유 자원을 명시적인 인자로 사용하는 함수로
안전하게 자원을 공유하는 방법2가지의 비동기작업을 한 뒤 최종적으로 각각 공유 자원을 변경하는 경우 순서가 꼬이면 비즈니스 로직상에 문제가 생긴다.좋은 타임라인은 다음과 같은 원칙을 가진다.1\. 타임라인은 적을수록 이해하기 좋다.2\. 타임라인은 짧을수록 이해하기 좋
DOM같은 공유 자원을 사용 할 때 순서의 문제가 생길 수 있다.시퀀스다이어그램을 통해 순서를 명확히 파악하자. 파악하지 못하는 것이 문제가 된다.동시성 기본형 : 타임라인을 조율하기 위해 사용한다.액션 확인하기 액션을 그리기단순화하기 : 하나의 타임라인에 있는 액션은
함수형코딩 481-490 42일차의도한 순서로 비즈니스 로직을 수행하기 위해서는 동시성을 만족시켜야한다.비동기적으로 시행되는 여러개의 로직이 있을경우 다음단계로 넘어가기전에 모든 병렬처리를 기다려야한다.function calcCartTotal { var total =

502~523명시적 시간모델동시성 상황에서 의도하지 않은 순서로 로직이 실행되는 것을 막기 위한 방법1\. Queue : 큐에 추가된 항목은 독립적으로 하나의 타임라인에서 실행된다. 2\. Cut : 모든 타임라인이 완료되면 콜백을 불러 새로운 타임라인을 시작한다.3\
함수형코딩 524~544 46, 47일차인터렉션 계층 : 바깥 세상에 영향을 주거나 받는 액션도메인 계층 : 비즈니스 규칙을 정의 하는 계산언어 계층 : 언어 유틸리티와 라이브러리액션에서 계산을 빼내면 의도하지 않아도 어니언 아키텍처 구조가 된다.전통적인 계층형 아키텍
함수형코딩 545-556사이드 프로젝트로 신기술이 익숙해지면 그때 실제 프로젝트에 적용한다 바로 실행해볼 수 있는 방법변경가능한 전역변수를 하나씩 줄인다타임라인을 하나씩 줄인다액션에서 계산을 뺀다암묵적 입출력을 명시적으로 바꾼다반복문을 foreach map filter