1
0
mirror of https://github.com/adambard/learnxinyminutes-docs.git synced 2025-08-12 09:44:24 +02:00

change encoding of files

This commit is contained in:
wikibook
2013-08-13 15:47:49 +09:00
parent 04c0b273b0
commit cd104ee855
2 changed files with 363 additions and 363 deletions

View File

@@ -8,272 +8,272 @@ translators:
lang: ko-kr lang: ko-kr
--- ---
<EFBFBD>ڹٽ<EFBFBD>ũ<EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <20>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EAB7BB> <20><><EFBFBD><EFBFBD>ũ(Brendan Eich)<EFBFBD><EFBFBD> 1995<EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. 자바스크립트는 넷스케이프의 브렌던 아이크(Brendan Eich) 1995년에 만들었습니다.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڹٽ<DAB9>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20>ܼ<EFBFBD><DCBC><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ <20><><EFBFBD><20><>ǥ<EFBFBD><C7A5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>, 원래 자바스크립트는 웹사이트를 위한 단순한 스크립트 언어를 목표로 만들어졌는데,
<EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>ø<EFBFBD><C3B8><EFBFBD><EFBFBD>̼<EFBFBD><CCBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ڹٸ<DAB9> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD> 좀 더 복잡한 웹 애플리케이션을 만들기 위해 자바를 보완하는 역할이었지만
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣ<EFBFBD>ۿ<EFBFBD><DBBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>п<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD><E5BFA1> 웹 페이지와의 긴밀한 상호작용과 브라우저에 대한 지원 기능 덕분에 웹 프론트엔드에서
<EFBFBD>ڹٺ<EFBFBD><EFBFBD><EFBFBD> <20>ξ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̰<EFBFBD> <20>ƽ<EFBFBD><C6BD>ϴ<EFBFBD>. 자바보다 훨씬 더 보편적으로 쓰이게 됐습니다.
<EFBFBD>׷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڹٽ<DAB9>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ѵ<EFBFBD><D1B5><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD> ũ<><C5A9><EFBFBD><EFBFBD> V8 <20>ڹٽ<DAB9>ũ<EFBFBD><C5A9>Ʈ 그렇지만 자바스크립트는 웹 브라우저에만 국한되지 않습니다. 구글 크롬의 V8 자바스크립트
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> Node.js<6A><73> <20><><EFBFBD><EFBFBD> <20>α<20><><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. 엔진을 위한 독립형 런타임을 제공하는 Node.js는 점점 인기를 얻고 있습니다.
<EFBFBD>ǵ<EFBFBD><EFBFBD><EFBFBD> <20>ֽø<D6BD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰڽ<CFB0><DABD>ϴ<EFBFBD>! [@adambrenecki](https://twitter.com/adambrenecki)<EFBFBD><EFBFBD> 피드백 주시면 대단히 감사하겠습니다! [@adambrenecki](https://twitter.com/adambrenecki)
[adam@brenecki.id.au](mailto:adam@brenecki.id.au)<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. [adam@brenecki.id.au](mailto:adam@brenecki.id.au)를 통해 저와 만나실 수 있습니다.
```js ```js
// <EFBFBD>ּ<EFBFBD><EFBFBD><EFBFBD> C<><43> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. <20><> <20><>¥<EFBFBD><C2A5> <20>ּ<EFBFBD><D6BC><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>, // 주석은 C와 비슷합니다. 한 줄짜리 주석은 두 개의 슬래시로 시작하고,
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ּ<EFBFBD><D6BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǥ<EFBFBD><C7A5> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> /* 여러 줄 주석은 슬래시 별표로 시작해서
<EFBFBD><EFBFBD>ǥ <20><><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. */ 별표 슬래시로 끝납니다. */
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD>(;)<29><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 구문은 세미콜론(;)으로 끝낼 수 있습니다.
doStuff(); doStuff();
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>׷<EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD>µ<EFBFBD>, Ư<><C6AF> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> // 하지만 꼭 그럴 필요는 없는데, 특정 경우를 제외하고
// <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ԵDZ<D4B5> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>. // 새 줄이 시작할 때마다 세미콜론이 자동으로 삽입되기 때문입니다.
doStuff() doStuff()
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰڽ<CFB0><DABD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>δ<EFBFBD> // 여기서는 세미콜론을 생략하겠습니다. 세미콜론을 생략할지 여부는
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><>Ÿ<EFBFBD><C5B8> <20><><EFBFBD>̵带 <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. // 개인적인 취향이나 프로젝트의 스타일 가이드를 따릅니다.
/////////////////////////////////// ///////////////////////////////////
// 1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>ڿ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // 1. 숫자, 문자열, 연산자
// <EFBFBD>ڹٽ<EFBFBD>ũ<EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8>(64<36><34>Ʈ IEEE 754 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> // 자바스크립트에는 단 하나의 숫자 타입(64비트 IEEE 754 배정도 숫자)만이
// <EFBFBD>ֽ<EFBFBD><EFBFBD>ϴ<EFBFBD>. // 있습니다.
3 // = 3 3 // = 3
1.5 // = 1.5 1.5 // = 1.5
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. // 모든 기초 산술 연산은 기대한 대로 동작합니다.
1 + 1 // = 2 1 + 1 // = 2
8 - 1 // = 7 8 - 1 // = 7
10 * 2 // = 20 10 * 2 // = 20
35 / 5 // = 7 35 / 5 // = 7
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ե˴ϴ<CBB4>. // 나누어 떨어지지 않는 나눗셈도 포함됩니다.
5 / 2 // = 2.5 5 / 2 // = 2.5
// <EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>˴ϴ<CBB4>. float<61><74> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> // 비트 연산도 지원됩니다. float을 대상으로 비트 연산을 수행하면
// 32<EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣ<EFBFBD><C8A3> <20>ִ<EFBFBD> int<6E><74> <20><>ȯ<EFBFBD>˴ϴ<CBB4>. // 32비트까지 부호가 있는 int로 변환됩니다.
1 << 2 // = 4 1 << 2 // = 4
// <EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF>ϸ<EFBFBD> <20><EFBFBD><ECBCB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 괄호를 이용하면 우선순위를 지정할 수 있습니다.
(1 + 3) * 2 // = 8 (1 + 3) * 2 // = 8
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڰ<EFBFBD> <20>ƴ<EFBFBD> Ư<><C6AF><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 실제 숫자가 아닌 특별한 세 가지 값이 있습니다.
Infinity // 1/0 1/0<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Infinity // 1/0 1/0과 같은 연산의 결과
-Infinity // -1/0<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> -Infinity // -1/0과 같은 연산의 결과
NaN // 0/0<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> NaN // 0/0과 같은 연산의 결과
// <EFBFBD>Ҹ<EFBFBD> Ÿ<>Ե<EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 불린 타입도 있습니다.
true true
false false
// <EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD> '<27><> "<22><> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. // 문자열은 '나 "로 생성합니다.
'abc' 'abc'
"Hello, world" "Hello, world"
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EABFA1> ! <20><>ȣ<EFBFBD><C8A3> <20>̿<EFBFBD><CCBF>մϴ<D5B4>. // 부정 연산에는 ! 기호를 이용합니다.
!true // = false !true // = false
!false // = true !false // = true
// <EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> == // 동일성 연산은 ==
1 == 1 // = true 1 == 1 // = true
2 == 1 // = false 2 == 1 // = false
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> != // 불일치 연산은 !=
1 != 1 // = false 1 != 1 // = false
2 != 1 // = true 2 != 1 // = true
// <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> // 그 밖의 비교 연산
1 < 10 // = true 1 < 10 // = true
1 > 10 // = false 1 > 10 // = false
2 <= 2 // = true 2 <= 2 // = true
2 >= 2 // = true 2 >= 2 // = true
// <EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD> +<2B><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 문자열은 +로 연결할 수 있습니다.
"Hello " + "world!" // = "Hello world!" "Hello " + "world!" // = "Hello world!"
// <EFBFBD>׸<EFBFBD><EFBFBD><EFBFBD> <<3C><> ><3E><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 그리고 <와 >로 비교할 수 있습니다.
"a" < "b" // = true "a" < "b" // = true
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Ÿ<><C5B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȯ<EFBFBD><C8AF> <20><><EFBFBD><EFBFBD><EFBFBD>˴ϴ<CBB4>. // 비교 시 타입 강제변환이 수행됩니다.
"5" == 5 // = true "5" == 5 // = true
// ===<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʴ´ٸ<C2B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. // ===를 쓰지 않는다면 말이죠.
"5" === 5 // = false "5" === 5 // = false
// charAt<EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF>ϸ<EFBFBD> <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // charAt을 이용하면 문자열 내의 문자에 접근할 수 있습니다.
"This is a string".charAt(0) "This is a string".charAt(0)
// null<EFBFBD><EFBFBD> undefined<EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // null undefined도 있습니다.
null // <EFBFBD>ǵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ƴ<EFBFBD><C6B4><EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. null // 의도적으로 값이 아님을 나타내는 데 사용합니다.
undefined // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. undefined // 값이 아직 설정되지 않음을 나타내는 데 사용합니다.
// null, undefinded, NaN, 0, ""<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD>, <20><> <20><><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Դϴ<D4B4>. // null, undefinded, NaN, 0, ""은 거짓이며, 그 밖의 다른 모든 값은 참입니다.
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<><30> <20><><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD>, "0"<22><> <20><><EFBFBD>Դϴ<D4B4>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 == "0"<EFBFBD>̴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>). // 참고로 0은 거짓이며, "0"은 참입니다(심지어 0 == "0"이더라도).
/////////////////////////////////// ///////////////////////////////////
// 2. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>迭, <20><>ü // 2. 변수, 배열, 객체
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> var Ű<><C5B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. <20>ڹٽ<DAB9>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // 변수는 var 키워드로 선언합니다. 자바스크립트는 동적 타입 언어라서
// Ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ䰡 <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD><D2B4><EFBFBD> <20><><EFBFBD><EFBFBD> = <20><><EFBFBD><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. // 타입을 지정할 필요가 없습니다. 값을 할당할 때는 = 문자 하나를 사용합니다.
var someVar = 5 var someVar = 5
// var Ű<EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʾƵ<CABE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߻<EFBFBD><DFBB><EFBFBD><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. // var 키워드를 지정하지 않아도 오류는 발생하지 않습니다.
someOtherVar = 10 someOtherVar = 10
// <EFBFBD>׷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ϶<C6B4> // 그렇지만 변수가 여러분이 정의한 유효범위가 아니라
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>˴ϴ<CBB4>. // 전역 유효범위에 생성됩니다.
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<EFBFBD><D2B4><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ä<><C3A4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> undefined<65><64> <20><><EFBFBD><EFBFBD><EFBFBD>˴ϴ<CBB4>. // 값을 할당하지 않은 채로 선언한 변수는 undefined로 설정됩니다.
var someThirdVar // = undefined var someThirdVar // = undefined
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ǥ<><C7A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. // 변수에 수학 연산을 수행하는 축약형 표현은 다음과 같습니다.
someVar += 5 // someVar = someVar + 5;<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> someVar<EFBFBD><EFBFBD> 10. someVar += 5 // someVar = someVar + 5;와 같음. 이제 someVar 10.
someVar *= 10 // somVar<EFBFBD><EFBFBD> 100 someVar *= 10 // somVar 100
// 1<EFBFBD><EFBFBD> <20><><EFBFBD>ϰų<CFB0> <20><><EFBFBD><EFBFBD> <20>ξ<EFBFBD> <20><> ª<><C2AA> ǥ<><C7A5><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 1을 더하거나 빼는 훨씬 더 짧은 표현도 있습니다.
someVar++ // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> someVar<EFBFBD><EFBFBD> 101 someVar++ // 이제 someVar 101
someVar-- // <EFBFBD>ٽ<EFBFBD> 100<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ǵ<EFBFBD><C7B5>ư<EFBFBD> someVar-- // 다시 100으로 되돌아감
// <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<><C5B8> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>. // 배열은 순차적인 임의 타입 값의 목록입니다.
var myArray = ["Hello", 45, true] var myArray = ["Hello", 45, true]
// <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3> <20>ѷ<EFBFBD><D1B7><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 배열의 멤버는 대괄호로 둘러싼 인덱스를 이용해 접근할 수 있습니다.
// <EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. // 배열의 인덱스는 0부터 시작합니다.
myArray[1] // = 45 myArray[1] // = 45
// <EFBFBD>ڹٽ<EFBFBD>ũ<EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '<27><><EFBFBD><EFBFBD>'<27>̳<EFBFBD> '<27><>'<27><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. // 자바스크립트의 객체는 다른 언어의 '사전'이나 '맵'과 같습니다.
// <EFBFBD><EFBFBD>, Ű-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD><EFBFBD>Դϴ<D4B4>. // 즉, 키-값 쌍으로 구성된 비순차 컬렉션입니다.
{key1: "Hello", key2: "World"} {key1: "Hello", key2: "World"}
// Ű<EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȿ<EFBFBD><C8BF> <20>ڹٽ<DAB9>ũ<EFBFBD><C5A9>Ʈ <20>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> // 키는 문자열이지만 유효한 자바스크립트 식별자일 경우
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǥ<EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD> <20> Ÿ<><C5B8><EFBFBD>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 작은따옴표는 필요하지 않습니다. 값은 어떤 타입이든 사용할 수 있습니다.
var myObj = {myKey: "myValue", "my other key": 4} var myObj = {myKey: "myValue", "my other key": 4}
// <EFBFBD><EFBFBD>ü <20>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 객체 속성에도 인덱스를 이용해 접근할 수 있습니다.
myObj["my other key"] // = 4 myObj["my other key"] // = 4
// <EFBFBD>Ǵ<EFBFBD> Ű<><C5B0> <20><>ȿ<EFBFBD><C8BF> <20>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> ǥ<><C7A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 또는 키가 유효한 식별자일 경우 점 표기법을 이용해 접근할 수 있습니다.
myObj.myKey // = "myValue" myObj.myKey // = "myValue"
// <EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. <20><>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰų<CFB0> <20><> Ű<><C5B0> <20>߰<EFBFBD><DFB0><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 객체는 변경 가능합니다. 즉, 값을 변경하거나 새 키를 추가할 수 있습니다.
myObj.myThirdKey = true myObj.myThirdKey = true
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD> <20>ϸ<EFBFBD> undefined<65><64> <20><>ȯ<EFBFBD>˴ϴ<CBB4>. // 설정되지 않은 값에 접근하려고 하면 undefined가 반환됩니다.
myObj.myFourthKey // = undefined myObj.myFourthKey // = undefined
/////////////////////////////////// ///////////////////////////////////
// 3. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> // 3. 로직과 제어 구조
// if <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. // if 구조는 여러분이 예상한 대로 동작합니다.
var count = 1 var count = 1
if (count == 3){ if (count == 3){
// count<EFBFBD><EFBFBD> 3<><33> <20><><EFBFBD><EFBFBD> <20>򰡵<EFBFBD> // count가 3일 경우 평가됨
} else if (count == 4) { } else if (count == 4) {
// count<EFBFBD><EFBFBD> 4<><34> <20><><EFBFBD><EFBFBD> <20>򰡵<EFBFBD> // count가 4일 경우 평가됨
} else { } else {
// count<EFBFBD><EFBFBD> 3<>̳<EFBFBD> 4<><34> <20>ƴ<EFBFBD> <20><><EFBFBD><20>򰡵<EFBFBD> // count가 3이나 4가 아닌 경우에 평가됨
} }
// while<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>. // while도 마찬가지입니다.
while (true) { while (true) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>! // 무한 루프!
} }
// do-while <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׻<EFBFBD> <20>ּ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ȴٴ<C8B4> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> // do-while 문은 항상 최소 한 번은 실행된다는 점을 제외하면
// while <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. // while 문과 비슷합니다.
var input var input
do { do {
input = getInput() input = getInput()
} while (!isValid(input)) } while (!isValid(input))
// for <EFBFBD><EFBFBD><EFBFBD><EFBFBD> C<><43> <20>ڹ<EFBFBD><DAB9><EFBFBD> for <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. // for 문은 C와 자바의 for 문과 같습니다.
// <EFBFBD>ʱ<EFBFBD>ȭ<EFBFBD><EFBFBD>; <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // 초기화식; 지속 조건; 증감식
for (var i = 0; i < 5; i++){ for (var i = 0; i < 5; i++){
// 5<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // 5번 실행됨
} }
// &&<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> and<6E>̰<EFBFBD> ||<7C><> <20><><EFBFBD><EFBFBD> or<6F>Դϴ<D4B4>. // &&는 논리 and이고 ||는 논리 or입니다.
if (house.size == "big" && house.colour == "blue"){ if (house.size == "big" && house.colour == "blue"){
house.contains = "bear" house.contains = "bear"
} }
if (colour == "red" || colour == "blue"){ if (colour == "red" || colour == "blue"){
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̰ų<CCB0> <20>Ķ<EFBFBD> // 색은 빨강이거나 파랑
} }
// &&<EFBFBD><EFBFBD> ||<EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>"<22><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴµ<CFB4>, <20><EFBFBD><E2BABB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. // && ||은 "단축 평가"를 수행하는데, 기본값을 설정할 때 유용합니다.
var name = otherName || "default" var name = otherName || "default"
/////////////////////////////////// ///////////////////////////////////
// 4. <EFBFBD>Լ<EFBFBD>, <20><>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD>, Ŭ<><C5AC><EFBFBD><EFBFBD> // 4. 함수, 유효범위, 클로저
// <EFBFBD>ڹٽ<EFBFBD>ũ<EFBFBD><EFBFBD>Ʈ <20>Լ<EFBFBD><D4BC><EFBFBD> function Ű<><C5B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. // 자바스크립트 함수는 function 키워드로 선언합니다.
function myFunction(thing){ function myFunction(thing){
return thing.toUpperCase() return thing.toUpperCase()
} }
myFunction("foo") // = "FOO" myFunction("foo") // = "FOO"
// <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> "<22>͸<EFBFBD>"<22><><EFBFBD><EFBFBD>, <20><> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 함수는 "익명"으로, 즉 이름 없이 정의할 수도 있습니다.
function(thing){ function(thing){
return thing.toLowerCase() return thing.toLowerCase()
} }
// (<EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ű<EFBFBD><C5B0> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>) // (함수를 가리키는 이름이 없기 때문에 함수를 호출할 수 없습니다)
// <EFBFBD>ڹٽ<EFBFBD>ũ<EFBFBD><EFBFBD>Ʈ <20>Լ<EFBFBD><D4BC><EFBFBD> <20>ϱ<EFBFBD> <20><>ü<EFBFBD>̹Ƿ<CCB9> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ҵ<EFBFBD><D2B4>ϰ<EFBFBD> // 자바스크립트 함수는 일급 객체이므로 다른 변수에 재할당하고
// <EFBFBD>ٸ<EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD>, <20>̺<EFBFBD>Ʈ <20>ڵ鷯<DAB5><E9B7AF> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> // 다른 함수에 인자로 전달할 수 있습니다. 가령, 이벤트 핸들러를 만들 경우
function myFunction(){ function myFunction(){
// <EFBFBD><EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD> 5<><35> <20><><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD> // 이 코드는 5초 내에 호출됨
} }
setTimeout(myFunction, 5000) setTimeout(myFunction, 5000)
// <EFBFBD>ٸ<EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Լ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ۼ<EFBFBD><DBBC><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 다른 함수를 호출할 때 직접적으로 함수 구문을 작성할 수도 있습니다.
setTimeout(function myFunction(){ setTimeout(function myFunction(){
// <EFBFBD><EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD> 5<><35> <20><><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD> // 이 코드는 5초 내에 호출됨
}, 5000) }, 5000)
// <EFBFBD>ڹٽ<EFBFBD>ũ<EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Լ<EFBFBD> <20><>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 자바스크립트에는 함수 유효범위가 있습니다.
// <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC><EFBFBD><EFBFBD> <20><>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. // 함수는 자체적인 유효범위를 가지지만 다른 블록은 유효범위를 가지지 않습니다.
if (true){ if (true){
var i = 5 var i = 5
} }
i // = 5 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EEBFA1><EFBFBD><EFBFBD> undefined<EFBFBD><EFBFBD> <20>ƴմϴ<D5B4>. i // = 5 - 블록 유효범위를 지원하는 언어에서는 undefined가 아닙니다.
// <EFBFBD>̰<EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20>͸<EFBFBD> <20>Լ<EFBFBD>"<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̾<EFBFBD><CCBE><EFBFBD><EFBFBD>µ<EFBFBD>, // 이것은 "즉시 실행되는 익명 함수"라는 공통 패턴으로 이어지는데,
// <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. // 이 패턴은 임시 변수가 전역 유효범위로 유출되는 것을 방지합니다.
(function(){ (function(){
var temporary = 5 var temporary = 5
// '<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü'<27><> <20>Ҵ<EFBFBD><D2B4>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִµ<D6B4>, // '전역 객체'에 할당하는 식으로 전역 유효범위에 접근할 수 있는데,
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20>׻<EFBFBD> 'window'<27>Դϴ<D4B4>. <20><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> // 브라우저에서 전역 객체는 항상 'window'입니다. 전역 객체는
// Node.js<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD> ȯ<><EFBFBD><E6BFA1><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // Node.js와 같은 브라우저가 아닌 환경에서는 다른 이름일 수도 있습니다.
window.permanent = 10 window.permanent = 10
// <EFBFBD>Ǵ<EFBFBD> <20>տ<EFBFBD><D5BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ߴٽ<DFB4><D9BD><EFBFBD> var Ű<><C5B0><EFBFBD><20><> <20><><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 또는 앞에서 언급했다시피 var 키워드를 뺄 수도 있습니다.
permanent2 = 15 permanent2 = 15
})() })()
temporary // ReferenceError <EFBFBD>߻<EFBFBD> temporary // ReferenceError 발생
permanent // = 10 permanent // = 10
permanent2 // = 15 permanent2 // = 15
// <EFBFBD>ڹٽ<EFBFBD>ũ<EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ϳ<EFBFBD><CFB3><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD>(closure)<EFBFBD>Դϴ<EFBFBD>. // 자바스크립트의 강력한 기능 중 하나는 클로저(closure)입니다.
// <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20>Լ<EFBFBD> <20>ȿ<EFBFBD><C8BF><EFBFBD> <20><><EFBFBD>ǵǸ<C7B5> <20><><EFBFBD>ʿ<EFBFBD> <20><><EFBFBD>ǵ<EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> <20>ٱ<EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> // 함수가 다른 함수 안에서 정의되면 안쪽에 정의된 함수는 바깥 함수의
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 모든 변수에 접근할 수 있습니다.
function sayHelloInFiveSeconds(name){ function sayHelloInFiveSeconds(name){
var prompt = "Hello, " + name + "!" var prompt = "Hello, " + name + "!"
function inner(){ function inner(){
alert(prompt) alert(prompt)
} }
setTimeout(inner, 5000) setTimeout(inner, 5000)
// setTimeout<EFBFBD><EFBFBD> <20>񵿱<EFBFBD><F1B5BFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϹǷ<CFB9> <20><> <20>Լ<EFBFBD><D4BC><EFBFBD> 5<><35> <20><><EFBFBD><EFBFBD> // setTimeout은 비동기적으로 동작하므로 이 함수는 5초 동안
// <EFBFBD><EFBFBD><EFBFBD>ٸ<EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ĩ<EFBFBD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5<>ʰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> inner<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // 기다리지 않고 실행을 마칩니다. 하지만 5초가 지나면 inner에서도
// prompt<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // prompt의 값에 접근할 수 있습니다.
} }
sayHelloInFiveSeconds("Adam") // will open a popup with "Hello, Adam!" in 5s sayHelloInFiveSeconds("Adam") // will open a popup with "Hello, Adam!" in 5s
/////////////////////////////////// ///////////////////////////////////
// 5. <EFBFBD><EFBFBD>ü <20><>ȭ; <20><><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> // 5. 객체 심화; 생성자와 프로토타입
// <EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 객체는 함수를 포함할 수 있습니다.
var myObj = { var myObj = {
myFunc: function(){ myFunc: function(){
return "Hello world!" return "Hello world!"
@@ -281,8 +281,8 @@ var myObj = {
} }
myObj.myFunc() // = "Hello world!" myObj.myFunc() // = "Hello world!"
// <EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD> <20><><EFBFBD>Ե<EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> ȣ<><C8A3><EFBFBD>Ǹ<EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> this Ű<><C5B0><EFBFBD><20>̿<EFBFBD><CCBF><EFBFBD> // 객체에 포함된 함수가 호출되면 함수에서는 this 키워드를 이용해
// <EFBFBD>ش<EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD>Ե<EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 해당 함수가 포함된 객체에 접근할 수 있습니다.
myObj = { myObj = {
myString: "Hello world!", myString: "Hello world!",
myFunc: function(){ myFunc: function(){
@@ -291,22 +291,22 @@ myObj = {
} }
myObj.myFunc() // = "Hello world!" myObj.myFunc() // = "Hello world!"
// <EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD>ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ƴ<EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> ȣ<><C8A3><EFBFBD>Ǵ<EFBFBD> // 여기서 설정한 것은 함수가 정의된 곳이 아닌 함수가 호출되는
// <EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. <20>׷<EFBFBD><D7B7><EFBFBD> <20>Ʒ<EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><>ü <20><><EFBFBD>ؽ<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> // 방식과 관련이 있습니다. 그래서 아래 함수는 객체 컨텍스트에서
// ȣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. // 호출되지 않으면 동작하지 않습니다.
var myFunc = myObj.myFunc var myFunc = myObj.myFunc
myFunc() // = undefined myFunc() // = undefined
// <EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><>ü<EFBFBD><C3BC> <20>Ҵ<EFBFBD><D2B4>ϰ<EFBFBD> this<69><73> <20><><EFBFBD><EFBFBD> <20>ش<EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 반대로 함수는 객체에 할당하고 this를 통해 해당 객체에 접근할 수 있습니다.
// <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>ü<EFBFBD><C3BC> <20>߰<EFBFBD><DFB0><EFBFBD><EFBFBD><EFBFBD> <20>ʾҴ<CABE><D2B4><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>. // 함수를 정의할 때 객체에 추가되지 않았더라도 마찬가지입니다.
var myOtherFunc = function(){ var myOtherFunc = function(){
return this.myString.toUpperCase() return this.myString.toUpperCase()
} }
myObj.myOtherFunc = myOtherFunc myObj.myOtherFunc = myOtherFunc
myObj.myOtherFunc() // = "HELLO WORLD!" myObj.myOtherFunc() // = "HELLO WORLD!"
// new Ű<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> ȣ<><C8A3><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD> this<69><73> <20><><EFBFBD><EFBFBD> // new 키워드로 함수를 호출하면 새로운 객체가 생성되고 this를 통해
// <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ְ<EFBFBD> <20>˴ϴ<CBB4>. <20>̷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD> <20>մϴ<D5B4>. // 함수에서 사용할 수 있게 됩니다. 이런 식으로 설계된 함수를 생성자라 합니다.
var MyConstructor = function(){ var MyConstructor = function(){
this.myNumber = 5 this.myNumber = 5
@@ -314,14 +314,14 @@ var MyConstructor = function(){
myNewObj = new MyConstructor() // = {myNumber: 5} myNewObj = new MyConstructor() // = {myNumber: 5}
myNewObj.myNumber // = 5 myNewObj.myNumber // = 5
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڹٽ<DAB9>ũ<EFBFBD><C5A9>Ʈ <20><>ü<EFBFBD><C3BC> 'prototype'<27><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. <20><20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD> // 모든 자바스크립트 객체는 'prototype'을 가지고 있습니다. 어떤 객체에 대해
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD> <20><><EFBFBD>η<EFBFBD>Ÿ<EFBFBD>Կ<EFBFBD><D4BF><EFBFBD> // 실제 객체에는 존재하지 않는 프로퍼티에 접근하면 인터프리터는 프로로타입에서
// <EFBFBD>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC> ã<><C3A3><EFBFBD>ϴ<EFBFBD>. // 해당 프로퍼티를 찾습니다.
// <EFBFBD>Ϻ<EFBFBD> <20>ڹٽ<DAB9>ũ<EFBFBD><C5A9>Ʈ <20><><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> __proto__<5F><5F><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC> // 일부 자바스크립트 구현체에서는 __proto__라는 마법의 프로퍼티로
// <EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD>Կ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<20>մϴ<D5B4>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> // 객체의 프로토타입에 접근하는 것을 허용하기도 합니다. 프로토타입을
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><EFBFBD> <20>̷<EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD> __proto__<5F><5F> ǥ<>ؿ<EFBFBD> <20><><EFBFBD>Ե<EFBFBD> // 설명하기에는 이런 내용도 도움되겠지만 __proto__는 표준에 포함돼
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. <20><><EFBFBD>߿<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> ǥ<><C7A5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD>ϴ<EFBFBD>. // 있지 않습니다. 나중에 프로토타입을 사용하는 표준 방법을 살펴보겠습니다.
var myObj = { var myObj = {
myString: "Hello world!", myString: "Hello world!",
} }
@@ -334,37 +334,37 @@ var myPrototype = {
myObj.__proto__ = myPrototype myObj.__proto__ = myPrototype
myObj.meaningOfLife // = 42 myObj.meaningOfLife // = 42
// <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>մϴ<D5B4>. // 이 방법은 함수에도 통합니다.
myObj.myFunc() // = "hello world!" myObj.myFunc() // = "hello world!"
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD>Կ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // 물론 프로퍼티가 프로토타입에 존재하지 않으면
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> ã<><C3A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>˴ϴ<CBB4>. // 프로토타입의 프로토타입을 찾는 식으로 진행됩니다.
myPrototype.__proto__ = { myPrototype.__proto__ = {
myBoolean: true myBoolean: true
} }
myObj.myBoolean // = true myObj.myBoolean // = true
// <EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ͼ<CFBE><EEB3AA> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. <20><> <20><>ü<EFBFBD><C3BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD>Կ<EFBFBD> <20><><EFBFBD><EFBFBD> // 여기서 복사는 일어나지 않습니다. 각 객체에는 프로토타입에 대한
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. <20>̴<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // 참조가 보관돼 있습니다. 이는 프로토타입을 변경하면 변경사항이
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ݿ<EFBFBD><DDBF>ȴٴ<C8B4> <20>ǹ<EFBFBD><C7B9>Դϴ<D4B4>. // 모든 곳에 반영된다는 의미입니다.
myPrototype.meaningOfLife = 43 myPrototype.meaningOfLife = 43
myObj.meaningOfLife // = 43 myObj.meaningOfLife // = 43
// <EFBFBD>տ<EFBFBD><EFBFBD><EFBFBD> __proto__<EFBFBD><EFBFBD> ǥ<>ؿ<EFBFBD> <20><><EFBFBD>Ե<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʴٰ<CAB4> <20>̾߱<CCBE><DFB1>ߴµ<DFB4>, // 앞에서 __proto__가 표준에 포함돼 있지 않다고 이야기했는데,
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> ǥ<><C7A5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. // 기존 객체의 프로토타입을 변경하는 표준 방법은 없습니다.
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ư<><C6AF> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> // 하지만 특정 프로토타입을 가지고 새로운 객체를 생성하는 두 가지
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 방법이 있습니다.
// ù <20><>° <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Object.create<EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF>ϴ<EFBFBD> <20><><EFBFBD>ε<EFBFBD>, // 첫 번째 방법은 Object.create를 이용하는 것인데,
// Object.create<EFBFBD><EFBFBD> <20>ֱٿ<D6B1> <20>ڹٽ<DAB9>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD>̶<EFBFBD><CCB6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // Object.create는 최근에 자바스크립트에 추가된 것이라서 아직까지
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ƴմϴ<D5B4>. // 모든 구현체에서 이용할 수 있는 것은 아닙니다.
var myObj = Object.create(myPrototype) var myObj = Object.create(myPrototype)
myObj.meaningOfLife // = 43 myObj.meaningOfLife // = 43
// <EFBFBD><EFBFBD> <20><>° <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>𼭳<EFBFBD> <20><><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 두 번째 방법은 어디서나 통하는 방법인데, 생성자와 관련이 있습니다.
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD> prototype<EFBFBD>̶<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC> // 생성자에는 prototype이라는 프로퍼티가 있습니다. 이 프로퍼티는
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Լ<EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> *<2A>ƴϰ<C6B4>* <20><><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD> new Ű<><C5B0><EFBFBD><20>̿<EFBFBD><CCBF><EFBFBD> // 생성자 함수 자체의 프로토타입이 *아니고* 생성자와 new 키워드를 이용해
// <EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>ο<EFBFBD> <20><>ü<EFBFBD><C3BC> <20>޴<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD>Դϴ<D4B4>. // 객체가 생성될 때 새로운 객체가 받는 프로토타입입니다.
myConstructor.prototype = { myConstructor.prototype = {
getMyNumber: function(){ getMyNumber: function(){
return this.myNumber return this.myNumber
@@ -373,63 +373,63 @@ myConstructor.prototype = {
var myNewObj2 = new myConstructor() var myNewObj2 = new myConstructor()
myNewObj2.getMyNumber() // = 5 myNewObj2.getMyNumber() // = 5
// <EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<>Կ<EFBFBD><D4BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> // 문자열과 숫자와 같은 내장 타입에도 동등한 래퍼 객체를
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 생성하는 생성자가 있습니다.
var myNumber = 12 var myNumber = 12
var myNumberObj = new Number(12) var myNumberObj = new Number(12)
myNumber == myNumberObj // = true myNumber == myNumberObj // = true
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ȯ<EFBFBD><C8AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. // 하지만 정확히 같지는 않습니다.
typeof(myNumber) // = 'number' typeof(myNumber) // = 'number'
typeof(myNumberObj) // = 'object' typeof(myNumberObj) // = 'object'
myNumber === myNumberObj // = false myNumber === myNumberObj // = false
if (0){ if (0){
// 0<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD> <20><> <20>ڵ<EFBFBD><DAB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. // 0은 거짓이라서 이 코드는 실행되지 않습니다.
} }
if (Number(0)){ if (Number(0)){
// Number(0)<EFBFBD><EFBFBD> <20><><EFBFBD>̶<EFBFBD><CCB6><EFBFBD> <20><> <20>ڵ<EFBFBD><DAB5><EFBFBD> *<2A><><EFBFBD><EFBFBD><EFBFBD>˴ϴ<CBB4>*. // Number(0)은 참이라서 이 코드는 *실행됩니다*.
} }
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20>Ϲ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // 하지만 래퍼 객체와 일반 내장 함수는 프로토타입을 공유하기 때문에
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 가령 문자열에 실제로 기능을 추가할 수 있습니다.
String.prototype.firstCharacter = function(){ String.prototype.firstCharacter = function(){
return this.charAt(0) return this.charAt(0)
} }
"abc".firstCharacter() // = "a" "abc".firstCharacter() // = "a"
// <EFBFBD>̷<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ڹٽ<DAB9>ũ<EFBFBD><C5A9>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڹٽ<DAB9>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE> // 이러한 사실은 기존 자바스크립트 버전에서 자바스크립트의
// <EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(polyfilling)"<22><> <20><><EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF>ǹǷ<C7B9> // 새로운 기능을 구현하는 "폴리필(polyfilling)"에 자주 이용되므로
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ȯ<><EFBFBD><E6BFA1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 오래된 버전의 브라우저와 같이 기존 환경에서 사용될 수 있습니다.
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, Object.create<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ƴ϶<C6B4><CFB6><EFBFBD> // 예를 들어, Object.create가 모든 구현체에서 사용 가능한 것은 아니라고
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ʒ<EFBFBD><C6B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> Object.create<74><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. // 했지만 아래의 폴리필을 이용해 Object.create를 여전히 사용할 수 있습니다.
if (Object.create === undefined){ // don't overwrite it if it exists if (Object.create === undefined){ // don't overwrite it if it exists
Object.create = function(proto){ Object.create = function(proto){
// <EFBFBD>ùٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD> <20><><EFBFBD><EFBFBD> // 올바른 프로토타입을 가지고 임시 생성자를 만듬
var Constructor = function(){} var Constructor = function(){}
Constructor.prototype = proto Constructor.prototype = proto
// <EFBFBD>׷<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> // 그런 다음 임시 생성자를 이용해 새로운 적절한 프로토타입을
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD> // 포함한 객체를 생성
return new Constructor() return new Constructor()
} }
} }
``` ```
## <EFBFBD><EFBFBD>Ÿ <20><><EFBFBD><EFBFBD> <20>ڷ<EFBFBD> ## 기타 참고 자료
[<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ʈ<EFBFBD><C6AE>ũ](https://developer.mozilla.org/en-US/docs/Web/JavaScript)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [모질라 개발자 네트워크](https://developer.mozilla.org/en-US/docs/Web/JavaScript)에서는
<EFBFBD>ڹٽ<EFBFBD>ũ<EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD><C7B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. <20><><EFBFBD>Ҿ<EFBFBD> <20><>Ű <20><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 자바스크립트에 대한 훌륭한 문서를 제공합니다. 더불어 위키 형식이라서 좀 더 많은 사항을
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD><D0B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ν<EFBFBD> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9BFA1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. 배우게 되면 여러분만의 지식을 공유함으로써 다른 사람들에게 도움을 줄 수도 있습니다.
MDN<EFBFBD><EFBFBD> ['<EFBFBD>ڹٽ<EFBFBD>ũ<EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>Թ<EFBFBD>'](https://developer.mozilla.org/ko/docs/A_re-introduction_to_JavaScript)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MDN ['자바스크립트 재입문'](https://developer.mozilla.org/ko/docs/A_re-introduction_to_JavaScript)에서는
<EFBFBD><EFBFBD><EFBFBD><20>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ڼ<EFBFBD><DABC><EFBFBD> <20>ٷ<EFBFBD><D9B7><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>. <20><> <20>ڷῡ<DAB7><E1BFA1><EFBFBD><EFBFBD> <20>ڹٽ<DAB9>ũ<EFBFBD><C5A9>Ʈ <20><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> 여기서 다룬 개념의 상당수를 더욱 자세히 다루고 있습니다. 이 자료에서는 자바스크립트 언어 자체에
<EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ٷ<EFBFBD><D9B7><EFBFBD><EFBFBD>ϴ<EFBFBD>. <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڹٽ<DAB9>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʹٸ<CDB4> 대해서만 상당히 신중하게 다뤘습니다. 웹 페이지에서 자바스크립트를 사용하는 방법을 배우고 싶다면
[<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ü <20><><EFBFBD><EFBFBD>(Document Object Model)](https://developer.mozilla.org/en-US/docs/Using_the_W3C_DOM_Level_1_Core)<EFBFBD><EFBFBD> [문서 객체 모델(Document Object Model)](https://developer.mozilla.org/en-US/docs/Using_the_W3C_DOM_Level_1_Core)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20>ٶ<EFBFBD><D9B6>ϴ<EFBFBD>. 관해 배우는 것으로 시작하길 바랍니다.
[<EFBFBD>ڹٽ<EFBFBD>ũ<EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>](http://bonsaiden.github.io/JavaScript-Garden/)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڹٽ<DAB9>ũ<EFBFBD><C5A9>Ʈ <20><><EFBFBD><EFBFBD><EEBFA1> [자바스크립트 가든](http://bonsaiden.github.io/JavaScript-Garden/)에서는 자바스크립트 언어에서
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>߳<EFBFBD><DFB3><EFBFBD> <20><><EFBFBD><EFBFBD> <20>κе<CEBA><D0B5><EFBFBD> <20>ɵ<EFBFBD> <20>ְ<EFBFBD> <20>ٷ<EFBFBD><D9B7>ϴ<EFBFBD>. 직관에 어긋나는 모든 부분들을 심도 있게 다룹니다.
<EFBFBD><EFBFBD><EFBFBD>Ҿ<EFBFBD> <20><> <20>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E2BFA9> <20>е<EFBFBD><D0B5><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><> <20>Ϻδ<CFBA> <20><> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>ִ<EFBFBD> 더불어 이 글에 직접적으로 기여한 분들로, 내용 중 일부는 이 사이트에 있는
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>(Louie Dihn)<EFBFBD><EFBFBD> <20><><EFBFBD>̽<EFBFBD> Ʃ<><EFBFBD><E4B8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ʈ<EFBFBD><C6AE>ũ<EFBFBD><C5A9> <20>ִ<EFBFBD> 루이 딘(Louie Dihn)의 파이썬 튜토리얼과 모질라 개발자 네트워크에 있는
[<EFBFBD>ڹٽ<EFBFBD>ũ<EFBFBD><EFBFBD>Ʈ Ʃ<><EFBFBD><E4B8AE>](https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript)<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>. [자바스크립트 튜토리얼](https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript)을 참고했습니다.

View File

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