앞에서 기초적인 루아 함수의 개념을 정리했다면, 이번에는 그 양념을 한번 제대로 활용해 보는 것에 중점을 둔 정리를 한다. 

"루아 함수는 적당한 정적 범위 지정(lexical scoping) 기능을 가진 일등급(first class) 값" 이다. , 문자열이나 수치와 같은 동일한 권한을 가진 변수라는 것이다.

함수를 인수로 넘기거나, 함수를 태이블에 저장하거나 전역 변수에 저장하거나 다 가능하다는 뜻이기도 하다. 책에서는 이를 통해 루아의 막강하고 심플한 모습을 볼 수 있다고 하니까 꼭 짚고 넘어가려고 한다.

 

루아의 특징을 이용한다면, 당연하겠지만, 함수를 변수에 담아 둘 수가 있다. a = print 라고 하면 a("우하하하") 가 가능하다.  이 특징을 유심히 본다면, function foo( x ) return 2 * x end 에서 foo가 이 함수를 가리키는 변수 라는 것을 알 수 있을 것이다.  즉, foo 가 변수라면 function () end 가 바로 함수의 생성자이라는 것을 눈치 챌 수 있을 것이다.( 난 눈치 못챘다..)

 

function() end 를 함수의 생성자라고 하기도 하고, 익명 함수 라고 하기도 한다. 익명 함수는 경우에 따라 아주 유용하게 사용 될 수 있는데, 다음 예제 코드를 보도록 하자.

table.sort 는 테이블을 정렬하는 함수인데, 보면 알 수 있듯이, 테이블을 정렬하는 기준 함수를 인자로 전달하고 있다. 쉽고 간단하게 함수를 만들고자 할 때, 이 방법은 이처럼 아주 유용하게 쓰인다.  이것만 보고, 루아의 막강함을 느끼기엔 부족할 것이다. C 에선 이미 있는 기능이기 때문이다.

 

다음에 나올 막강하리 만큼 아름다운 루아의 고급 함수 활용편을 더 정리해보자.


관련링크

http://www.lua.org/pil/6.html


총평

루아의 함수를 변수로 봐야 한다는 것이 조금 생소하긴 했어도, C와 비슷한 점이 있다는 것에 위안을 삼는다. 왜냐하면 보기가 편하기 때문이다. 하지만, 다른 점이 더 많으니 착각하지 말아야 겠다. 루아에서 가장 신기한것은 아마도 테이블 이지 않을까 싶다. .. 동적 타입은 php 를 사용해본 나로써는 그다지 신기한것은 아니지만, 테이블은 참 오묘하다. 이 테이블에 함수를 넣어 두면 재미있을 것 같기도 하다. :)

posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요