함수형 프로그래밍? 이게 뭘까
출처: toss tech
함수형 프로그래밍에 대해서 알고는 있었지만 위의 토스 테크에 올라온 “함수형 프로그래밍, 프론트엔드 개발에 도움될까?” 라는 영상을 보고 흥미를 느껴 블로그 글로 정리해보게 되었습니다.
함수형 프로그래밍이란?
함수형 프로그래밍(Functional Programming)은 프로그래밍 패러다임 중 하나입니다.
순수 함수와 불변성을 강조하며 프로그램의 상태 변경을 최소화하는 것을 목표로 합니다.
함수형 프로그래밍의 특징
- 순수 함수 : 순수 함수는 동일한 입력에 대해 항상 동일한 출력을 반환하며, 외부 상태에 영향을 주지 않습니다. 이로 인해 함수의 결과를 예측하기 쉬워지고, 테스트와 디버깅이 용이해집니다.
- 불변성 : 데이터의 상태를 변경하는 대신, 변경된 새로운 데이터를 생성합니다. 이를 통해 상태 변경으로 인한 버그 발생 가능성을 줄일 수 있습니다.
- 고차 함수 : 고차 함수는 함수를 인자로 받거나 함수를 반환할 수 있는 함수입니다. 이를 통해 코드를 더 간결하게 작성할 수 있고, 중복을 줄이며 재사용성을 높일 수 있습니다.
- 커링(Currying) : 커링 여러 개의 인자를 가진 함수를 하나의 인자를 받는 함수로 변환하는 기법입니다.
함수형 프로그래밍은 복잡한 상태 관리와 부작용을 최소화하고, 모듈화와 재사용성을 높이는데 도움이 됩니다.
자바스크립트에서 함수형 프로그래밍 적용하기
- let 보다 가급적 const 사용하기
함수형 프로그래밍은 불변성의 유지로 부터 시작하기 때문에 코드를 작성할 때 let의 사용을 줄이고 const로 개발하는 습관을 가져야합니다.
- Array, Date의 Mutation Method를 가급적 사용하지 말기
push, pop, shift, sort, reverse 등 객체를 변하는 Method를 가급적 spread operator로 대체하거나 값을 복사해서 사용해야합니다.
- 가급적 Object의 필드에 대입 연산자 사용하지 않기
- ‘가급적’이라는 의미를 잘 생각해서 값을 변경할 때에는 항상 scope에 대해 생각하며 코딩하기
제가 적은 방안대로 let, Array push를 쓰지 않고 Object의 값을 변경할 때 항상 복사를 하지 않아도 됩니다.
- pure function과 effect를 확실하게 구분해서 작성하기
const와 spread operator를 통해서 불변성을 지키는듯 보이는 코드들 안에 부수효과를 유발하는 코드가 있다면 pure하지 않습니다.
- 그래도 요구사항대로 구현해서 코드가 작동하는게 우선이다!
javascript는 멀티 패러다임 언어이기 때문에 함수형을 사용하던 객체지향으로 개발하던 일단 잘 돌아간다면 괜찮습니다. 언젠가는 각 영역의 좋은 점만 찾아서 영리하게 잘 이용할 수 있을 것 같습니다.
마치며
끝으로 드리고 싶은 말은, 저는 객체지향이 좋다, 함수형이 좋다, 그냥 취향차이이다 라는게 아닌 javascript의 특성에 맞는 객체지향의 장점, 함수형 프로그래밍의 장점을 골라 자신의 것으로 만들어서 잘 사용하는게 좋다고 생각합니다.