루아(Lua)를 배우면서 느낀 점

1 minute read

nil

Lua답게 쓴다는 것은 무엇인가? Programming in Lua를 보면서 계속 머릿속에 맴돌았던 생각이다. 문법만을 익히는 건 언어를 배우는 게 아니다. 사실 이러면 1년에 새로운 언어 한 개를 배우는 것쯤이야 아무 일도 아니다. 하지만 그렇게 간단한 일이 아니지.

언어를 배우는 것이란? 바로 언어 설계자 철학을 이해하는 게 언어를 배우는 것이라 할 수 있다. 하지만 철학이란 말이 들어갔잖아. 이러면 헷갈리고 아리송해진다. 그래서 내 나름대로 좀 더 쉽게 풀이해본다. 나는 두 가지를 배우는 것이라 생각한다. 첫 번째는 언어가 지원하는 메인 패러다임을 익히는 것이고 두 번째는 언어 설계자가 공들인 기능을 이해하고 적극 활용하는 것이다.

루아는 멀티 패러다임 프로그래밍 언어이다. 메인은 scripting. wikipedia를 보니 scripting, imperative (procedural, prototype-based object-oriented), functional로 나열을 했다. 아 조낸 많아. 그래도 다 익숙한 패러다임이다. functional 빼고는. 왜 이게 붙었지? 그래서 찾아보니 Lua에서 function이 first class object라서 그렇구나. 이 개념은 함수형 언어에서 가져온 것이기 때문이다.

iterator factory, closure를 적극 사용했다. coroutine은 아직 익숙하지 않아서 사용하는데 애먹었다. 좀 억지로 사용도 해봤으나 아직도 익숙하지 않아.

table이란 자료구조 단 하나만 지원한다. 최대한 단순하게 만들고 싶은 상황에서 table이란 자료구조를 지원하는 건 꽤나 현명한 선택. 게다가 metatable과 metamethod라는 기능과 같이 사용해 OOP 패러다임도 지원할 수 있게 했다. 이렇게 가장 융통성이 있는 자료구조를 지원해 다른 패러다임으로도 구현할 수 있는 물줄기를 튼 것도 인상적이다.

nil

공부는 Programming in Lua 책과 아꿈사에서 프로그래밍 클로저를 공부할 때, 알게 된 project euler 문제를 풀면서 했다. 새로운 언어를 익히는 데 이만한 사이트가 따로 없는 것 같다. github를 사용 안 해봤다면 github에 풀이를 올리면서 접해보는 것도 추천.

PS: +=, -=, *=, /= 가 정말 편한 연산자였구나. 없으니 정말 불편하네.