본문 바로가기
개발/그 외

객체지향과 함수형에 대한 짦은 생각

by 꾸루루 2020. 4. 28.

(초짜 프로그래머로써 하는 주관적 경험에 의한 이야기라는 것을 알아두시고 생각이 얕더라도 너무 노여워하지 마시길)

 

난 대학생때부터 함수형 프로그래밍의 추종자였다.

 

c, c++, java 밖에 배운적이 없던 내가 프론트엔드 개발자로가 전향하고자 한 이유가, 그 당시 병아리던 내가 아는 선에서 함수형 프로그래밍이 가능하고 일자리가 많은게 javascript 언어 였기 때문이다. (clojure 언어를 독학했으나 그 당시 일자리가...)

 

실제로 처음 회사로 자바스크립터로 가서 나름 기초적인 함수형 프로그래밍적 기법을 사용하여 일 한적도 많고 심지어 타입스크립트를 공부한 것도 함수형 프로그래밍적 기법을 더 안정적으로 사용하기 위함이였다. (여기서 의아해하는 사람이 있을 수 있지만 아직도 난 타입스크립트를 사용하면 함수형 프로그래밍을 할때 얻는 이득이 객체지향적 프로그래밍을 얻는 이득보다 더 크다고 생각한다)

 

그리고 얼마 전에도 함수형 프로그래밍 붐이 일기도 했고...  실제로도 함수형 프로그래밍 기법은 익혀두면 굉장히 유용하다.

 

하지만 최근 느끼는건... 그렇다고 객체지향 프로그래밍과 함수형 프로그래밍간에 서로간에 우월성은 없다는 것이다.

 

흔히 코드를 줄인다는 다양한 예시들을 보았고 그로 인해 함수형 프로그래밍이 우월하다. 라는 식의 글들을 많이 보았는데 코드가 많고 적음보다... 더 좋은 기준은 더 명확하고 직관적이냐, 그렇지 않냐 인 것 같다. 

 

객체지향 프로그래밍에선 객체 중심적으로 특성을 묶고 더 서술하기 좋은 형태라 명확하고, 함수형 프로그래밍에서는 액션을 주체로 사용하니 어떤 일을 하는지 더 알기 쉽다.

 

함수형은 객체지향적 언어보다 시간에 따른 생산성이 훨신 높고, 높은 추상화의 액션을 구체화시키는 것은 그 어디에서나 사용될 수 있는 것이기에 그 자체로 불변의 자산이 된다. 

 

절차지향 - 객체지향의 관계처럼 열등 - 우월(그렇지만 이것도 케이스마다 다를 수 있다)이 아니라고 생각하는 이유는 함수형보다 객체지향이 잘 어울리는 곳이 굉장히 많기 때문이며, 잘 짜여진 객체지향은 아주 명확하기 때문에 새로이 쉽게 적응할 수 있다. 사물을 관념화하고 액션을 주체로 생각하는 함수형 프로그래밍은  늘 사물 중심으로 생각하는 일방적인 사고와는 궤를 달리하기 때문에 상대적으로 이해하기가 힘들어지곤 한다. (Monad, Functor, Maybe, Applicative... 등은 그 실체는 단순하지만 추상적인 내용들이라.. 이해하기가 힘들었다.)

 

그렇기에 함수형 프로그래밍이 붐처럼 일어났음에도 불구하고 생각보다 아직 안 와닿는게 있다.

 

하지만 점점 이러한 고민은 줄어들 것이다.

 

두 가지가 마치 대립되는 것처럼 보임에도 불구하고 빠르게 융합되고 있기 때문이다. 최근 Kotlin 등의 모던 언어들을 보면 함수형 프로그래밍적 개념이 굉장히 많이 들어가 있으며, 그러면서도 객체지향의 특성과 잘 버무려져가고 있기 때문이다.

 

Facebook에서 함수형 언어인 Ocaml 기반으로 한창 새롭게 만들고 있는 Reason(https://reasonml.github.io/en/)도 보면 함수형 언어의 비중이 더 높긴 하지만 객체지향의 다양한 개념들이 섞여 들어가 있다.

 

마치 현대의 자본주의 국가들이 공산주의의 좋은 면만 골라 받아들여 복지국가적인 성향을 띄듯이 두 진영도 그렇게 되어가고 있다.

 

만약 지금 보는 이가 함수형 혹은 객체지향적 프로그램의 추종자라면, 반대쪽 진형을 진지하게 한번쯤 공부해보는 것을 추천한다.

 

두 가지를 다 익히면 두 가지 개념을 충분히 입맛에 따라 섞어 쓸 수 있고 각각의 장점을 잘 살릴 수 있다.

 

 스스로 요즘 DDD를 공부하며 조금씩 다르게 보이는 것을 체감하고 있다.. 

'개발 > 그 외' 카테고리의 다른 글

maui test  (0) 2021.07.15
언어와 라이브러리, 프레임워크  (0) 2021.06.07
객체지향-1  (0) 2020.07.04
Custom hook factory  (0) 2020.03.25