어떻게 하면 안전하게 함수를 합성할 수 있을까?

함수형 프로그래밍에서 코드를 작성한다는 것은 프로그램에서 수행해야하는 여러가지 행위들을 함수로 표현하고, 또 그 함수들을 요리조리 잘 합성해가며 거대한 프로그램을 만들어나가는 패러다임이다.

결국 함수형 프로그래밍에서 함수를 합성하는 행위라는 것은 이 패러다임의 근간이 되는 개념이기 때문에 굉장히 큰 의미를 가질 수 밖에 없는데, 문제는 이렇게 함수를 합성하는 과정에서 크고 작은 현실적인 문제들이 빵빵 터진다는 것이다.

변하지 않는 상태를 유지하는 방법, 불변성(Immutable)

이번 포스팅에서는 순수 함수에 이어 함수형 프로그래밍에서 중요하게 여기는 개념인 불변성(Immutable)에 대한 이야기를 해보려고 한다.

사실 순수 함수를 설명하다보면 불변성에 대한 이야기가 꼭 한번은 나오게 되는데, 대부분 “상태를 변경하지 않는 것”이라는 짧은 정의로 설명하거나, 혹은 불변성을 해치는 행위들을 예시로 들고 이런 행위들을 금지 행위로 규정하며 설명을 진행하게된다.

수학에서 기원한 프로그래밍 패러다임, 순수 함수

이전에 작성했던 기존의 사고 방식을 깨부수는 함수형 사고 포스팅에 이어, 이번 포스팅에서는 함수형 프로그래밍이 지향하는 관점을 실제 프로그램에 구현하기 위해 알고 있어야하는 필수적인 개념 중 하나인 순수 함수(Pure functions)에 대한 이야기를 해볼까 한다.

기존의 사고 방식을 깨부수는 함수형 사고

최근 많은 언어들이 함수형 프로그래밍 패러다임을 도입하며, 이에 대한 개발자들의 관심 또한 나날히 높아지고 있다. 필자 또한 함수형 사고라는 책을 읽으면서 기존의 패러다임과 사뭇 다른 함수형 프로그래밍에 대해 많은 관심을 가지게 되었던 기억이 있다.

