[개발 서적] 함수형 코딩 Grokking Simplicity - 1

박연주·2023년 12월 13일
0

개발 서적

목록 보기
1/3

12월 시작

  • 정순씨와 함께 책 읽기를 시작했다. 12월 안에 다 읽는 것을 목표로 기록해보려 한다.
  • 에릭 노드먼 지음/ 김은민 옮김


I. 데이터, 계산, 액션

ch 1. 함수형 코딩

함수형 프로그래밍

  • 수학 함수를 사용하고 부수효과를 피하는 것이 특징인 프로그래밍 패러다임

  • 부수 효과없이 순수 함수만 사용하는 프로그래밍 스타일

    -> 일반적인 정의는 위와 같지만 이 책에서는 부수효과는 필요하고 부수 효과를 잘 다루는 방법도 많이 있다고 설명하고 있다.



이 책의 함수형 사고, 함수형 프로그래밍

  • 함수를 다른 함수의 파라미터로 넘길 수도 있고 반환(return) 값으로 함수를 받을 수도 있는 프로그래밍 형태
  • 함수형 사고는 함수형 프로그래머가 소프트웨어 문제를 해결하기 위해 사용하는 기술과 생각을 말함
  • 함수형 프로그래밍에서 가장 중요한 것
    • 데이터, 계산, 액션의 구분
    • 일급 추상의 개념 (first-class abastraction)


ch 3. 데이터, 계산, 액션

데이터

  • 이벤트에 대한 사실 (이메일 주소, 이름)
  • 직렬화, 동일성 비교 가능, 자유로운 해석

계산

  • 순수 함수 pure function, 수학 함수 (더하거나 곱하기, 문자열 합치기)
  • 입력으로 출력을 계산
  • 호출 시점이나 횟수에 의존하지 않고 동일한 입력값으로 부르면 항상 같은 결괏값을 돌려줌
  • 테스트 용이, 조합하기 좋음

액션

  • 부수효과, 부수 효과가 있는 함수, 순수하지 않은 함수 impure function
  • 외부 세계에 영향을 주거나 받는 것을 말함 (이메일 보내기, ajax 요청 보내기)
  • 실행 시점과 횟수에 의존


ch 4. 액션에서 계산 빼내기

액션

  • 액션은 암묵적인 입력 또는 출력을 가지고 있음
  • 함수형 원칙을 적용하면 액션은 줄어들고 계산을 늘릴 수 있음

액션에서 계산 빼내기

  • 계산 코드를 찾아 빼내기
  • 새 함수에 암묵적 입력과 출력 찾아내기
  • 암묵적 입력은 인자로 암묵적 출력은 리턴값을 바꿈

예시



ch 5. 더 좋은 액션만들기

  • 카피 온 라이트를 구현해 더 좋은 액션 만들기

예시



ch.6,7 불변성 유지

카피 온 라이트 copy-on-write

  • 함수형 프로그래밍에서 불변 데이터가 필요하지만 계산에서는 변경 가능한 데이터에 쓰기를 할 수 없음
  • 카피-온-라이트는 데이트를 불변형으로 유지할 수 있는 원칙
  • 카피-온-라이트는 쓰기를 읽기로 바꿈 (복사본을 만들고(얕은 복사) 원본 대신 복사본을 변경)
  • 카피-온-라이트를 통해 불변성을 유지하며 값 변경 가능
  1. 복사본 만들기
  2. 복사본 변경하기
  3. 복사본 리턴하기의 세 단계

    얕은 복사

    • 바뀌지 않는 값이라면 원본과 복사본이 데이터를 공유함

예시

방어적 복사

  • 신뢰할 수 없는 코드를 사용하지만 불변성을 지키기 위해 사용
  • 데이터를 변경할 수도 있는 코드와 불변성 코드 사이에 데이터를 주고받기 위한 원칙
  1. 데이터가 안전한 코드에서 나갈 때 복사
  2. 안전한 코드로 데이터가 들어올 때 복사하기

    깊은 복사

    • 중첩된 모든 객체나 배열을 복사
    • 원본과 어떤 데이터 구조도 공유하지 않음
    • 카피온라이트를 구현할 수 없을 때에만 사용


ch.8, 9 계층형 설계






다음장에서 계속


Reference

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/assign - Object.assign()

profile
하루에 한 개념씩

0개의 댓글