1.8 배열

다른 프로그래밍 언어를 다루어 본 경험이 있다면 배열의 개념이 친숙할 것이다. 배열은 하나의 변수의 이름에 인덱스 번호를 사용하여 다른 값을 저장할 수 있는 데이터의 집합을 이야기한다. 쉽게 이야기하면 서류 폴더라고 생각할 수 있다. 주제에 맞는 여러 가지 데이터들이 순서대로 저장되어 있는 폴더로 생각하면 된다. ASP에서도 다른 프로그래밍 언어와 마찬가지로 배열을 지원하고 있다. 지금부터 배열을 어떻게 사용하고 활용할 수 있는지 알아보자.


1) 배열이란?

배열은 동일한 이름으로 연속되는 변수를 참조하고 인덱스 번호를 사용할 수 있는 형식을 가리키는 것이다. 즉, 하나의 변수에 해당하는 데이터 값이 여러 개가 존재할 때 이런 값들을 저장하기 위해 모두 다른 변수를 사용한다는 것은 매우 불편한 일이 될 것이다. 이런 문제를 해결할 수 있는 것이 바로 배열이다. 다음의 코드를 살펴보자. 회원의 정보에서 이름을 저장하는 변수를 보면 배열이 얼마나 편리한 것인지 알 수 있다.


member1 = "황재선"
member2 = "이성남" -> 일반 변수 사용
member3 = "정민호"

member(1) = "황재선"
member(2) = "이성남" -> 배열 사용
member(3) = "정민호"


각각의 변수를 사용하는 것은 다른 이름으로 접근을 해야 하므로 추후 다른 연산이나 데이터의 교환에서 많은 불편함이 따를 수 있다. 그러나 이런 경우 배열을 사용하면 인덱스 번호를 기준으로 작업을 할 수 있기 때문에 인덱스 번호에 따라 효율적으로 루프를 설정하여 여러 상황에서 간단한 코드를 이용하여 결과를 나타낼 수 있는 것이다.

그리고 배열의 인덱스 번호는 상한값과 하한값을 가지며 배열의 요소는 범위 내에서 연속적으로 존재한다. 그렇기 때문에 사용하고자 하는 배열의 크기만큼 공간을 할당하여 사용하게 된다.


2) 고정 크기 배열

배열의 선언은 변수의 선언과 마찬가지로 Dim문을 이용하여 선언한다. 그러나 배열의 선언에는 배열의 크기로 사용될 인자를 선언문에서 지정해야 한다. 이렇게 배열의 크기로 사용되는 인자를 고정된 숫자로 선언하여 생성되는 배열을 고정 크기 배열이라 하며 이 배열의 선언은 다음과 같다.


Dim Member(99)

99라는 정수 값으로 되어 있는 배열의 인덱스는 0부터 시작하게 된다. 그렇기 때문의 위의 배열의 선언으로 Member(0)부터 Member(99)까지의 100개의 저장 공간이 생성된다. 고정 크기 배열을 사용하는 다음 예제를 살펴보자.

● array1.asp


<%@ Language=VBScript %>

<%

Dim Language(4)
Language(0) = "ASP"
Language(1) = "PHP"
Language(2) = "Visual Basic"
Language(3) = "Delphi"
Language(4) = "Power Builder"

%>

<HTML>
<HEAD>
  <TITLE>고정 크기 배열 사용</TITLE>
</HEAD>

<BODY>

<P> 내가 알고 있는 컴퓨터 프로그래밍 언어 </P>
1. <%=Language(0)%> <BR>
2. <%=Language(1)%> <BR>
3. <%=Language(2)%> <BR>
4. <%=Language(3)%> <BR>
5. <%=Language(4)%> <BR>

</BODY>
</HTML>



[그림 8-1] array1.asp 결과


3) 동적 배열

고정 크기 배열의 사용에서와 같이 배열에 저장하고자 하는 데이터의 수가 미리 정해져 있지 않아 인덱스의 크기를 모를 때는 동적 배열을 사용할 수 있다. 동적 배열은 다음과 같은 형식으로 선언된다.


Dim Member()

...

ReDim Member(2)

Member(0) = "황재선"
Member(1) = "이성남"
Member(2) = "정민호"


우선 배열의 이름 뒤에 동적 배열을 선언하기 위해서 인덱스를 삭제하고 괄호를 두어 나중에 배열의 크기가 정해지면 생성할 수 있도록 암시적인 선언만 한다. 이렇게 선언된 동적 배열에 실제 공간을 할당하기 위해서 배열의 크기가 정해지면 ReDim문을 이용하여 새롭게 배열의 크기를 늘리게 된다. 이렇게 다시 선언된 배열은 인덱스의 크기만큼 데이터의 저장이 가능하다.

동적 배열은 이외에도 한번 크기가 정해진 배열의 크기를 또다시 변경할 수도 있다. 다음의 사용법을 참고하자.


Dim Member()

...

ReDim Member(2)

Member(0) = "황재선"
Member(1) = "이성남"
Member(2) = "정민호"

...

ReDim Member(5)


