프로그래밍 Currying
코딩하는 건축가. 그래 난 코딩도 한다고 써놨지. 오늘은 코딩얘기를 해본다. 사실 오늘부터 한동안 가끔씩 코딩얘기가 나올 예정이다.
이전에도 얘기한 것 같지만, 프로그래밍을 하기 위해서는 언어 말고 개념을 알아야 한다. 그런 걱정과 고민 끝에 알게 된 수업이 University of Washington(이하 UW)에서 예전에 나온 Programming이라는 수업이다. 내 특유의 사대주의에 따라, UW은 미국 내 탑티어 컴퓨터 학교 중 하나(아마 3위 정도)이기 때문에 수업을 듣기로 했다. 인트로가 길었으니 공부한 내용을 조금 써본다
이 수업에서 다루는 언어의 특징인지 모르겠지만 기능은 하나의 argument만 받는다고 한다. 그게 무슨 뚱딴지같은 소리냐고 할지 모르겠지만 코드 예시로 보면 이렇다. 가령 두 숫자를 합하는 sum이라는 함수가 있다고 하자. 그러면 sum의 argument와 합쳐져 일반적으로 sum(x, y) 이런 식으로 쓸 것이다. 이 강의에선 이와 같이 (x, y) 식으로 들어가는 것은 하나의 tuple이며 그런 이유로 기능은 하나의 argument만 받는다고 했다.
위 단락이 쉽게 공감은 가지 않긴 한다. 그냥 tuple형태로 넣어도 될 것 같은데. 아무튼 수업의 요지는 tuple 형태보다는 currying을 통한 방식이 좀 더 편한다고 한다. 위의 sum을 다시 예로 들면 sum(x, y)가 아니라 sum x y의 형태가 되는 것이다. 근데 여기에서 argument로 받을 수 있는 것이 단순히 특정 데이터 타입이 아니라 기능까지 된다는 것이다. python을 예로 들면 lambda function과 유사한 것으로 보면 된다. 좀 더 직접적으로는 list에 filter, map 등을 하는 방식 뒤에 있는 개념이라고 볼 수 있다.
이 부분을 유려하게 설명하기가 조금 어렵다. 즉 내가 잘 모른다는 뜻이다. python을 하다 보면 decorator라는 개념이 나온다. 그게 반복되는 기능을 @functionName 이런 식으로 붙여서 특정 기능이 시작되고 끝날 때 사용되도록 할 수 있다. 어떤 코드들을 보면 "~~ 기능을 시작합니다.", "~~ 기능을 종료합니다."라는 내용이 매번 등작하는 것을 볼 수 있는데 이때 쓰이는 것이 decorator다.
Decorator와 Currying은 분명 차이가 있긴 할 텐데 내가 100% 적지는 못한다...
멀고 먼 코딩의 길. 그래도 계속하며...