카테고리 없음

쏙쏙 들어오는 함수형 코딩 vol.1 (Chapter 1 ~ 5)

곽빵 2023. 8. 13. 12:56

개요

쏙쏙 들어오는 함수형 코딩책을 읽고 학습한 내용 정리하기

 

CHAPTER 1. 쏙쏙 들어오는 함수형 코딩에 오신 것을 환영합니다.

 

요점 정리

  • 함수형 사고는 함수형 프로그래밍의 기술과 개념을 말한다. -> 학문적인 관점에서의 함수형 사고를 바라보는게 아니고 이 책에서 만큼은 함수형 사고를 실용할 수 있게끔 기술과 개념의 관점에서 설명한다.
  • 함수형 프로그래머는 코드를 액션과 계산, 데이터로 나눠서 바라본다. -> 액션이란 시점(시간)과 횟수에 의존하는 코드, 계산은 입력값으로 출력값을 만드는 것, 데이터는 말 그대로 데이터이다.

결론

함수형 프로그래밍에 대한 지식은 방대하다. 하지만 이 책에서 말하듯이 함수형 프로그래밍의 가장 중요한 두가지는 액션과 계산 그리고 데이터를 구분하는 것과 일급 추상이라는 개념이다. 구체적으로 무엇을 알아야 함수형 프로그래밍을 실용적으로 적용할 수 있을지를 이 책에서는 설명해 주고 있음으로써 조금 더 함수형 프로그래밍에 가까워 질 수 있을꺼 같다.

 

여담이지만, 리액트의 useEffect라는 훅에 대해 공부를 했을 때 useEffect는 부수효과(sideEffect)를 다룰때 사용된다. 라고 배웠었다. 리액트라는 생태계에서는 함수형 프로그래밍의 액션이라는 개념을 이런식으로 관리하고 있구나~ 라는 생각이 들었다.

https://heewon26.tistory.com/440

 

React vol.6 (useEffect)

개요 React JS 를 공부하면서 기본을 정리해두고자 작성 React의 effect? side effect? 이 의미를 정의하기 전에 우리가 생각하는 React의 "주 업무"는 무엇일까? 바로 화면에 우리가 만든 UI를 렌더링하고

heewon26.tistory.com

 

CHAPTER 2. 현실에서의 함수형 사고

 

요점 정리

  • 액션과 계산 데이터를 구분하는 이유는 쉽게 다룰 수 있는 부분과 조심히 다뤄야 할 부분을 명확하게 하기 위해서이다. 그리고 이 세가지를 구분짓는 것이 핵심
  • 함수형 프로그래머는 유지보수를 잘 하기 위해 밑의 이미지와 같은 계층형 설계를 사용한다. 각 계층은 변경 가능성에 따라 나눈다.
  • 조심히 다뤄야 할 액션을 잘 다루기 위해 타임라인 다이어그램과 같은 방법으로 액션을 시각화해서 다른 액션과 어떻게 연결되는명확히 파악할 수 있다.
  • 분산 시스템에서 각각의 타임라인들이 상호 협력하기 위해서 타임라인 컷팅을 통해 일정 단계까지 진행하고 그 뒤에 단계는 같은 단계의 타임라인들이 모두 끝나지 않으면 진행하지 않는다는 타임라인 컷팅이라는 기술도 있다.

결론

함수형 프로그래밍이 실제로 어떻게 활용될 수 있고 문제점에 도달 했을 때 문제를 어떻게 해결하는지도 살펴볼 수 있는 챕터였다. 하지만 이건 함수형 프로그래밍에 해당되는 이야기라기 보다는 어떤 프로그래밍에도 해당할 수 있는 내용이라 생각된다. 타임라인 다이어그램과 같은 경우는 시퀀스 다이어그램이나 다른 다이어그램들과도 비슷하다고 볼 수도 있고 계층형 설계도 도메인주도 개발에서 등장하기도 하고 물론 변경빈도를 기준으로 나누는건 처음 봤다. 이 책을 볼때 뭔가 함수형이라는 단어에 옭매이지 말고 그냥 앞으로의 내 개발 방향성을 개선할 수 있는 관점에서 책을 읽어도 좋을꺼 같다는 생각이든다.

 