이렇게 새롭게 인덱스를 재조정하고자 할 경우에는 ReDim문을 또 사용하면 배열의 인덱스 크기의 변경이 가능한 것이다. 그러나 위의 경우처럼 ReDim을 두 번 사용하게 된다면 이전에 저장되어 있던 배열의 값은 사라진다. 만일 새롭게 추가되는 내용을 위해 크기를 재조정하는 경우라면 기존의 데이터가 사라지게 된다면 심각한 오류가 되는 것이다. 이런 오류를 방지하기 위해서 동적 배열의 선언에 Preserve 키워드를 사용하여 기존의 데이터를 보존할 수 있다. 다음의 예제를 보면서 Preserve의 사용에 대해서 알아보자.

● array2.asp


<%@ Language=VBScript %>

<%

Dim Language()
ReDim Language(4)

Language(0) = "ASP"
Language(1) = "PHP"
Language(2) = "Visual Basic"
Language(3) = "Delphi"
Language(4) = "Power Builder"

%>

<HTML>
<HEAD>
  <TITLE>동적 배열 사용</TITLE>
</HEAD>

<BODY>

<P> 내가 알고 있는 컴퓨터 프로그래밍 언어 </P>
1. <%=Language(0)%> <BR>
2. <%=Language(1)%> <BR>
3. <%=Language(2)%> <BR>
4. <%=Language(3)%> <BR>
5. <%=Language(4)%> <BR>
<BR>

<%

ReDim Preserve Language(5)
Language(5) = "Visual C++"

%>

Preserve를 사용하여 배열의 인덱스 재설정<BR>
1. <%=Language(0)%> <BR>
2. <%=Language(1)%> <BR>
3. <%=Language(2)%> <BR>
4. <%=Language(3)%> <BR>
5. <%=Language(4)%> <BR>
6. <%=Language(5)%> <BR>
<BR>

<%

ReDim Language(6)
Language(6) = "Java"

%>

ReDim만 사용하여 배열의 인덱스 재설정<BR>
1. <%=Language(0)%> <BR>
2. <%=Language(1)%> <BR>
3. <%=Language(2)%> <BR>
4. <%=Language(3)%> <BR>
5. <%=Language(4)%> <BR>
6. <%=Language(5)%> <BR>
7. <%=Language(6)%> <BR>

</BODY>
</HTML>



[그림 8-2] array2.asp 결과

동적 배열의 사용을 위해 첫 줄에서 [Dim Language()]로 선언을 한 뒤 새롭게 ReDim을 이용하여 인덱스의 공간을 추가하였다. 배열에 데이터를 저장한 뒤 첫 번째 출력을 하게 된다. 이렇게 출력이 이루어진 후 새로운 데이터의 추가를 위해 배열의 인덱스 크기를 증가시킨다.


ReDim Preserve Language(5)
Language(5) = "Visual C++"

Preserve를 이용하여 기존의 배열 데이터는 보존하면서 새로운 인덱스를 추가시키고 값을 대입한다. 이렇게 하여 출력하면 모든 배열의 데이터가 출력되는 것을 확인할 수 있다. 그러나 그 이후에 나오는 단순한 ReDim만으로 인덱스를 추가하면 기존에 저장되어 있던 배열의 값은 모두 사라지게 된다.


ReDim Language(6)
Language(6) = "Java"

위의 선언과 같이 Language(6)에만 배열의 값이 저장되고 이전에 저장되어 있던 값들은 모두 사라지게 된다.


(4) 다차원 배열

지금까지 알아본 배열은 하나의 인덱스만 가지는 일차원 배열이다. 그러나 배열은 다차원 배열의 구조도 가질 수 있다. 예를 들어 모니터에 나타나는 좌표를 구현하는 변수를 선언하고자 한다면 일반적으로 Point_X와 Point_Y라는 변수를 사용할 수 있다. 그러나 저장하고자 하는 좌표가 많아지게 된다면 상당히 복잡한 처리과정을 거치게 된다. 이럴 경우 다차원 배열을 이용하여 다음과 같이 Point를 사용하면 이런 수고를 들 수 있을 것이다.


Dim Point(5,1)
Point(0,0) = 100 ' 첫 번째 점의 X좌표
Point(0,1) = 100 ' 첫 번째 점의 Y좌표
Point(1,0) = 0 ' 두 번째 점의 X좌표
Point(1,1) = 10 ' 두 번째 점의 Y좌표
...

이렇게 다차원 배열을 사용하여 만족한 결과를 얻을 수 있는 상황이 발생할 수도 있다. 각각의 상황에 맞는 변수와 배열을 사용하여 코드를 입력하는 습관을 가질 수 있도록 하자.


[참고하세요]

VBScript에서는 다차원 배열로 가질 수 있는 범위로 60차원까지 지원하고 있다. 3차원까지는 현실 세계에서 발생할 수 있는 경우이고, 경우에 따라서 4차원 배열은 컴퓨터 그래픽스에서 사용되기도 한다. 그러나 5차원 이상의 경우가 생긴다면 배열이 아닌 다른 데이터베이스나 파일을 이용하는 방법을 찾아야 할 것이다.

'asp' 카테고리의 다른 글

포스트, 겟, 쿠키 , 세션 값확인할때  (0) 2007.05.03
The ASP CAPTCHA (자동가입방지)  (0) 2007.05.03
ASP 기초 - 수학 연산자  (0) 2007.05.03
ASP 기초 - 날짜와 시간 함수  (0) 2007.05.03
ASP 기초 - 스트링 함수  (0) 2007.05.03

+ Recent posts