본문 바로가기

3.구현/Lua

2. Lua 함수에 대해서

함수는 프로그램 모듈화에 가장 기본적인 기능이며 함수를 얼마나 잘 쪼개어 함수를 선언하느냐에 따라서 프로그램 성능에서 확장성까지 영향을 미친다. 루아에서 함수는 간단하고 쉽게 사용할 수 있으면 유연한 구조로 되어 있어서 좋다.

작성자: Ospace (ospace114@empal.com) http://ospace.tistory.com

2. Lua 함수에 대해서

함수는 구조는 다음과 같다. function이라는 단어가 함수라고 선언을 하고 다음에 함수명이 온다. 그리고 괄호가 와서 함수임을 표시하고 인자를 묶는다. 함수 종결은 end라는 단어에 의해서 끝마친다.

function 함수명(인자1, 등등)
  명령어들...
end

실제 사용예를 보도록 한다.

<ex_09.lua>

-- (1) 일반 함수 형식
function hello1()
  print ("Hello!")
end

-- (2) 함수 변수에 저장
hello2 = function()
  print ("Goodday!")
end

-- (3) 인자 한개 사용
function hello3(name)
  print ("Hello!, " .. name)
end

hello1()
hello2()
hello3("World~")

<결과>

Hello!  
Goodday!  
Hello!, World~  

(1) 함수: 일반 함수 호출 형태로 인자 없이 바로 호출한다.
(2) 함수: 함수를 선언하고 hello2라는 변수에 넣는다. C언어에서는 함수 포인터 정도로 인지하면 된다. Lua에서는 단순 변수에 저장하고 호출시 괄호를 붙이면 자동으로 함수가 호출된다.
(3) 함수: 인자가 1개인 함수 호출이다. 물론 인자가 2개 이상도 가능하다.

전역변수와 지역변수

함수를 다룰때 빠지지 않은 단골 메뉴가 전역변수와 지역변수이다. 말그대로 전역변수는 세계적으로 노는 것이고 전세계에서 다아는 이름이다. 그러나 지역변수는 지역에서 노는 것이고 그 지역에서는 다 아는데, 다른 전세계에서는 전혀 알지를 못하는 놈이다.

한번 예제를 살펴보자.

<ex_10.lua>

-- (1) 지역 변수 선언
function square1(a)
  local c = a * a
  return c
end

-- (2) 전역 변수 사용
function square2(a)
  c = a * a
  return c
end

c = 2
a = square1(10)
print(a, c)
b = square2(5)
print(b, c)

<결과>

100 2  
25 25  

코드를 살펴보기 전에 전역변수 c가 이미 2로 초기화 되어 있다. 이렇게 그냥 변수를 선언하는 형태가 전역변수의 전형적인 모습이다.

(1) 함수: local이라는 단어가 오는데 지역이라는 의미로서 해당 변수가 지역 변수로 선언한다. 해당 변수 c는 지역 내에서만 유효하다. 결과가 10 입력에 변수 a에 100이 리턴되므로 맞는 값이다. 그리고 전역변수 c는 2가 출력되어 이상이 없다.
(2) 함수: 인자 5가 입력되어 제곱이된 25가 리턴이 되어 값이 이상이 없지만, 전역변수 c값이 이상하게 변했다. 즉 square2()함수 내에서 local 키워드 없이 사용한 것이 전역 변수에 영향을 미치게 하였다.

다중 리턴

Lua 함수에서 재미 있는게 다중 리턴이 있다. 리턴 값이 여러 개 가능하다. 바로 예제를 보자.

<ex_10-1.lua>

-- 다중 리턴
function square(a)
  local c = a * a
  return c, "square"
end

a, b = square(10)
print(a, b)

<결과>

100 square  

이정도로 해서 함수를 살펴보았다.

이외에 테이블과 같이 사용해서 객체지향 효과 비슷하게 사용하거나, 가변인자를 사용하는 등, 여러가지 용법이 있다. 이부분도 나중에 좀더 깊이 들어갈때 살펴보다록 하겠다. 아직 필자의 이해 수준도 거기까지는 미치지 못했다. ^^;

참조

[1]http://www.lua.org
[2]http://www.redloop.com/larsde/articles/lua.php
[3]http://www.redwiki.net/wiki/wiki.php/LUA%20%C6%A9%C5%E4%B8%AE%BE%F3
[4]http://www.devmaster.net/articles/lua/lua1.php

반응형

'3.구현 > Lua' 카테고리의 다른 글

4. Lua의 조건문 반복문  (0) 2008.01.21
3. Lua의 각종 연산자들  (0) 2007.07.23
루아의 BNF  (0) 2007.07.19
1. 루아 스크립트 기초  (0) 2007.07.19
Lua 시작하기  (0) 2007.07.13