brunch

You can make anything
by writing

C.S.Lewis

by 강관우 May 01. 2020

[읽고서] 어떤 프로그래밍 언어들이 함수형인가?

기술 블로그 글 리뷰

카카오 100일 프로젝트를 시작한 지 40일이 지났습니다!

100일 프로젝트는 매일 하고 싶었던 일은 100일 동안 꾸준히 하면서 인증을 하는 플랫폼인데요. 

저는 하루 한 개, 기술 아티클 읽기를 도전하고 있어요.

https://project100.kakao.com/project/2166/introduce

작심삼일이 삶의 모토인 저였기에 인증률 50%만 달성해도 선방이다 했는데, 하루 빼고 매일 인증에 성공했습니다! 40일 동안 거의 100% 인증에 성공하다니 아주 뿌듯했습니다. (하루 빼먹은 게 마음이 아프네요 ㅠ)


그런데 기계적으로 글감을 찾고, 읽고, 인증하면서 공유하다 보니 뭔가 아쉽더라고요. 기술 아티클은 10~15분이면 소비할 수 있는 가성비 좋은 글들이라 그런지 너무 가볍게 '읽기만' 하는 것 같았습니다. 책을 읽고 독후감을 남기듯, 영화를 보고 영화 리뷰를 남기듯 오래오래 콘텐츠를 기억하기 위해서 무언가 남겨야 하지 않을까? 싶었어요. 


그래서 이제부터는 기술 아티클을 읽고 정리하고 남기는 습관을 만들어보려고 합니다. 


[읽고서] 시리즈 첫 번째 주제! 함수형 프로그래밍입니다.


읽은 글: 어떤 프로그래밍 언어들이 함수형인가?

https://medium.com/@jooyunghan/%EC%96%B4%EB%96%A4-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%96%B8%EC%96%B4%EB%93%A4%EC%9D%B4-%ED%95%A8%EC%88%98%ED%98%95%EC%9D%B8%EA%B0%80-fec1e941c47f

작가: 한주영님, LG 전자에 재직 중이시고 저서로는 '개미 수열을 푸는 10가지 방법'이 있습니다.


함수형 프로그래밍은 순수 함수를 작성하는 것, 그러니까 숨겨진 입력이나 출력을 최대한 제거하여 가능한 우리 코드의 대부분이 단지 입력과 출력의 관계를 기술하게끔 하는 것을 말합니다. 여기서 순수 함수란 모든 입력이 입력으로 선언되고(숨겨진 것이 없어야 한다) 마찬가지로 모든 출력이 출력으로 선언된 함수를 말합니다. 사이드 이펙트는 순수함수가 아닌 함수가 만들어내는 결과이고요. 


그럼 함수형 프로그래밍 언어는 어떤 것들이 있을까!라는 궁금증에서 이 글을 봤습니다. 


이 글에서는 각 언어별 특징을 함수형 언어 관점에서 설명해주는데요. 우선, 함수형 프로그래밍 언어의 특징처럼 보이는 map, reduce나 람다함수가 있다고 함수형 프로그래밍 언어는 아니라고 합니다. 이것들은 순수 함수를 만들기 위한 도구 이거나 시퀀스 자료를 처리하는 과정에서 사이드 이펙트를 걷어내려고 만들어진 산물일 뿐이죠. 


자바스크립트는 this 등을 통해 순수 함수 법칙을 깨트리기 쉽기 때문에 함수형 언어가 아닙니다. 


자바는 사이드 이펙트를 클래스로 국소화 하는 것을 좋은 코드의 정석으로 보는 언어로 완전한 함수형 언어가 될 수 없다고 합니다. 


스칼라는 자바와 함수형 언어 사이의 점진적 이동을 도와주지만 완전한 함수형 언어는 아닙니다. 


클로저는 시간에 관한 함수형 프로그래밍 언어의 좋은 예라고 합니다! '시간에 관한' 이란 번역을 조금 더 매끄러운 표현으로 정리해보려고 했는데,,, 애매하네요. 변수에 담긴 값이 참조 투명성을 가진다 정도로 정리할 수 있을까요? ㅎㅎ 


하스켈은 함수형 프로그래밍 언어다!라고 말하는 것 같은데, 이 언어를 몰라서 특징을 말해줘도 이해는 못하겠습니다 ㅠ_ㅠ 바로 이어서 말하는 펄(Pearl)도 모르겠네요... 여하튼 둘은 함수형 언어에 가깝다고 합니다. 


파이썬은 자바와 비교하며 설명합니다. 자바에서 public String getName() { return this.name; } 형태 함수 시그니처는 this가 숨겨진 입력이므로 순수함수가 아니고 getName(Person this)를 넣어줘야 순수함수가 된다. 라고 하는데 파이썬은 self 파라미터를 통해서 명시적으로 강제하죠? 그래서 파이썬은 함수형 언어에 가깝다고 하네요. 


이 밖에도 몇 개의 언어를 설명하는데 요점은 파라미터가 없거나 반환 값이 void인 함수들은 내부적으로 숨겨진 입력이나 출력이 있을 가능성이 있기 때문에 사이드 이펙트를 발생시키는 디자인 냄새라고 합니다. 


이런 디자인 냄새를, 즉 사이드 이펙트 발생 가능성을 직관적으로 인식하는 것이 함수형 프로그래밍의 시작이다!라고 하네요. 


글을 읽으니 함수형 프로그래밍이 대세가 되는 이유를 조금은 알 것 같습니다. 이 글을 번역해주신 분이 쓰신 책 중에 '개미 수열을 푸는 10가지 방법' 이란 책이 유명하던데 한번 읽어봐야겠어요. 

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari