summaryrefslogtreecommitdiffhomepage
path: root/ko-kr/lua-kr.html.markdown
diff options
context:
space:
mode:
Diffstat (limited to 'ko-kr/lua-kr.html.markdown')
-rw-r--r--ko-kr/lua-kr.html.markdown382
1 files changed, 191 insertions, 191 deletions
diff --git a/ko-kr/lua-kr.html.markdown b/ko-kr/lua-kr.html.markdown
index 50458f88..3f6223d6 100644
--- a/ko-kr/lua-kr.html.markdown
+++ b/ko-kr/lua-kr.html.markdown
@@ -9,85 +9,85 @@ lang: ko-kr
---
```lua
--- ¥ ּ ǹմϴ.
+-- 대시 두 개는 한 줄짜리 주석을 의미합니다.
--[[
- [ ] ߰ϸ ּ ˴ϴ.
+ [와 ]를 두 개씩 추가하면 여러 줄 주석이 됩니다.
--]]
----------------------------------------------------
--- 1. 帧
+-- 1. 변수와 흐름 제어
----------------------------------------------------
-num = 42 -- ڴ doubleԴϴ.
--- ʿ ϴ. 64Ʈ double
--- Ȯ int ϱ 52Ʈ
--- ֽϴ. 52Ʈ int ؼ
--- е õ ʽϴ.
+num = 42 -- 모든 숫자는 double입니다.
+-- 놀랄 필요는 없습니다. 64비트 double은
+-- 정확한 int 값을 저장하기 위해 52비트로 구성돼
+-- 있습니다. 52비트 이하의 int 값에 대해서는
+-- 장비 정밀도와 관련된 문제가 생기지 않습니다.
-s = 'walternate' -- ̽ Һ ڿ
-t = "ūǥ ᵵ ˴ϴ"
-u = [[ ȣ
- ڿ
- Ÿϴ.]]
-t = nil -- t. ƴ ÷ մϴ.
+s = 'walternate' -- 파이썬과 같은 불변 문자열
+t = "큰따옴표를 써도 됩니다"
+u = [[ 이중 대괄호는
+ 여러 줄 문자열을
+ 나타냅니다.]]
+t = nil -- 미정의 t. 루아는 가비지 컬렉션을 지원합니다.
--- do/end Ű Ÿϴ:
+-- 블록은 do/end와 같은 키워드로 나타냅니다:
while num < 50 do
- num = num + 1 -- ++ += ڴ ϴ.
+ num = num + 1 -- ++나 += 유형의 연산자는 쓸 수 없습니다.
end
--- If :
+-- If 절:
if num > 40 then
- print('40 ̻')
-elseif s ~= 'walternate' then -- ~= ' ʴ'Դϴ.
- -- ϼ ˻ ̽ ==Դϴ.
- -- ڿ ֽϴ.
- io.write('not over 40\n') -- ⺻ stdout ϴ.
+ print('40 이상')
+elseif s ~= 'walternate' then -- ~=은 '같지 않다'입니다.
+ -- 동일성 검사는 파이썬과 마찬가지로 ==입니다.
+ -- 문자열에도 쓸 수 있습니다.
+ io.write('not over 40\n') -- 기본적으로 stdout에 씁니다.
else
- -- ⺻ Դϴ.
- thisIsGlobal = 5 -- Ÿ ǥ ϹԴϴ.
+ -- 변수는 기본적으로 전역 변수입니다.
+ thisIsGlobal = 5 -- 낙타 표기법이 일반적입니다.
- -- ϴ:
- local line = io.read() -- stdin нϴ
+ -- 변수를 지역 변수로 만드는 방법은 다음과 같습니다:
+ local line = io.read() -- 다음 stdin 줄을 읽습니다
- -- ڿ ῡ .. ڸ ϴ:
- print('ܿ ֽϴ, ' .. line)
+ -- 문자열 연결에는 .. 연산자를 씁니다:
+ print('겨울이 오고 있습니다, ' .. line)
end
--- nil ȯմϴ.
--- ڵ带 ص ʽϴ:
-foo = anUnknownVariable -- foo nilԴϴ.
+-- 미정의 변수는 nil을 반환합니다.
+-- 다음 코드를 실행해도 오류가 나지 않습니다:
+foo = anUnknownVariable -- 이제 foo는 nil입니다.
aBoolValue = false
--- nil false Դϴ; 0 '' Դϴ!
+-- nil과 false만이 거짓값입니다; 0과 ''은 참입니다!
if not aBoolValue then print('twas false') end
--- 'or' 'and' (short-circuit)˴ϴ.
--- ڵ C/ڹٽũƮ a?b:c ڿ մϴ:
+-- 'or'와 'and'는 단축 평가(short-circuit)됩니다.
+-- 다음 코드는 C/자바스크립트의 a?b:c 연산자와 비슷합니다:
ans = aBoolValue and 'yes' or 'no' --> 'no'
karlSum = 0
-for i = 1, 100 do -- ҵ Ե˴ϴ.
+for i = 1, 100 do -- 범위에는 마지막 요소도 포함됩니다.
karlSum = karlSum + i
end
--- īƮ ٿ "100, 1, -1" ϴ.
+-- 카운트 다운을 할 때는 "100, 1, -1"을 범위로 씁니다.
fredSum = 0
for j = 100, 1, -1 do fredSum = fredSum + j end
--- Ϲ begin, end[, step]Դϴ.
+-- 일반적으로 범위는 begin, end[, step]입니다.
--- ٸ ݺ ϴ:
+-- 또 다른 반복문 구문은 다음과 같습니다:
repeat
- print('̷ ')
+ print('미래의 방식')
num = num - 1
until num == 0
----------------------------------------------------
--- 2. Լ
+-- 2. 함수
----------------------------------------------------
function fib(n)
@@ -95,10 +95,10 @@ function fib(n)
return fib(n - 2) + fib(n - 1)
end
--- Ŭ ͸ Լ ֽϴ:
+-- 클로저와 익명 함수도 사용할 수 있습니다:
function adder(x)
- -- ȯ Լ adder ȣ ǰ x
- -- ˴ϴ:
+ -- 반환된 함수는 adder가 호출될 때 생성되고 x의
+ -- 값이 유지됩니다:
return function (y) return x + y end
end
a1 = adder(9)
@@ -106,104 +106,104 @@ a2 = adder(36)
print(a1(16)) --> 25
print(a2(64)) --> 100
--- ȯ, Լ ȣ, Ҵ繮 ̰ ٸ
--- Ʈ ؼ մϴ.
--- Ʈ nil Ҵ/ȯǰ
--- Ʈ ϴ.
+-- 반환문, 함수 호출, 할당문은 길이가 다른
+-- 값의 리스트에 대해서도 모두 동작합니다.
+-- 리스트에 값이 더 적을 때는 nil이 할당/반환되고
+-- 리스트에 값이 더 많을 때는 나머지 값은 버려집니다.
x, y, z = 1, 2, 3, 4
--- x = 1, y = 2, z = 3̰ 4 ϴ.
+-- 이제 x = 1, y = 2, z = 3이고 4는 버려집니다.
function bar(a, b, c)
print(a, b, c)
return 4, 8, 15, 16, 23, 42
end
-x, y = bar('zaphod') --> "zaphod nil nil"
--- x = 4, y = 8̰ 15~42 ϴ.
+x, y = bar('zaphod') --> "zaphod nil nil"가 출력
+-- 이제 x = 4, y = 8이고 15~42의 값은 버려집니다.
--- Լ ϱ ṵ̈, / ȿ
--- ֽϴ. Ʒ Լ ϴ:
+-- 함수는 일급 객체이고, 지역/전역 유효범위를 가질
+-- 수 있습니다. 아래의 두 함수는 같습니다:
function f(x) return x * x end
f = function (x) return x * x end
--- ׸ Ʒ Լ Դϴ:
+-- 그리고 아래의 두 함수도 마찬가지입니다:
local function g(x) return math.sin(x) end
local g; g = function (x) return math.sin(x) end
--- 'local g' ϸ g Լ ϴ.
+-- 'local g'라고 선언하면 g를 지역 함수로 만듭니다.
--- ׳ ﰢ Լ մϴ.
+-- 그나저나 삼각 함수는 라디안 단위로 동작합니다.
--- Լ ȣ ڿ Ű ϳ Ѵٸ
--- ȣ ʾƵ ˴ϴ:
-print 'hello' -- մϴ.
+-- 함수를 호출할 때 문자열 매개변수를 하나만 전달한다면
+-- 괄호를 쓰지 않아도 됩니다:
+print 'hello' -- 잘 동작합니다.
----------------------------------------------------
--- 3. ̺
+-- 3. 테이블
----------------------------------------------------
--- ̺ = ڷᱸμ, 迭Դϴ.
--- PHP 迭̳ ڹٽũƮ ü ϸ,
--- Ʈε ִ ؽ ųʸԴϴ.
+-- 테이블 = 루아의 유일한 복합 자료구조로서, 연관 배열입니다.
+-- PHP의 배열이나 자바스크립트의 객체와 비슷하며,
+-- 리스트로도 사용할 수 있는 해시 기반의 딕셔너리입니다.
--- ̺ ųʸ/ ϱ:
+-- 테이블을 딕셔너리/맵으로 사용하기:
--- ųʸ ͷ ⺻ ڿ Ű ϴ:
+-- 딕셔너리 리터럴은 기본적으로 문자열 키를 가집니다:
t = {key1 = 'value1', key2 = false}
--- ڿ Ű ڹٽũƮ ǥ ֽϴ:
-print(t.key1) -- 'value1' .
-t.newKey = {} -- Ű/ ߰.
-t.key2 = nil -- ̺ key2 .
+-- 문자열 키에는 자바스크립트와 유사한 점 표기법을 쓸 수 있습니다:
+print(t.key1) -- 'value1'을 출력.
+t.newKey = {} -- 새 키/값 쌍을 추가.
+t.key2 = nil -- 테이블에서 key2를 제거.
--- (nil ƴ) Ű ϴ ͷ ǥ:
+-- (nil이 아닌) 값을 키로 사용하는 리터럴 표기법:
u = {['@!#'] = 'qbert', [{}] = 1729, [6.28] = 'tau'}
-print(u[6.28]) -- "tau"
+print(u[6.28]) -- "tau"가 출력
--- Ű Ī ⺻ ڿ ڿ ؼ
--- ̺ ؼ ĺڷ մϴ.
+-- 키 매칭은 기본적으로 숫자와 문자열에 대해서는 값으로 하지만
+-- 테이블에 대해서는 식별자로 합니다.
a = u['@!#'] -- Now a = 'qbert'.
b = u[{}] -- We might expect 1729, but it's nil:
-a = u['@!#'] -- a 'qbert'Դϴ.
-b = u[{}] -- 1729 ߰ nilԴϴ:
--- Ž ϱ b nilԴϴ. Ž ϴ
--- Ű Ű ü ƴϱ
--- Դϴ. ڿ ڰ ̽ļ ִ ŰԴϴ.
+a = u['@!#'] -- 이제 a는 'qbert'입니다.
+b = u[{}] -- 1729를 예상했겠지만 nil입니다:
+-- 탐색이 실패하기 때문에 b는 nil입니다. 탐색이 실패하는 이유는
+-- 사용된 키가 원본 값을 저장할 때 사용한 키와 동일한 객체가 아니기
+-- 때문입니다. 따라서 문자열 및 숫자가 좀 더 이식성 있는 키입니다.
--- ̺ ϳ Ű ϴ Լ ȣ ȣ ʿ ʽϴ:
+-- 테이블 하나를 매개변수로 취하는 함수를 호출할 때는 괄호가 필요하지 않습니다:
function h(x) print(x.key1) end
-h{key1 = 'Sonmi~451'} -- 'Sonmi~451' .
+h{key1 = 'Sonmi~451'} -- 'Sonmi~451'를 출력.
-for key, val in pairs(u) do -- ̺ ȸ
+for key, val in pairs(u) do -- 테이블 순회
print(key, val)
end
--- _G Ư ̺Դϴ.
-print(_G['_G'] == _G) -- 'true'
+-- _G는 모든 전역 멤버에 대한 특별한 테이블입니다.
+print(_G['_G'] == _G) -- 'true'가 출력
--- ̺ Ʈ/迭 ϱ:
+-- 테이블을 리스트/배열로 사용하기:
--- Ʈ ͷ Ϲ int Ű ˴ϴ:
+-- 리스트 리터럴은 암묵적으로 int 키로 설정됩니다:
v = {'value1', 'value2', 1.21, 'gigawatts'}
-for i = 1, #v do -- #v Ʈ v ũԴϴ.
- print(v[i]) -- ε 1 մϴ!! ƴմϴ!
+for i = 1, #v do -- #v는 리스트 v의 크기입니다.
+ print(v[i]) -- 인덱스가 1에서 시작합니다!! 제정신이 아닙니다!
end
--- 'list' Ÿ ƴմϴ. v ӵ Ű Ե
--- ̺̰ Ʈ ޵ Դϴ.
+-- 'list'는 실제 타입이 아닙니다. v는 연속된 정수형 키가 포함된
+-- 테이블이고 리스트로 취급될 뿐입니다.
----------------------------------------------------
--- 3.1 Ÿ̺ Ÿ޼
+-- 3.1 메타테이블과 메타메서드
----------------------------------------------------
--- ̺ ̺ ε ϰ ϴ Ÿ̺
--- ֽϴ. ߿ Ÿ̺  ڹٽũƮ
--- Ÿ԰ ϴ 캸ڽϴ.
+-- 테이블은 테이블에 연산자 오버로딩을 가능하게 하는 메타테이블을
+-- 가질 수 있습니다. 나중에 메타테이블이 어떻게 자바스크립트
+-- 프로토타입과 같은 행위를 지원하는지 살펴보겠습니다.
-f1 = {a = 1, b = 2} -- м a/b ǥ
+f1 = {a = 1, b = 2} -- 분수 a/b를 표현
f2 = {a = 2, b = 3}
--- ڵ մϴ:
+-- 다음 코드는 실패합니다:
-- s = f1 + f2
metafraction = {}
@@ -217,30 +217,30 @@ end
setmetatable(f1, metafraction)
setmetatable(f2, metafraction)
-s = f1 + f2 -- f1 Ÿ̺ __add(f1, f2) ȣ
+s = f1 + f2 -- f1의 메타테이블을 대상으로 __add(f1, f2)를 호출
--- f1 f2 ڹٽũƮ Ÿ԰ ޸ Ÿ̺
--- Ű  getmetatable(f1) ޾ƿ; մϴ.
--- Ÿ̺ __add ư ˰ ִ Ű Ϲ ̺Դϴ.
+-- f1과 f2는 자바스크립트의 프로토타입과 달리 각 메타테이블에 대한
+-- 키가 없어서 getmetatable(f1)과 같이 받아와야 합니다.
+-- 메타테이블은 __add 같은 루아가 알고 있는 키가 지정된 일반 테이블입니다.
--- ׷ s Ÿ̺ ʱ մϴ.
+-- 그렇지만 다음 줄은 s가 메타테이블을 가지고 있지 않기 때문에 실패합니다.
-- t = s + s
--- Ʒ Ŭ ̷ ߻ ʽϴ.
+-- 아래와 같이 클래스와 유사한 패턴은 이러한 문제가 발생하지 않습니다.
--- Ÿ̺ __index ̿ Ž εմϴ:
+-- 메타테이블에 대한 __index는 점을 이용한 탐색을 오버로드합니다:
defaultFavs = {animal = 'gru', food = 'donuts'}
myFavs = {food = 'pizza'}
setmetatable(myFavs, {__index = defaultFavs})
-eatenBy = myFavs.animal -- մϴ! , Ÿ̺!
+eatenBy = myFavs.animal -- 동작합니다! 고마워요, 메타테이블!
--- Ÿ̺ Ž Ÿ̺ __index ̿
--- õϰ, ̷ ݺ˴ϴ.
+-- 직접적인 메타테이블 탐색이 실패할 경우 메타테이블의 __index 값을 이용해
+-- 재시도하고, 이런 과정이 반복됩니다.
--- __index ȭ Ž function(tbl, key)
--- ֽϴ.
+-- __index 값은 좀 더 세분화된 탐색을 위해 function(tbl, key)가
+-- 될 수도 있습니다.
--- __index, __add, ... Ÿ޼ մϴ.
--- Ÿ޼带 ̺ ü Դϴ.
+-- __index, __add, ...의 값을 메타메서드라고 합니다.
+-- 다음은 메타메서드를 가진 테이블의 전체 목록입니다.
-- __add(a, b) for a + b
-- __sub(a, b) for a - b
@@ -254,18 +254,18 @@ eatenBy = myFavs.animal -- մϴ! , Ÿ̺!
-- __eq(a, b) for a == b
-- __lt(a, b) for a < b
-- __le(a, b) for a <= b
--- __index(a, b) <fn̳ ̺> for a.b
+-- __index(a, b) <fn이나 테이블> for a.b
-- __newindex(a, b, c) for a.b = c
-- __call(a, ...) for a(...)
----------------------------------------------------
--- 3.2 Ŭ ̺
+-- 3.2 클래스 형태의 테이블과 상속
----------------------------------------------------
--- ƿ Ŭ , ̺ Ÿ̺
--- ̿ Ŭ پ ֽϴ.
+-- 루아에는 클래스가 내장돼 있지 않으며, 테이블과 메타테이블을
+-- 이용해 클래스를 만드는 다양한 방법이 있습니다.
--- ϴ մϴ.
+-- 다음 예제에 대한 설명은 하단을 참조합니다.
Dog = {} -- 1.
@@ -282,25 +282,25 @@ end
mrDog = Dog:new() -- 7.
mrDog:makeSound() -- 'I say woof' -- 8.
--- 1. Dog Ŭó մϴ. δ ̺Դϴ.
--- 2. function ̺:fn(...)
--- function ̺.fn(self, ...) ϴ.
--- : self ù ° ڸ ߰ Դϴ.
--- self  ñϴٸ Ʒ 7 8 о.
--- 3. newObj Dog Ŭ νϽ ˴ϴ.
--- 4. self = νϽȭǴ Ŭ.
--- ַ self = Dog ̿ϸ ̰ ٲ ֽϴ.
--- newObj Ÿ̺ self __index self ϸ
--- newObj self Լ ˴ϴ.
--- 5. : setmetatable ù ° ڸ ȯմϴ.
--- 6. : 2 Ͱ ̹ self
--- Ŭ ƴ νϽ ֽϴ.
--- 7. Dog.new(Dog) Ƿ new() self = DogԴϴ.
--- 8. mrDog.makeSound(mrDog) Ƿ self = mrDogԴϴ.
+-- 1. Dog는 클래스처럼 동작합니다. 실제로는 테이블입니다.
+-- 2. function 테이블명:fn(...)은
+-- function 테이블명.fn(self, ...)과 같습니다.
+-- :는 self라는 첫 번째 인자를 추가할 뿐입니다.
+-- self가 값을 어떻게 얻는지 궁금하다면 아래의 7과 8을 읽어보세요.
+-- 3. newObj는 Dog 클래스의 인스턴스가 됩니다.
+-- 4. self = 인스턴스화되는 클래스.
+-- 주로 self = Dog이지만 상속을 이용하면 이것을 바꿀 수 있습니다.
+-- newObj의 메타테이블과 self의 __index를 모두 self에 설정하면
+-- newObj가 self의 함수를 갖게 됩니다.
+-- 5. 참고: setmetatable은 첫 번째 인자를 반환합니다.
+-- 6. :는 2에서 설명한 것과 같이 동작하지만 이번에는 self가
+-- 클래스가 아닌 인스턴스라고 예상할 수 있습니다.
+-- 7. Dog.new(Dog)과 같으므로 new()에서는 self = Dog입니다.
+-- 8. mrDog.makeSound(mrDog)과 같으므로 self = mrDog입니다.
----------------------------------------------------
--- :
+-- 상속 예제:
LoudDog = Dog:new() -- 1.
@@ -312,19 +312,19 @@ end
seymour = LoudDog:new() -- 3.
seymour:makeSound() -- 'woof woof woof' -- 4.
--- 1. LoudDog Dog ޼ ˴ϴ.
--- 2. self new() 'sound' Ű ϴ. 3 ϼ.
--- 3. LoudDog.new(LoudDog) , LoudDog 'new' Ű
--- Ÿ̺ __index = Dog̱ Dog.new(LoudDog)
--- ȯ˴ϴ.
--- : seymour Ÿ̺ LoudDog̰ LoudDog.__index
--- LoudDogԴϴ. seymour.key seymour.key,
--- LoudDog.key, Dog.key ̸, Ű  ̺
--- Դϴ.
--- 4. 'makeSound' Ű LoudDog ߰ ֽϴ.
--- ̰ LoudDog.makeSound(seymour) ϴ.
-
--- ʿ , Ŭ new() Ŭ new() մϴ.
+-- 1. LoudDog은 Dog의 메서드와 변수를 갖게 됩니다.
+-- 2. self는 new()에서 'sound' 키를 가집니다. 3을 참고하세요.
+-- 3. LoudDog.new(LoudDog)과 같고, LoudDog은 'new' 키가 없지만
+-- 메타테이블에서 __index = Dog이기 때문에 Dog.new(LoudDog)으로
+-- 변환됩니다.
+-- 결과: seymour의 메타테이블은 LoudDog이고 LoudDog.__index는
+-- LoudDog입니다. 따라서 seymour.key는 seymour.key,
+-- LoudDog.key, Dog.key와 같을 것이며, 지정한 키에 어떤 테이블이
+-- 오든 상관없을 것입니다.
+-- 4. 'makeSound' 키는 LoudDog에서 발견할 수 있습니다.
+-- 이것은 LoudDog.makeSound(seymour)와 같습니다.
+
+-- 필요할 경우, 하위 클래스의 new()는 기반 클래스의 new()와 유사합니다.
function LoudDog:new()
newObj = {}
-- set up newObj
@@ -333,91 +333,91 @@ function LoudDog:new()
end
----------------------------------------------------
--- 4.
+-- 4. 모듈
----------------------------------------------------
---[[ ⼭ ּ ϸ ũƮ κ
--- ° ˴ϴ.
+--[[ 여기서 주석을 제거하면 이 스크립트의 나머지 부분은
+-- 실행 가능한 상태가 됩니다.
```
```lua
--- mod.lua ٰ ô.
+-- mod.lua 파일의 내용이 다음과 같다고 가정해 봅시다.
local M = {}
local function sayMyName()
- print('̼ҷ')
+ print('이소룡')
end
function M.sayHello()
- print('ȳϼ')
+ print('안녕하세요')
sayMyName()
end
return M
--- ٸ Ͽ mod.lua ̿ ֽϴ.
-local mod = require('mod') -- mod.lua
+-- 또 다른 파일에서는 mod.lua의 기능을 이용할 수 있습니다.
+local mod = require('mod') -- mod.lua 파일을 실행
--- require ԽŰ ǥȭ Դϴ.
--- require մϴ: (ij̵ . ϴ )
+-- require는 모듈을 포함시키는 표준화된 방법입니다.
+-- require는 다음과 같이 동작합니다: (캐싱돼 있지 않을 경우. 하단 참조)
local mod = (function ()
- <mod.lua >
+ <mod.lua의 내용>
end)()
--- mod.lua Լ ó ǹǷ mod.lua
--- ۿ ϴ.
+-- mod.lua가 함수의 본문처럼 되므로 mod.lua 안의 지역 멤버는
+-- 밖에서 볼 수 없습니다.
--- ڵ尡 ϴ mod mod.lua M Դϴ.
-mod.sayHello() -- ̼ҷ λ縦 dzܴϴ.
+-- 다음 코드가 동작하는 것은 mod가 mod.lua의 M과 같기 때문입니다.
+mod.sayHello() -- 이소룡 씨에게 인사를 건넵니다.
--- ڵ带 ϸ ߻մϴ.
--- sayMyName mod.lua ȿ ϱ Դϴ:
-mod.sayMyName() --
+-- 다음 코드를 실행하면 오류가 발생합니다.
+-- sayMyName는 mod.lua 안에서만 존재하기 때문입니다:
+mod.sayMyName() -- 오류
--- require ȯ ij̵ǹǷ require ص
--- ִ ˴ϴ.
+-- require의 반환값은 캐싱되므로 require를 여러 번 실행해도
+-- 파일은 최대 한 번만 실행됩니다.
--- mod2.lua "print('Hi')" ִٰ ô.
-local a = require('mod2') -- Hi!
-local b = require('mod2') -- print . a=b
+-- mod2.lua에 "print('Hi')"가 들어 있다고 가정해 봅시다.
+local a = require('mod2') -- Hi!를 출력
+local b = require('mod2') -- print를 실행하지 않음. a=b
--- dofile require ij ʽϴ:
+-- dofile은 require와 비슷하지만 캐싱을 하지 않습니다:
dofile('mod2') --> Hi!
-dofile('mod2') --> Hi! (require ޸ ٽ ѹ )
+dofile('mod2') --> Hi! (require와 달리 다시 한번 실행됨)
--- loadfile о ʽϴ
-f = loadfile('mod2') -- f() ȣؾ mod2.lua ˴ϴ.
+-- loadfile은 루아 파일을 읽어들이지만 실행하지는 않습니다
+f = loadfile('mod2') -- f()를 호출해야 mod2.lua가 실행됩니다.
--- loadstring ڿ loadfileԴϴ.
-g = loadstring('print(343)') -- Լ ȯմϴ.
-g() -- 343 µ˴ϴ. ƹ͵ µ ʽϴ.
+-- loadstring은 문자열에 대한 loadfile입니다.
+g = loadstring('print(343)') -- 함수를 반환합니다.
+g() -- 343이 출력됩니다. 그전까지는 아무것도 출력되지 않습니다.
--]]
```
-## ڷ
+## 참고자료
-Ƹ ߴ <a href="http://love2d.org/">Love 2D </a> ̿
- ־ Դϴ. ̰ Ƹ Դϴ.
+루아를 배우는 일이 흥미진진했던 이유는 <a href="http://love2d.org/">Love 2D 게임 엔진</a>을 이용해
+게임을 만들 수 있었기 때문입니다. 이것이 제가 루아를 배운 이유입니다.
- <a href="http://nova-fusion.com/2012/08/27/lua-for-programmers-part-1/">BlackBulletIV "α׷Ӹ "</a>
-߽ϴ. ״ <a href="http://www.lua.org/pil/contents.html">"α׷ "</a> å оϴ.
-׷ Ƹ ϴ.
+저는 <a href="http://nova-fusion.com/2012/08/27/lua-for-programmers-part-1/">BlackBulletIV의 "프로그래머를 위한 루아"</a>로
+시작했습니다. 그다음으로 공식 <a href="http://www.lua.org/pil/contents.html">"프로그래밍 루아"</a> 책을 읽었습니다.
+그렇게 루아를 배웠습니다.
-lua-users.org ִ <a href="http://lua-users.org/files/wiki_insecure/users/thomasl/luarefv51.pdf">ª ۷</a>
-оθ 𸣰ڽϴ.
+lua-users.org에 있는 <a href="http://lua-users.org/files/wiki_insecure/users/thomasl/luarefv51.pdf">짧은 루아 레퍼런스</a>를
+읽어두면 도움될지도 모르겠습니다.
-⼭ ǥ ̺귯 ؼ ٷ ʾҽϴ.
+여기서는 표준 라이브러리에 관해서는 다루지 않았습니다.
-* <a href="http://lua-users.org/wiki/StringLibraryTutorial">string ̺귯</a>
-* <a href="http://lua-users.org/wiki/TableLibraryTutorial">table ̺귯</a>
-* <a href="http://lua-users.org/wiki/MathLibraryTutorial">math ̺귯</a>
-* <a href="http://lua-users.org/wiki/IoLibraryTutorial">io ̺귯</a>
-* <a href="http://lua-users.org/wiki/OsLibraryTutorial">os ̺귯</a>
+* <a href="http://lua-users.org/wiki/StringLibraryTutorial">string 라이브러리</a>
+* <a href="http://lua-users.org/wiki/TableLibraryTutorial">table 라이브러리</a>
+* <a href="http://lua-users.org/wiki/MathLibraryTutorial">math 라이브러리</a>
+* <a href="http://lua-users.org/wiki/IoLibraryTutorial">io 라이브러리</a>
+* <a href="http://lua-users.org/wiki/OsLibraryTutorial">os 라이브러리</a>
-׳ ü ȿ α׷Դϴ.
-learn.lua "lua learn.lua" !
+그나저나 이 파일 전체는 유효한 루아 프로그램입니다. 이 파일을
+learn.lua로 저장한 후 "lua learn.lua"를 실행해 보세요!
- tylerneylon.com ó ẻ ̸,
-<a href="https://gist.github.com/tylerneylon/5853042">Github Gist</a> Ȯ ֽϴ.
-Ʒ ſ ð ! \ No newline at end of file
+이 글은 tylerneylon.com에 처음으로 써본 글이며,
+<a href="https://gist.github.com/tylerneylon/5853042">Github의 Gist</a>에서도 확인할 수 있습니다.
+루아로 즐거운 시간을 보내세요! \ No newline at end of file