배열(Array)
지난 시간 변수에 대해 공부했습니다. 변수는 값을 보관하기 위해 컴퓨터에 메모리를 할당하는 것이고, 변수명은 그 메모리공간을 지칭하는 별명이라고 이야기 했습니다. 만약 비슷한 이름의 변수를 100개를 만들어야 된다고 생각해 봅시다.
var 변수1
var 변수2
var 변수3
…
var 변수97
var 변수98
var 변수99
var 변수100
이렇게 선언을 해야 합니다.
그러나 오늘 배울 배열을 이용한다는 코드를 획기적으로 줄일 수 있습니다.
var 변수=new Array(100)
이렇게 선언하면 됩니다.
서문빌딩의 경우를 예로 들어 배열을 이해해 보도록 하겠습니다.
서문빌딩
서문빌딩은 5층 건물로 각층에 3개의 방이 있습니다. 그러니까 총 15개의 방이 있는 거죠. 신축한 건물인 서문빌딩은 아직 아무도 입주를 하지 않고 있습니다. 그런데 마침 홍길동이 등장했습니다. 홍길동은 분양사무실에 등록하고 0호 방에 입주하게 되었습니다. 서문빌딩에서 홍길동을 찾으려면 각 방마다 다 찾아봐야 하겠지만 분양사무실에 가면 금방 알 수 있습니다. 마침 미국에서 슈퍼맨이 입주하게 되었습니다. 슈퍼맨이 어디 있는지 알아보려면 분양사무실을 찾아가는 것이 가장 빨리 슈퍼맨을 찾는 방법이 될 것입니다.
이런 식으로 모든 방에 다 입주를 하게 되었습니다.
0호 |
1호 |
2호 |
3호 |
4호 |
5호 |
6호 |
7호 |
8호 |
9호 |
10호 |
11호 |
12호 |
13호 |
14호 |
홍길동 |
슈퍼맨 |
로보캅 |
손오공 |
아톰 |
마징가젯 |
그랜다이저 |
모세 |
요셉 |
마리아 |
마태 |
요한 |
다윗 |
아담 |
베드로 |
호텔의 명패를 보면 알기는 쉽지만 몇 층인지 알아보기 어렵습니다. 그래서 호텔에 맞게 변경하면 다음과 같습니다.
서문빌딩 |
0호 홍길동 |
1호 슈퍼맨 |
2호 로보캅 |
3호 손오공 |
4호 아톰 |
5호 마징가젯 |
6호 그랜다이저 |
7호 모세 |
8호 요셉 |
9호 마리아 |
10호 마태 |
11호 요한 |
12호 다윗 |
13호 아담 |
14호 베드로 |
이 빌딩은 이렇게 5층의 3개 방으로 구성되어 있습니다.
이것은 프로그램적으로 바꾸면 다음과 같습니다.
0호 홍길동 → [0] = “홍길동” → 서문[0] = “홍길동”;
서문빌딩 |
서문[0] = “홍길동” |
서문[1] = “슈퍼맨” |
서문[2] = “로보캅” |
서문[3] = “손오공” |
서문[4] = “아톰” |
서문[5] = “마징가젯” |
서문[6] = “그랜다이저” |
서문[7] = “모세” |
서문[8] = “요셉” |
서문[9] = “마리아” |
서문[10] = “마태” |
서문[11] = “요한” |
서문[12] = “다윗” |
서문[13] = “아담” |
서문[14] = “베드로” |
행렬의 등장 (층은 행, 호는 열이다)
위처럼 변화시킬 수도 있지만 좀 더 분명한 방법을 택해 봅니다. 보통 층을 셀 때는 제일 아래부터 세어 가지만 프로그래밍에서는 반대로 제일 위에서부터 세어 나갑니다. 이것은 우리가 순서대로 번호를 붙일 때와 마찬가지입니다.
플래시에서도 배열에서는 이렇게 사용됩니다. 좀 더 분명한 형태로 하면 ‘몇 층의 몇 호에 누가 있다.’ 라는 말을 ‘몇 행의 몇 번째에 누가 있다.’ 라는 말로 바꾸면 됩니다.
층과 호를 구분해서 나타내면 다음과 같습니다.
층 |
|
호 |
서문[0] |
[0] = “홍길동”; |
[1] = “슈퍼맨”; |
[2] = “로보캅”; |
서문[1] |
[0] = “손오공”; |
[1] = “아톰”; |
[2] = “마징가젯”; |
서문[2] |
[0] = “그랜다이저”; |
[1] = “모세”; |
[2] = “요셉”; |
서문[3] |
[0] = “마리아”; |
[1] = “마태”; |
[2] = “요한”; |
서문[4] |
[0] = “다윗”; |
[1] = “아담”; |
[2] = “베드로”; |
보통 사람을 찾을 때 몇 층의 몇 호라고 이야길 하기 때문에 이렇게 작성하는 것이 더 자연스럽습니다. 자, 이제 층이라는 말과 호를 빼고 행과 열로 대체 한다면 다음과 같습니다.
행 |
|
열 |
서문[0] |
[0] = “홍길동”; |
[1] = “슈퍼맨”; |
[2] = “로보캅”; |
서문[1] |
[0] = “손오공”; |
[1] = “아톰”; |
[2] = “마징가젯”; |
서문[2] |
[0] = “그랜다이저”; |
[1] = “모세”; |
[2] = “요셉”; |
서문[3] |
[0] = “마리아”; |
[1] = “마태”; |
[2] = “요한”; |
서문[4] |
[0] = “다윗”; |
[1] = “아담”; |
[2] = “베드로”; |
자, 이제 어디에 누가 있는 지 알아보려면 분양사무실에 다음과 같이 문의해 볼 수 있습니다.
“거기 서문빌딩이죠?”
“그 빌딩 3층2호에 누가 있습니까?”
자 이 말을 프로그램적으로 바꾸면 어떻게 될까요? 다음과 같이 기술할 수 있습니다.
서문[3][2];
‘서문[3][2]’ 라고 분양사무실에 문의합니다. 그러면 3층 2호에 누가 있는지 알 수 있습니다.
이와 같이 같은 이름에 여러 개의 변수를 사용할 때 배열을 이용할 수 있습니다.
myArray:Array = new Array();
myArray.push("one");
myArray.push("two");
myArray.push("three");
trace(myArray);
myArray:Array = ["one", "two", "three"];
trace(myArray);
var names:Array = new Array(3);
trace(names.length); // output: 3
trace(names[0]); trace(names[1]);
race(names[2]);
names:Array = new Array("John", "Jane", "David");
trace(names.length);
trace(names[0]);
trace(names[1]);
trace(names[2]);
var myArray:Array = new Array(["홍길동","슈퍼맨","맹자"],["공자","논어","주역"]);
trace(myArray[1][1]);