경험담인데..
클래스라는 개념 자체를 위한 지저분한 보일러 코드들이 많아지고
서비스 코드를 이해하기 위해서 상속관계 같은 더러운 맥락을 이해해야 할 일이 너무 많이 생긴다면,
+ 여기에 개발 언어가 함수형 패러다임을 지원한다면
클래스를 고차원 함수로 짜볼 수는 없을까 생각해보는 것도 좋은 것 같아
난 루아를 업무상 많이 쓰는 프로그래머인데,
루아는 클래스, 함수형 패러다임 둘다 지원하거든.
루아는 string.gsub() 이나 table.sort() 같이 내장 라이브러리에서 대놓고 고차원 함수를 쓰도록 해줘.
클래스로 짜면 너무 보일러 코드들이 많고 상속 관계가 더러워지는 코드,
일차원으로 짜면 절대 줄어들지 않는 비슷비슷한 함수들(특히 for문이 많이 들어가는 코드들)이
함수형으로 다시 짜니까 간결해지는 경험을 많이 했어.
특히 내가 코딩을 직접 하고있는게 아니라, 어떤 코드를 리턴하는 함수를 호출해서 코드를 얻는 방식으로, 자동으로 코드를 '찍어 내는' 경험은 무지 재밌어.
누가 누구를 상속하고 서로 관계가 어떻고 이런 걸 나열하는 코드가 다 장식적인 코드잖아.
함수형은 그냥 코드 자체에 빡 집중하면 되는 듯한 느낌이 있더라고.
아 근데 객체지향으로 짜여진 기존 코드랑은 융합이 잘 안되더라. 아무리 머리를 굴려 봐도 클래스 위주의 코드와 잘 안섞이는 느낌은 있었음
나는 고차원 함수와 클로저라는 용어가 있다.. 라는 걸 안 이후부터 그걸 이해하기까지 일년 넘게 걸렸는데,
개인적으로는 마법사 책에 나오는, 시그마를 어떻게 하나의 함수로 표현할 수 있을까 에 대한 예제가
고차원 함수에 대한 가장 명료한 예제 같더라. 뭐 아직도 모나드같은 개념이나 lisp 코드 해석은 잘 못하겠지만..
근데 개발 언어가 함수형 패러다임을 지원한다면 꼭 배우길 추천해.
개인적으로 야근을 엄청 줄여줬고, 짜는 재미가 있음
옹
함수를 불러온다는게 런타임에 불러온다는거야 아님 컴파일때 불러온다는거야??
런타임에 불러오고, 서비스가 시작되기 이전에 불러낸 함수들이 메모리에 떠있도록 하고, 서비스 중에는 떠있는 함수를 쓰고
코드 자체가 런타임중에 붙는다는게 신기하네 내부적으론 이미 컴파일되서 메모리에 적제되있고 그 메모리공간포인터에 현제함수변수들이 접근하는 그런구조인거임?
돼 재
짜여진->짜인
음 루아는 인터프리터 언어라. 그리고 어떻게 함수를 찍어낼 수 있는지, 내부 원리는 나도 아직 자세히 몰라.
내부적으로 루아 머신이 클로저 스택같은걸 갖고 있고, 클로저 코드를 만날때마다 거기다 값을 넣고 관리하는걸로 보이는데..아직 모름요.
http://www.lua.org/doc/jucs05.pdf
에 5절 내용.
월드오브워크레프트도 이걸로만들었다는게 신기 나중에 시간나면 함봐볼께 좋은정보 ㄳ
함수형언어 찬양자가 늘고있군. 좋은현상이야!