함수형 프로그래밍 스터디 회고

고광필·2023년 2월 20일
0

스터디

목록 보기
1/1

스터디 소개

2022.12.01 목 ~ 2023.02.16 목 기간동안 테오와 파랑이 진행하는 함수형 프로그래밍 스터디에 참가했습니다

책은 쏙쏙 들어오는 함수형 코딩 을 사용했습니다

스터디는 크게 책의 내용을 위주로 한 1부 함수형 프로그래밍 이해와 따로 준비해주신 2부 실습으로 진행되었습니다

스터디를 참가하면서 배운 함수형 프로그래밍에 대한 내용과 느낀점, 이후에 공부할 내용을 기록합니다

스터디 1부 함수형 프로그래밍이란

배경

프로그래밍은 프로그램이 갖고 있는 데이터를 변경하면서 어떻게 동작해야할지를 다루는것입니다

이때 데이터 변경에 따라 버그가 생길수도 있는데 확인하기 위한 방법으로는 테스트 코드 작성과 정확하게 내가 원할때만 원하는 데이터를 변경하는 방법이 있습니다

함수형 프로그래밍은 데이터 변화를 수학적으로 계산처럼 취급해서 데이터를 변화시키는것과 아닌것을 분리하자는 프로그래밍 철학입니다

이 철학은 외부에 미치는 영향을 줄이고, 테스트가 쉽다는 점에서 지지하는 사람들이 늘어나게 됩니다

액션 / 계산 / 데이터

함수형 프로그래밍에서는 코드를 액션 / 계산 / 데이터로 분류합니다

액션은 실행 시점과 횟수에 의존합니다 (비동기, 이벤트 등)
계산은 순수함수라고도 하며, 입력에 따라 출력을 계산합니다
데이터는 이벤트에 대한 사실로 전역 값을 뜻한다고 볼 수 있습니다

이 중에서도 계산이 차지하는 비중을 늘려 테스트가 용이한 코드를 작성해야 합니다
왜일까요?

순수함수

순수함수는 외부에 영향이 없고, 같은 입력에 따라 항상 같은 결과를 반환합니다
순수함수와 순수함수를 합친 함수도 순수함수가 됩니다

계산이 차지하는 비중을 늘려야하는 이유가 바로 이것입니다
순수함수를 늘리면 외부에 영향이 없고, 테스트가 쉬운 코드를 작성할 수 있습니다

그런데 계산을 어떻게 늘릴 수 있을까요?

명시적 입출력

당연히 코드에는 액션에 해당하는 부분이 많습니다
그 중에서도 계산에 해당하는 부분을 분리해야 합니다

이 때 외부에 영향을 주면 안되기 때문에 함수의 입출력을 명확하게 명시해줍니다
사용하는 변수를 무조건 인자로 받고, 항상 결과를 반환해야 합니다

불변성

변수가 변하지 않도록 하는것을 불변성 또는 불변성을 지킨다라고 합니다
순수함수가 외부에 영향을 주지 않기 위해서는 불변성을 지켜야 합니다

불변성을 지키기 위한 방법으로 방어적 복사 방법이 있습니다
책에서는 Object.assign()을 사용하지만, spread 문법을 사용해서 동일하게 방어적 복사를 해서 불변성을 지킬 수 있습니다

스터디 2부 이런 내용이 있었지만 미완성

2부는 1부에서 배운 함수형 프로그래밍을 돌아보며 실습을 진행했습니다

  • 나만의 map, forEach, reduce 만들기
  • + unique, groupby 만들기
  • + 나만의 유틸함수를 배포하기
  • iterator와 jenerator
  • promise 구현해보기
    ...

2부에서 실습한 내용은 많았지만, 1부 내용만으로도 머리에 벅차 대부분은 과제도 마무리하지 못했습니다

하지만 나만의 유틸함수만큼은 꼭 만들어서 배포해보고 싶어서 추후에 진행하겠습니다

package.json에 feel-util만 있으면 좀 멋있을것같네요

회고

프론트엔드에게 함수형 프로그래밍이 중요한 이유

  1. 태생적으로 Js는 함수형 프로그래밍적으로 설계되었습니다
    함수가 1급 객체로 다뤄지고 있는 점
    배열의 map, filter 메소드, Promis then, addEventListener 등 자주 사용되는 핵심 API의 형태가 함수를 인자로 받아 사용되는 형태이기 때문입니다

  2. 프론트엔드는 사용자의 상호작용 액션에 맞게 요청을 보내거나 데이터를 가공해서 화면에 보여줍니다
    이런 단방향의 흐름이 프론트엔드에서 반복되기 때문에 함수형 프로그래밍 사고가 필요하고 유용하다
    + 이런 단방향 흐름으로 상태를 관리하는것을 flux 패턴이라고 하고, 리덕스가 이런 방법을 사용합니다

느낀 점

10월에 다시 취업을 하면서 다른 개발자들은 어떻게 공부를 하고 있는지, 어떤 생각들을 하며 사는지 궁금하던 차에 스터디에 참가하게 되었습니다

스터디에서 가장 만족스러웠던 점은 테오와 파랑이 준비해준 강의와 질의응답이었습니다
스터디의 경우 함께 공부를 하는 입장이다보니 이 길이 맞나? 싶은 순간들이 있었는데
이번 스터디에서는 테오와 파랑의 도움으로 정도를 찾을 수 있었습니다

함수형 프로그래밍이라는 한 패러다임이 왜 생겼고
개발자에게, 특히 프론트엔드 개발자에게 왜 중요한지를 학습하고 느낄 수 있었습니다

실무에서 아직 함수형 프로그래밍을 적용하고 있지는 않지만
유저의 상호작용 액션 - 기존 데이터를 이러이러하게 변경 - 변경된 화면 노출이라는 큰 파이프 흐름을 생각하는데 도움이 되었습니다

특히 쉬는시간에도 함수형 프로그래밍 관련이 아니더라도 프론트엔드 생태계나 개발 관련 얘기를 나눠주신 파랑님께 정말 감사했습니다

앞으로 할 일

2부에서 실습하고 과제로도 주어졌지만 완료하지 못한것들을 시도해봐야겠습니다
특히 나만의 유틸함수 만들기부터요

사실 책을 아직 다 못읽었습니다
스터디가 오히려 책의 선행학습이었는데요
따로 책을 완독하면서 스터디 내용을 떠올려 복습해야겠습니다

profile
이해하는 개발자를 희망하는 고광필입니다.

0개의 댓글