ACK AIMD Aamazon Web Service Agile Algorithm Array Asynchronous Atlassian Audio Average Backpropagation Blocking Burn Out CWND Commit Composition Congestion Control Data Driven Data structure Deep Learning ECN Error Control Essay Essay Tips Event Loop Express FIN Feedback Flow Control Freedom & Responsibility Functional Programming Functional Thinking Functor Git Go bacK N Good Programmer Gravity HTTP HTTP/2 HTTP3 Hash Table Heap Hoisting IP Immutable JavaScript JavaScript Audio API Jira MFS Machine Learning Memory leak Merge Merge and squash Monad Netflix Network NodeJS Non Blocking Notification API OOP Object Oriendted Programming PWA Paypal Progressive Web Application Prototype Pure Functions Question Question Driven Thinking Rebase Render Optimizing Reno Retrospective SEO SPA SSR SYN Selective Repeat Server Side Rendering Side Effects Single Page Application Sliding Window Slow Start Sort Algorithms Sound Engineering Stop and Wait Study Synchronous TCP TCP Handshake TCP 플래그 TDZ Tahoe Temporal Dead Zone Tutorial TypeScript UDP V8 Versioning Vue Web Web Push Webpack Writing memory-fs traceroute webpack dev middleware webpack dev server 개발서적 개발자 객체지향 프로그래밍 공동집필 공부 궤도 구현하기 글쓰기 나이퀴스트 난수생성알고리즘 네트워크 넷플릭스 논리학 논블록킹 누적평균 데이터 기반 의사결정 동기 딥러닝 렌더 최적화 머신러닝 메르센 트위스터 면접 명령형 프로그래밍 모나드 배열 성능 최적화 버전관리 번아웃 범주론 부트캠프 불변성 불안감 불안요소 마주보기 블록킹 비동기 비전공 개발자 사운드 엔지니어 사이드 이펙트 서버사이드 렌더링 선언형 프로그래밍 소프트웨어 개발 방법론 소프트웨어 장인 리뷰 소프트웨어 장인정신 수학 순수 함수 슬라이딩 윈도우 알고리즘 애자일 애자일 프로세스 에세이 역전파 알고리즘 오디오 이펙터 오류 제어 이벤트 루프 자료 구조 자료구조 자바스크립트 자유와 책임 정렬 알고리즘 조직문화 좋은 프로그래머 중력 중력 구현하기 질문 질문의 힘 철학 카테고리 이론 커피 한잔 마시며 끝내는 VueJS 컴퓨터 공학 컴퓨터공학 케플러 6요소 케플러 궤도 방정식 코딩테스트 코딩학원 타입스크립트 타입스크립트 인공 신경망 퇴사 튜토리얼 펑터 페이팔 평균구하기 프라하 프라하 생활 팁 프로그래밍 프로그래밍서적 프로토타입 프로페셔널 피드백 학습론 한 달살기 함수형 사고 함수형 프로그래밍 합성 함수 해시테이블 헤더 협업 호이스팅 혼잡 제어 회고 회고록 흐름 제어
ACK AIMD Aamazon Web Service Agile Algorithm Array Asynchronous Atlassian Audio Average Backpropagation Blocking Burn Out CWND Commit Composition Congestion Control Data Driven Data structure Deep Learning ECN Error Control Essay Essay Tips Event Loop Express FIN Feedback Flow Control Freedom & Responsibility Functional Programming Functional Thinking Functor Git Go bacK N Good Programmer Gravity HTTP HTTP/2 HTTP3 Hash Table Heap Hoisting IP Immutable JavaScript JavaScript Audio API Jira MFS Machine Learning Memory leak Merge Merge and squash Monad Netflix Network NodeJS Non Blocking Notification API OOP Object Oriendted Programming PWA Paypal Progressive Web Application Prototype Pure Functions Question Question Driven Thinking Rebase Render Optimizing Reno Retrospective SEO SPA SSR SYN Selective Repeat Server Side Rendering Side Effects Single Page Application Sliding Window Slow Start Sort Algorithms Sound Engineering Stop and Wait Study Synchronous TCP TCP Handshake TCP 플래그 TDZ Tahoe Temporal Dead Zone Tutorial TypeScript UDP V8 Versioning Vue Web Web Push Webpack Writing memory-fs traceroute webpack dev middleware webpack dev server 개발서적 개발자 객체지향 프로그래밍 공동집필 공부 궤도 구현하기 글쓰기 나이퀴스트 난수생성알고리즘 네트워크 넷플릭스 논리학 논블록킹 누적평균 데이터 기반 의사결정 동기 딥러닝 렌더 최적화 머신러닝 메르센 트위스터 면접 명령형 프로그래밍 모나드 배열 성능 최적화 버전관리 번아웃 범주론 부트캠프 불변성 불안감 불안요소 마주보기 블록킹 비동기 비전공 개발자 사운드 엔지니어 사이드 이펙트 서버사이드 렌더링 선언형 프로그래밍 소프트웨어 개발 방법론 소프트웨어 장인 리뷰 소프트웨어 장인정신 수학 순수 함수 슬라이딩 윈도우 알고리즘 애자일 애자일 프로세스 에세이 역전파 알고리즘 오디오 이펙터 오류 제어 이벤트 루프 자료 구조 자료구조 자바스크립트 자유와 책임 정렬 알고리즘 조직문화 좋은 프로그래머 중력 중력 구현하기 질문 질문의 힘 철학 카테고리 이론 커피 한잔 마시며 끝내는 VueJS 컴퓨터 공학 컴퓨터공학 케플러 6요소 케플러 궤도 방정식 코딩테스트 코딩학원 타입스크립트 타입스크립트 인공 신경망 퇴사 튜토리얼 펑터 페이팔 평균구하기 프라하 프라하 생활 팁 프로그래밍 프로그래밍서적 프로토타입 프로페셔널 피드백 학습론 한 달살기 함수형 사고 함수형 프로그래밍 합성 함수 해시테이블 헤더 협업 호이스팅 혼잡 제어 회고 회고록 흐름 제어
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×