함수형 프로그래밍(FP)의 컨셉

Yuno·2023년 5월 11일
1
post-thumbnail

🐯 머릿말

함수형 프로그래밍을 책이나 영상으로 접하면,
무슨말이지 싶다가, 막연히 몇몇 기능만 배우게 되곤 합니다.
이런 분들에게 조금이나마 도움이 되었으면 좋겠습니다.

프로그래밍 언어를 처음 접할 때,
대부분 가장 유명하고 많이 쓴다는 언어들로 학습하곤 합니다.

제가 처음 배울 때 접한 언어들은 C, JAVA, Javascript 입니다.
C를 배우며 코드 절차 제어에 대해 배웠고,
JAVA와 Javascript를 배우며 객체지향에 대해 배웠습니다.

이러한 절차지향, 객체지향 컨셉들은
프로그램을 설계하고, 의도대로 작성하는데 큰 도움을 주었습니다.

함수형 프로그래밍이란

함수형 프로그래밍도 이들과 같은 프로그래밍 패러다임 입니다.
유래없던 혁신적 프로그래밍을 위한 엄청난 비급이라기 보다

다른 패러다임이 각각의 특장점이 있고, 적합한 쓰임이 있듯
함수형 프로그래밍도 그들과 같은 패러다임중 하나입니다.
또한, 프로그래밍에 새로운 시각을 부여해 줄것입니다.

유래없던 비급이 아닌게, 실제로 함수형 프로그래밍 언어의 대표격인
하스켈(Haskell)은 무려 33년전인 1990년에 발표되었습니다.
함수형 언어로 자주 언급되는 클로저(clojure)엘릭서(Elixir)
역시 10년 이상 이전에 발표되었습니다.

즉, 이전 프로그래밍의 모든 단점을 개선한 혁신적인 프로그래밍 방법이 아닌 장단이 존재하는 패러다임중 하나입니다.

함수형 프로그래밍의 특징과 컨셉

저는 2년차 웹 프론트엔드 개발자라, 주로 Javascript를 통해 개발합니다.
Javascript의 함수형 프로그래밍 컨셉을 적용한 코드의 직관성을 보고나서,
공부를 시작하게 되었습니다.

제가 생각하는 함수형 프로그래밍의 장점은 다음과 같습니다.

  • 실제 동작과 일치하는 순차적인 코드로 작성할 수 있습니다.
    1. 코드의 가독성을 향상시킵니다.
  • 가장 작은 단위부터 조합하여 원하는 결과물을 개발할 수 있습니다.
    1. 테스트 단위가 명확하여, 작은 기능 단위로 테스트 할 수 있습니다.
    2. 기존 단위가 정확히 동작하면, 기능 확장에 확신이 생깁니다.

작은 단위를 조합하고, 최종 코드의 우아함을 보며
프로그래밍의 재미를 느끼는, 무엇보다 매력적인 장점을 가지고있습니다.

객체지향 VS 함수형

간단한 예시를 보며 함수형 프로그래밍이 무엇인지 이해해봅시다.

  • 객체지향
arr.map(v => v*v)
  • 함수형
map(arr, v => v*v)

두 코드는 같은 동작을 합니다.

  • 위처럼 arr이라는 객체에서 메서드를 활용해 결과물을 만들어 내는것을 객체지향
  • 아래처럼 map이라는 함수에 적합한 데이터를 제공하여 결과물을 만드는게 함수형 프로그래밍입니다.

똑같은 동작에 아주 간단한 차이지만,
언급한 것 처럼 패러다임 즉, 개발 컨셉에 대한 차이입니다. 이게 전부입니다.

컨셉 - 일급

일급이라는 것은 값으로 사용할 수 있다는 뜻입니다.

보통 값이라 하면, number, string, boolean과 같은 원시 타입을 떠올리며,
객체도 함수의 인자나, 리턴값으로 사용합니다.

함수도 다른것들 처럼,
값으로써 함수의 인자가 되거나, 함수의 리턴값이 될 수 있음을 의미합니다.

이런 함수를 일급함수라고 하며,
이를 통해, 함수를 변수에 담고 원하는 시점에 평가 하도록 할 수 있습니다.

컨셉 - 순수함수

순수함수는 다음과 같은 특징을 가집니다.

  • 같은 인자에 대해 항상 같은 값을 반환합니다.
  • Side Effect를 만들지 않습니다.

같은 인자에 대해 항상 같은 값을 반환합니다. 이런 특징을 통해, 함수를 일급으로 다루며, 언제 어디서든 평가할수 있도록 합니다.

Side Effect를 만들지 않습니다 Side Effect란 외부 환경에 영향을 주는것을 말합니다.
언제 어디서 몇번이든 사용될 수 있는 함수이기 때문에, 일관성을 해치는 SideEffect를 만들지 않아야합니다.

Side Effect를 만들지 않습니다는 결국 인자반환값필수임을 뜻합니다.

  • 외부에 영향을 주는 SideEffect도 없고,
  • 주어진 인자에 대해 결과값을 제공도 하지 않는다면

함수로써 존재 의미가 없습니다.


앞으로 이러한 일급, 순수함수라는 특징을 활용하여
동작흐름에 맞게 작성하고, 원하는 시점에 평가하는 코드를 살펴볼 것입니다.

마치며

FP는 패러다임으로, 차이는 단순히 컨셉이 다르다는 것과
어떤 특징(규정)을 활용해 함수형으로 개발하는지 알아보았습니다.

다음에는, 실제로 함수형으로 작성한 작은 단위의 함수들과
어떻게 조합하여 원하는 결과를 만드는지 소개하도록 하겠습니다.

profile
web frontend developer

0개의 댓글