경험담인데..


클래스라는 개념 자체를 위한 지저분한 보일러 코드들이 많아지고

서비스 코드를 이해하기 위해서 상속관계 같은 더러운 맥락을 이해해야 할 일이 너무 많이 생긴다면,

+ 여기에 개발 언어가 함수형 패러다임을 지원한다면

클래스를 고차원 함수로 짜볼 수는 없을까 생각해보는 것도 좋은 것 같아


난 루아를 업무상 많이 쓰는 프로그래머인데, 

루아는 클래스, 함수형 패러다임 둘다 지원하거든.

루아는 string.gsub() 이나 table.sort() 같이 내장 라이브러리에서 대놓고 고차원 함수를 쓰도록 해줘.


클래스로 짜면 너무 보일러 코드들이 많고 상속 관계가 더러워지는 코드,

일차원으로 짜면 절대 줄어들지 않는 비슷비슷한 함수들(특히 for문이 많이 들어가는 코드들)이

함수형으로 다시 짜니까 간결해지는 경험을 많이 했어.

특히 내가 코딩을 직접 하고있는게 아니라, 어떤 코드를 리턴하는 함수를 호출해서 코드를 얻는 방식으로, 자동으로 코드를 '찍어 내는' 경험은 무지 재밌어.


누가 누구를 상속하고 서로 관계가 어떻고 이런 걸 나열하는 코드가 다 장식적인 코드잖아.

함수형은 그냥 코드 자체에 빡 집중하면 되는 듯한 느낌이 있더라고.

아 근데 객체지향으로 짜여진 기존 코드랑은 융합이 잘 안되더라. 아무리 머리를 굴려 봐도 클래스 위주의 코드와 잘 안섞이는 느낌은 있었음


나는 고차원 함수와 클로저라는 용어가 있다.. 라는 걸 안 이후부터 그걸 이해하기까지 일년 넘게 걸렸는데,

개인적으로는 마법사 책에 나오는, 시그마를 어떻게 하나의 함수로 표현할 수 있을까 에 대한 예제가

고차원 함수에 대한 가장 명료한 예제 같더라. 뭐 아직도 모나드같은 개념이나 lisp 코드 해석은 잘 못하겠지만..


근데 개발 언어가 함수형 패러다임을 지원한다면 꼭 배우길 추천해.

개인적으로 야근을 엄청 줄여줬고, 짜는 재미가 있음