C JS 러스트 파이썬 자바

가 내가 배운 언어고

하스켈이 최근에 배운 언어다.


하스켈은 다르다.

앞 다섯 언어는 하스켈과 비교한다면 서로서로 거의 유사하다.


객체지향은 절차지향의 불편함을 발전시킨 철학이라고 생각한다.
다른말로는, 절차지향으로 코드를 짜더라도 객체지향적 사고를 해야한다.



객체지향을 배우면서,
"함수형이 있대. 함수형이 더 발전된거래"라는 수근거림을 듣곤 햔다.


객체지향을 하면서도 또다시 철학적업그레이드가 이뤄진건가?
그러면 함수형 철학을 배워서 업그레이드하고,
객체지향의 철학에 함수형철학을 얹어야하나?



이에 대한 내 답변은 NO다.

함수형은 객체지향의 발전형이 아니다.

절차지향과 객체지향은 뿌리가 같지만,

함수형은 뿌리가 다르다.

C에서부터 파생된 언어가 아니라는 뜻이다.

함수형은 독자적으로 발전했고, 독자적인 기법을 쓴다.




마치, C 문화권이 서양이라면,
함수형은 동양이다.


객체지향이 최근에 함수형을 차용하는건, 동양의 문물을 가져가서 쓰는것 뿐, 철학, 근본은 여전히 객체지향이다.



그러면 무엇이 그 뿌리의 차이점인가.

{ 차이점 }

1. 함수형은 데이터타입을 Table(struct 혹은 class) 이 아닌, Sum 과 Product, 재귀로 선언한다.

이는 데이터를 바라보는 관점의 차이이다.
Product가 곧 struct아니냐 할 수 있는데, Sum과 재귀는 크나 큰 차이이다.
객체지향이 객체라는 단어를 쓰는 시점에서 이부분은 차이가 난다.
함수형에서 데이터타입은 알고리즘과 닮는다. 따라서 이부분에서 알고리즘을 바라보는 자세도 차이가 난다.

2. 함수형은 공간에서 데이터를 읽고, 쓰지 않는다. 변수가 없다.

변수가 불변인게 아니다. 불변은 함수형을 객체지향으로 변환할때 오역하게 되는 것이고
실상 함수형은 변수가 없다. 함수형은 표현식에 이름을 붙인다.
공간에 데이터를 집어넣는게 아니라, 미해결된 표현식을 미해결상태로 alias 붙인다.

3. 함수형은 연산을 단 한번만 진행한다.

함수형은 여러연산을 하고싶을 경우, 연산을 체이닝한다.
이 말을 단순하게 서술하자면, 하스켈은 모나드의 bind를 통해 연산을 엮는다.
즉 함수형은 자바의 stream이 선택이 아닌 필수다.
함수형은 모든 연산이 스트림으로 진행된다.





이 세가지 차이점은, 객체지향의 발전 사항이 아니다.
대규모 코드처리, 다형성 처럼 무언가 추가되고 발전된 개념이 아닌,


아예 별개의 것이고 기존의 객체지향과 우열을 가릴 수 없다.


단지, 함수형이 자신의 문제를 해결하기 위해 채용한 테크닉들을
객체지향에 맞게 로컬라이즈시켜서 객체지향 언어들이 가져갔을 뿐이다.


저 세가지 차이점은 또한 객체지향과 함수형이 양립불가능하다는걸 의미하기도 한다.



정말 함수형을 공부하고 싶은 사람은,

앞의 저 세가지 차이점에 주목하고,

"아니 그러면 C로 하던걸 함수형은 어떻게 해?" 를 해결해보길 바란다.

답은 모나드다.








ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

여기까지가 2023 4월 29일까지의 딱국생각.

하지만 내가 써놓고도 틀린점이 있다는걸 안다.


1. 함수형을 하스켈과 동일시 여기고 있음

리습은 함수형의시초격이지만 데이터타입이 없으므로 재귀적 데이터타입은 함수형을 나타내는 성질이 아닐수도 있다.

2. 스칼라는 객체지향과 함수형의 통합을 이루어냈다고 주장함.

그래서 나는 고의적으로 스칼라를 함수형공부의 최후방에 두었음.
사람들은 나보고 객지에 익숙한 스칼라로 입문하라고 했지만, 나는 그건 아예 잘못된 접근법이라고 생각.


내가 함수형을 공부하기로 마음먹은 이유는,
모든언어가 지네들이 함수형이라고 주장하는데 내 눈엔 전부 객체지향으로 보였기 때문임.
그러면 함수형의 퓨어한 구현체인 하스켈 너또한 객체지향이냐? 를 보고싶었음.
하스켈은 아예 뿌리부터가 달랐음.

스칼라를 접근할때 객체지향적으로 접근한다는것은.
스칼라를 그냥 코틀린처럼 쓰겠다는건데 난 그러기 싫었음.

난 스칼라를 1대 1  동등하게,
자바와 하스켈의 완벽한 중재자로 쓰고 싶음.

아니, 현재로선 그게 가능한 것인지를 의문품고있음.

솔직히 스칼라도 객체지향일까봐 두려움.

뭐 까봐야알겠지.

만약 스칼라가 두 철학을 융합했다?

오우 쉣 그럼 난 스칼라 정말 사랑할것임



긴글 읽어주셔서 감사합니다.