쏙쏙 들어오는 함수형 코딩 - (1) 액션, 계산, 데이터
2024.02.04
함수형 프로그래밍이란?
개발하다 보면 한 번쯤 함수형 프로그래밍이란 용어에 대해서 들어봤을 것이다. 과연 함수형 프로그래밍은 무엇일까?
먼저 인터넷에 등장하는 함수형 프로그래밍의 정의를 먼저 살펴보자.
수학 함수를 사용하고, 부수 효과를 피하는 것이 특징인 프로그래밍 패러다임. 부수 효과 없이 순수 함수만 사용하는 프로그래밍 스타일.
수학 함수, 부수 효과, 순수 함수라는 용어가 등장한다.
- 부수 효과 (side effect)
- 함수가 return하는 값 이외에 하는 모든 일
- 함수 호출 시 마다 발생하므로 문제 발생 가능
- 순수 함수 (pure function)
- 인자에만 의존하고 부수 효과가 없는 함수
- 같은 인자라면 항상 동일 결과를 반환
- == 수학함수. 수학에서의 함수와 동일하게 동작
정의에서 함수형 프로그래밍은 부수 효과를 매우 싫어하는 것을 느낄 수 있다. 그럼 함수형 프로그래밍은 순수함수만 사용하면 되는 것일까? 애초에, 실제 개발을 하면서 그게 가능할까?
함수형 프로그래밍의 오해
함수형 프로그래밍의 시초는 학문이다. (참고: 함수형 프로그래밍의 역사)
따라서 함수형 프로그래밍의 정의를 그대로 실제 소프트웨어 개발에 맞추기에는 오해가 있다.
1. 부수 효과는 필요하다.
정 의에서부터 부수 효과를 피해야 한다고 하지만, 우리가 소프트웨어를 개발하는 목적은 부수 효과를 발생시키기 위함이다. 개발을 시작하면서 Todo list를 만들었는데, 할 일을 추가하는 함수를 호출할 때마다 실제 UI에는 업데이트되지 않는다면 우리가 만든 Todo list, 소프트웨어는 아무 의미가 없다.
부수 효과를 피하는 게 아니라, 필요할 때 '잘' 써야 한다.
2. 함수형 프로그래밍은 부수 효과를 잘 다룰 수 있다.
부수 효과는 필요하다. 그런데 왜 이를 피하라고 했을까?
부수 효과는 위험하다. 순수하지 않은 함수는 실행될 때마다 어떤 일을 발생시킬지 예상하기 어렵기 때문에 문제가 될 수 있다. 함수형 프로그래밍은 이러한 위험을 잘 다루고자 하는 방법론이다.
3. 함수형 프로그래밍은 실용적이다.
함수형 프로그래밍의 정의는 수학적이다. 이로 인해 실제 소프트웨어 개발에서 사용하기에는 너무 이상적인 프로그래밍 방식이라고 생각될 수 있다. 하지만 함수형 프로그래밍을 학문적 지식이 아닌 기술로 바라봐보자. 분명히 함수형 프로그래밍으로 만들어진 좋은 소프트웨어가 많이 있다.
또한 함수형 프로그래밍의 아름다움은 어느 프로그래밍 언어에서든지, 코드 어디에서든지 적용할 수 있다는 점이다.
이제 함수형 프로그래밍에 대한 오해를 품으로써 실제 개발에 사용해 볼 만하다는 생각이 든다. 그럼 어떻게 사용할 수 있을까?