CHAPTER 3. 액션과 계산 데이터의 차이를 알기

 

요점정리

  • 하나의 액션안에는 여러가지의 계산과 데이터가 존재할 수 있다. 그걸 가능한 한 나누는게 좋다. 왜냐하면 계산과 데이터는 예측하기 쉽고 또 테스트하기 쉽기 때문이다. (하지만 나누는것도 적당히 해야한다고 한다. 개발하기 쉽다고 생각될 정도 까지만 나누면 된다)
  • 액션은 실행시점과 횟수에 의존하며 외부의 영향을 받는다.
  • 계산은 실행시점과 횟수에 의존하지 않으며 입력값이 똑같으면 똑같은 출력값을 만든다. 흔히들 이를 순수함수라고들 부른다.
  • 데이터는 이벤트에 대한 사실이다. 사실은 변하지 않기 때문에 영구적으로 기록할 수 있다.
  • 함수형 프로그래머는 액션보다 계산이 좋고 계산보다 데이터를 좋아한다.

결론

계산은 계획이나 결정을 할 때 적용했고 데이터는 계획하거나 결정한 결과였다. 마지막으로 액션을 통해 계산으로 만든 계획을 실행함으로써 성공적으로 액션에서 계산과 데이터를 나눌수 있게 된다. 코드를 짧게 적는게 절대 좋은 코드가 아니라는 말이 생각난다. 함수형 프로그래밍으로 하나의 액션에서 여러가지의 데이터와 계산을 나눠서 구성해서 조금 더 긴 코드가 되지만, 더 안정적이며 변동이 잦은 액션과 분리함으로써 유지보수, 테스트하기에도 용이해진다. 

 

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

 

요점정리

  • 액션이 되는 요소로 암묵적인 출력과 암묵적인 입력이 있다. 이 요소가 하나라도 있으면 그건 액션이다.
    • 암묵적인 출력은 전역변수의 변경, DOM의 변경등 외부요소를 변경하는 것이 암묵적인 출력이다.
    • 암묵적인 입력은 전역변수 참조, DOM요소의 참조등 외부요소를 참조하는 것이 암묵적인 입력이다.
  • 암묵적인 입력과 출력은 함수의 인자와 리턴값으로 충분히 변경할 수 있다.

결론

암묵적인 입려과 출력이 무언인지 대해 알게 되었고 액션이라는 요소에서 계산을 추출해 내는 과정에 대해 경험할 수 있게 되었던 챕터였다. 이때까지 막연하게 이건 안좋은 코드야 라고 생각이 들었던 부분들이 꽤 액션과 공통점이 많다는 걸 느낀다.

 

CHAPTER 5. 더 좋은 액션 만들기

 

요점정리

  • 함수의 인자 이외의 외부 값을 읽어들이는 건 암묵적 입력, 리턴값 이외의 외부의 값을 바꾸는건 암묵적 출력 이들을 각각 인자와 리턴값으로 바꿔 없애는 것이 좋다
  • 설계는 엉켜있는 것을 푸는 것이다. 풀려있는 것은 언제든 다시 합칠 수 있다 -> 관심사에 따라 코드를 나누는 이야기에서 나왔다. 하나의 목적을 달성하기 위해 하나의 함수안에 있던 여러가지 기능을 한번에 도맡아 하던 코드들을 비지니스 규칙이나 도메인에 따라 하나의 일만 하게 나눈다. 그리고 다시 조합해서 원래의 목적을 달성하게끔 한다. 이런게 설계인가보다.

결론

관심사의 분리 = 설계