본문 바로가기

Web Development/ASP

[ASP] 인식자(Identifiers),변수,상수,데이터 타입,연산자,데이터 형식 변환,배열 (고정 크기 배열, 동적 배열, 다차원 배열)

인식자(Identifiers)

인식자는 프로그래머가 선언하는 변수나 함수의 이름이 될 수 있는 단어를 말한다. ASP 프로그래밍의 내부 연산 처리나 데이터 처리에서 가장 중요한 역할을 수행하는 인식자는 다음의 특징을 가지고 있다.

우선 ASP가 VB 스크립트를 기준으로 하기 때문에 VB 스크립트에서 지원하는 범위와 동일하다는 것을 알아두기 바란다.

① 문자와 숫자, _(under bar)로 이루어진다.

② 길이는 보통 255자 이내로 설정한다.

③ 첫 문자는 숫자가 되어서는 안되고, 마지막 문자는 마침표(.)를 사용해서는 안 된다.

④ 일반적으로 대소문자의 구분을 하지 않는다.

앞으로 소개할 변수나 함수 부분에서 실제 사용되는 인식자들의 예를 볼 것이다. 이곳에서는 인식자라는 것의 의미만 파악하자.

사용가능 사용불가
TempVar Temp?Var, Temp!Var, _TempVar, ~TempVar
Temp_Var Temp~Var
Temp123 123Temp

[표 1-1] 인식자 사용 예

변수

변수란 프로그램이 실행되는 동안 값을 임시로 저장하기 위해 프로그래머로부터 이름을 할당받은 메모리의 영역을 가리키는 것을 의미한다. 일반적으로 변수는 이름과 데이터 형식의 구성으로 되어있다. 예를 들어 슈퍼마켓에서 라면을 살 때 계산대에서 계산하기 전까지는 전체 금액이 얼마인지 모른다. 이렇게 결정되지 않은 두 값을 저장하기 위해 두 개의 변수를 사용할 수 있는데 하나는 라면의 가격이고, 하나는 라면의 개수이다. 이처럼 프로그램이 실행되는 동안 변경될 수 있고, 사용자에 의해 결과 값이 반영되는 것을 나타낼 수 있는 것이 변수이다.

1) 변수 선언

ASP에서의 변수 선언은 단순히 Dim 키워드 다음에 변수명을 입력하는 것으로 작업이 이루어진다. 예를 들어 MyAsp라는 변수를 선언하고자 한다면 다음과 같이 입력하면 된다.


Dim MyAsp


이렇게 선언된 변수는 ASP 코드에서 임의의 값을 저장하는 저장소의 역할을 수행한다. 그러나 다른 프로그래밍 언어와는 달리 ASP에서의 변수의 데이터 형식은 값이 정해질 때 결정된다. 예를 들어 MyAsp = 5라는 값을 입력하면 MyAsp는 숫자형이 되고, MyAsp = "5"를 입력하면 MyAsp는 문자형이 된다.

위의 선언문처럼 Dim이라는 키워드를 이용하여 변수를 선언하는 것을 명시적인 선언이라 한다. Dim 변수명의 형식으로 선언하면 ASP에 Dim이후에 적혀져 있는 변수명으로 사용하겠다는 것을 미리 알려주는 역할을 하게된다. 그러나 ASP에서는 Dim을 사용하지 않아도 상관없다. 다음과 같이 MyAsp의 선언과정 없이 그냥 값을 입력하여도 사용에는 아무런 문제가 발생하지 않는다.


MyAsp = 100


이와 같은 변수의 선언을 암시적 선언이라 하며 ASP에서 주로 사용하는 방법이다. 만일 모든 변수를 코드의 초기 부분에 선언하여 사용하고, 선언된 변수만 코드내에서 사용하고자 할 경우에는 Option Explicit를 ASP 코드 첫 부분에 입력하면 된다. Option Explicit가 입력되어진 코드에서는 Dim에 의해 선언되지 않은 변수를 사용하게 되면 에러가 발생하게 될 것이다.

2) 변수 이름

변수의 가장 중요한 역할이 프로그램 실행에서 발생하는 여러 가지 값들의 저장이다. 이런 값들이 다르다는 것을 프로그래머가 직관적으로 인지하기 쉽게 하기 위해 변수의 이름은 프로그래머가 직접 정하게 된다. 예를 들어 회원수라는 변수명을 지정하는데 한 프로그래머는 단순히 'a'라는 이름으로, 다른 프로그래머는 'MemberCount'라 정했다고 한다면 후자의 경우가 일반적으로 이해하기 쉬울 것이다.

이와 같이 변수 이름을 정하는데는 몇 가지 사항에 대해서 미리 고려를 해야 한다. 우선 그 변수가 어떤 값을 저장할 것인지 쉽게 이해할 수 있어야 한다. 변수의 이름은 255자까지 사용할 수 있다. 긴 변수를 사용하여도 상관없으니 누구나 쉽게 이해할 수 있는 단어로 변수를 만드는 습관을 가져야 할 것이다. 두 번째로 일정의 규칙을 두고 변수를 선언하도록 해야 한다. 변수가 저장하고자 하는 값에 따라서 특정의 접두어를 사용하면 변수명 만으로도 어떤 값이 저장될 것인지 쉽게 알 수 있을 것이다. 마지막으로 의미가 혼동되도록 사용하지 않도록 해야하고, 여러 단어를 사용할 경우에는 첫 문자는 대문자로 사용하도록 하자.

위의 기본적인 조건만 생각하고 변수를 사용한다면 코드가 복잡해지더라도 쉽게 코드를 읽을 수 있을 것이다. 그리고 ASP 변수의 또 다른 특징 중 하나가 대소문자의 구분이 없다는 것이다. 다른 언어와는 달리 대소문자의 구분이 없어 모두 동일한 값으로 인식되지만 이 두 가지가 구분되지 않더라도 하나의 형식에 맞추어 사용하도록 해야 할 것이다.

상수

변수가 프로그램 코드에서 변하는 값을 저장하는 곳이라면 상수는 항상 똑같은 값을 저장하고 있는 곳이라 할 수 있다. 즉 상수라는 것은 프로그래머나 시스템에 의해 미리 정해져있는 것으로, 복잡한 숫자의 값을 인지하기 쉬운 문자로 변경하여 사용하고자 할 때 주로 사용한다.

상수의 선언은 Const라는 키워드를 이용하여 변수의 선언과 비슷하게 선언한 후 값을 대입한다. 그리고 상수명은 대문자를 주로 사용한다.


Const MAXMEMBER = 12039382


위와 같이 선언된 상수값은 그 코드가 끝날 때까지 유지되며, 코드의 중간에 상수값을 변경하려고 다음과 같은 코드를 입력하게 되면 에러메시지가 출력될 것이다.


Const MAXMEMBER = 12039382
MAXMEMBER = 100



에러 메시지 화면

 데이터 형식

데이터 형식이라는 것은 변수나 상수에서 가질 수 있는 값의 형식을 가리킨다. 예를 들어 숫자 데이터 형식과 문자 데이터 형식은 다른 것이다. 실제 프로그래밍에서는 데이터 형식이 상당히 중요하게 된다. 숫자 1과 문자 1은 다른 결과를 가져올 수 있는 부분이기 때문이다.

그러나 ASP에서는 이런 데이터 형식에 대해서 신경 쓸 필요가 없다. 모든 데이터 형식이 Variant라는 특별한 변수 형식을 가지고 있기 때문에 사용되는 곳에서 적당한 형식으로 변환되기 때문이다. 그렇기 때문에 ASP에서는 실제로 데이터 형식을 지정하여 사용할 수는 없다. 만일 선언하고자 한다면 ASP에서는 에러를 출력하게 된다. 즉, 모든 변수와 같은 것들은 Variant로 되어있고 사용되는 곳에서 자동으로 변환되어 ASP가 가질 수 있는 데이터 형식으로 적용된다. 그럼 ASP가 가질 수 있는 데이터 형식은 어떤 것이 있는지 알아보자.


1) 숫자 데이터 형식

① 정수형(Integer)

정수를 저장한다. 정수 데이터의 범위는 -32,768 ∼ 32,767까지이다. 이 범위 이내의 숫자는 정수형에 저장할 수 있다.

② 긴 정수형(Long)

정수형과 비슷하지만 범위의 차이가 있다. 긴 정수형의 데이터 범위는 -2,147,483,648 ∼ 2,147,483,647까지이다.

③ 바이트 (Byte)

바이트는 0 ∼ 255까지의 정수를 저장할 수 있는 데이터형이다. 음수의 값은 저장할 수 없다.

④ 싱글 (Single)

싱글은 -3.402823E38 ∼ -1.401298E-45의 음수와 1.401298E-45 ∼ 3.402823E38 범위(양수)의 단정도 부정 소수점의 값을 저장할 수 있는 데이터형이다.

⑤ 더블 (Double)

더블은 배정도 부동소수점을 저장할 수 있는 데이터형으로, 싱글형보다 훨씬 더 큰 범위의 숫자를 가질 수 있다. -1.79769313486232E308 ∼ -4.94065645841247E-324의 음수와 4.94065645841247E-32 ∼ 1.79769313486232E308의 양수의 범위를 가진다.

⑥ 통화 (Currency)

통화형을 저장하기 위한 데이터형으로 소수 네 자리까지의 숫자를 받는다. -922,337,203,685,477.5808 ∼ 922,337,203,685,488.5807의 범위를 가진다.


2) 문자 데이터 형식

문자열은 큰따옴표로 둘러싸인 데이터를 저장할 수 있다. 그러나 실제 ASP에서는 Variant형을 사용하고 있으므로 기본적으로 문자 데이터 정보를 기억하고 있다.


LangType = "ActiveServerPage"


문자 변수 사용 예


3) 날짜형

날짜에 대한 정보를 저장하기 위해 사용하는 데이터 형식이다. 일반적인 날짜와 시간까지 저장이 가능하다. ASP에서 현재의 날짜와 시간을 알고자 할 경우에 Now() 함수를 사용하여 결과를 출력할 수 있다. 이때 출력되는 형식이 날짜형에 저장될 수 있다.

일반적으로 날짜형의 변수는 #을 붙여 사용한다. 만일 #이 없다면 문자열이나 숫자 데이터형으로 변환될 것이다.


Today = #20/10/2000#


날짜 변수 사용 예


4) 기타

이외의 ASP에서 지원하는 데이터형은 여러 가지가 있다. True나 False의 값을 저장하는 불린(Boolean)이나 전혀 값을 가지고 있지 않은 Empty, 데이터를 가지고 있지 않은 필드를 가리킬 때 사용하는 Null, 객체를 나타내는 Object 등이 있다.

이렇게 ASP에서는 다양한 데이터형식을 지원한다. 그러나 서두에 이야기하였듯이 모든 변수는 Variant를 사용한다는 것을 알고, 데이터가 처리될 때 앞의 여러 가지 데이터형식 중 하나로 변환과정을 거친다.

 연산자

연산자들은 수학적, 논리적 연산 등을 수행하는 기호들을 가리킨다. 앞서 알아본 변수나 상수를 이용하여 프로그램에서 새로운 결과 값을 구하고자 할 때 사용되며 프로그래밍을 하기 위한 목적중의 하나이다. 기본적인 연산자로 가장 많이 사용하고 있는 대입 연산자인 등호(=)를 들 수 있지만, 이외의 여러 가지가 ASP에서 지원된다. 지금부터 각각의 연산자들에 대해서 알아보자.


1) 산술 연산자

산술(Arithmetic) 계산을 위한 연산자들이다. 기본적으로 가감승제의 작업을 수행한다.

연산자 설명
+ 더하기
- 빼기
* 곱하기
/ 나누기
^ 지수
- 음수
mod  나머지
[표] 산술 연산자

다음의 예제 소스코드를 입력한 후 실행하여 보자. 산술 연산자가 어떻게 실행되는지 결과를 확인할 수 있을 것이다.

● arithmetic.asp


<%@ Language=VBScript %>
<%

Num1 = 10
Num2 = 3
Response.Write "Num1 + Num2 = " & (Num1 + Num2) & "<BR>"
Response.Write "Num1 - Num2 = " & (Num1 - Num2) & "<BR>"
Response.Write "Num1 * Num2 = " & (Num1 * Num2) & "<BR>"
Response.Write "Num1 / Num2 = " & (Num1 / Num2) & "<BR>"
Response.Write "Num1 ^ Num2 = " & (Num1 ^ Num2) & "<BR>"
Response.Write "Num1 mod Num2 = " & (Num1 mod Num2) & "<BR>"

%>



[그림 6-1] arithmetic.asp 결과


2) 관계 연산자

관계(relational)라는 것은 둘 사이의 비교를 하여 결과를 얻는다는 말이다. 두 변수 사이의 관계를 알고자 할 때 사용되는 관계 연산자들은 다음과 같다.

연산자 설명
= 같다
< ∼보다 작다
<= ∼보다 작거나 같다
<> 같지 않다
> ∼보다 크다
>= ∼보다 크거나 같다


관계 연산자의 사용을 알아볼 수 있는 다음의 예제를 실행하여 보자. 우선 코드의 입력을 하기 전에 If... Then...에 대해서 간단히 설명하겠다. 실제로 ASP에서 관계를 비교하기 위한 구문으로 If 다음의 조건이 입력되며, 입력된 조건의 True와 False의 여부를 알려주게 된다. 이 조건에 주로 관계 연산자를 사용하게 되며 조건의 참(True)일 경우에는 Then 다음의 구문을 실행하고, 거짓(False)일 경우에는 Else 다음의 구문을 실행한다.

● relational.asp


<%@ Language=VBScript %>

<%

Num1 = 10
Num2 = 3

Response.Write "Num1 = " & Num1 & "<BR>"
Response.Write "Num2 = " & Num2 & "<BR>"

if Num1 > Num2 then
  Response.Write "Num1이 Num2보다 크다.<BR>"
else
  Response.Write "Num1이 Num2보다 같거나 작다.<BR>"
end if

if Num1 = Num2 then
  Response.Write "Num1과 Num2가 같다.<BR>"
elseif Num1 <> Num2 then
  Response.Write "Num1와 Num2는 다르다.<BR>"
end if

%>



[그림 6-2] relational.asp 결과


3) 논리 연산자

조건에 대한 논리(Logical) 연산을 하기 위한 연산자들이다. 논리곱, 논리합, 부정 등이 주로 사용되며 조건문에 주로 사용된다.


연산자 설명
AND 논리곱, 두 조건이 모두 참이어야 참이 된다.
OR 논리합, 두 조건 중 하나만 참이면 참이다.
NOT 부정, 조건 값을 반대로 만든다.
XOR Execlusive OR


ASP에서 주로 사용하는 것이 AND, OR, NOT이다. 각각의 논리 연산자는 앞의 관계 연산자들과 마찬가지로 If... Then... 문에서 주로 사용되어 조건의 논리 연산을 하게 된다. 다음의 예제를 살펴보자.

● logical.asp


<%@ Language=VBScript %>

<%

Num1 = 10
Num2 = 3

if Num1 = 10 AND Num2 = 3 then
  Response.Write "Num1은 10, Num2는 3의 값을 가진다.<BR>"
end if

if Num1 = 9 AND Num2 = 3 then
  Response.Write "Num1은 9, Num2는 3의 값을 가진다.<BR>"
else
  Response.Write "Num1과 Num2는 조건을 만족하지 않는다.<BR>"
end if

if Num1 = 9 OR Num2 = 3 then
  Response.Write "Num1과 Num2 둘 중 하나 이상은 조건을 만족한다.<BR>"
end if

if NOT Num1 = 9 OR NOT Num2 = 2 then
  Response.Write "Num1과 Num2 둘 중 하나 이상은 조건을 만족한다.<BR>"
end if

%>



[그림 6-3] logical.asp 결과

코드의 첫 부분에서 Num1은 10, Num2는 3의 값을 가진다. 이렇게 할당된 값을 기준으로 조건문에서 비교작업이 이루어지게 된다.

첫 번째 [if Num1 = 10 AND Num2 = 3 then]에서는 Num1=10의 조건은 참, Num2=3의 조건도 참이므로 AND에 의해 참의 조건이 되는 것이다. 그렇기 때문에 Then 다음의 문장이 실행된다.

두 번째 [if Num1 = 9 AND Num2 = 3 then]에서는 Num1=9의 조건은 거짓, Num2=3의 조건은 참이므로 두 조건 중 하나만 참이기 때문에 AND에 의해 이 조건은 거짓이 된다.

세 번째 [if Num1 = 9 OR Num2 = 3 then]에서는 Num1=9의 조건은 거짓, Num2=3의 조건은 참이므로 두 조건 중 하나만 참이기 때문에 OR에 의해 이 조건은 참이 된다.

네 번째 [if NOT Num1 = 9 OR NOT Num2 = 2 then] Num1=9가 아닌 것이 참이고, Num2=2가 아닌 것이 참이다. 각각의 조건 앞에 Not에 의해 모든 조건이 참이 된다.


4) 연결 연산자

지금까지의 연산자 이외에도 ASP에서 자주 사용되는 연산자가 있다. 바로 문자열의 합칠 때 사용하는 연결 연산자인 "&" 이다. 앞의 다른 연산자들의 예제에서도 볼 수 있는 & 연산자는 문자열을 합치는 기능을 수행한다. 다음의 예제를 살펴보자.

● string.asp


<%@ Language=VBScript %>

<%

Str1 = "Hello"
Str2 = "ASP"

Response.Write Str1 & " " & Str2

%>



string.asp 결과

데이터 형식 변환

앞에서 알아본 바와 같이 ASP에서 모든 변수는 Variant에 값을 할당한다. 그러나 Variant로 할당하는 것이 자기가 원하는 데이터의 값으로 출력되지 않을 수 있다. 예를 들어 정수의 범위에서 나누기의 결과값을 구하고자 하는데 Variant로 데이터 형식이 설정되어 있다면 정수가 아닌 실수의 값으로 변환되어 출력될 것이다. 산술 연산자에서의 나누기 연산자 예제를 보면 알 수 있다. 그렇기 때문에 ASP에서는 Variant형을 자기가 원하는 데이터 형식으로 변환할 수 있도록 지원하고 있다. ASP에서 지원되는 데이터 형식 변환 함수들은 다음과 같다.



변환 함수 변환 결과
Cbool Boolean
Cbyte Byte
Ccur Currency
Cdate Date
CDbl Double
Cint Integer
CLng Long
CSng Single
CStr String
Cvar Variant
CVErr Error



이 함수들을 이용하면 자기가 원하는 데이터 형식으로 변환이 가능하다. 단 주의해야 할 것은 변환 함수에 전달되는 값은 변환 하고자 하는 데이터 형식과 같아야 한다는 것이다. 그렇지 않을 경우에는 오류가 발생하게 된다. 또한 변환하는 데이터의 범위는 변환하고자 하는 형식의 범위 안에 있어야 정상적인 결과가 출력된다.

다음의 예제 코드를 실행하여 보자. 문자열로 할당되어 있는 변수를 숫자형 데이터 형식으로 변환하여 산술 연산을 하는 과정을 살펴보겠다.

● conversion.asp


<%@ Language=VBScript %>

<%

Var1 = "1234.5678"
Var2 = "987.321"

' 문자열의 더하기
Response.Write Var1 + Var2 & "<BR>"

' 문자열의 빼기
Response.Write Var1 - Var2 & "<BR>"

' 싱글형의 변환
Response.Write Csng(Var1) - Csng(Var2) & "<BR>"

' 정수형의 변환
Response.Write Cint(Var1) - Cint(Var2) & "<BR>"

' 싱글형의 변환 후 정수형으로 변환
Response.Write Cint(Csng(Var1) - Csng(Var2)) & "<BR>"

%>



[그림 7-1] conversion.asp 결과

위 예제를 다시 한번 살펴보자. 우선 첫 부분에 Var1과 Var2에 문자형 값을 할당한다. 이렇게 할당되어진 문자형 값의 더하기 연산은 산술 연산의 결과로 반영되지 않고, 단순히 문자열을 합친 결과가 나온다. 이후의 변환 작업에서 싱글형과 정수형의 변환 과정에 대해서 이해한 뒤 마지막에 있는 두 출력 결과를 주의 깊게 살펴보자. 우선 정수형의 변환의 경우에는 각각의 변수를 먼저 정수로 변환한 다음에 빼기 연산을 수행한 결과가 248이고, 마지막의 싱글형으로 변환하여 빼기 연산을 수행한 결과를 정수형으로 변환한 결과는 247이다. 이것을 무엇을 나타내는가? 프로그래머가 정확한 데이터 형식의 변환과정을 거치지 않으면 잘못된 결과가 출력될 수도 있다는 것을 알려주고 있는 것이다. 자기가 원하는 작업을 정확하게 수행하고자 한다면 어떤 변환 작업이 이루어져야 하는지 고민한 후 사용하는 습관을 가지도록 해야 할 것이다.

배열

다른 프로그래밍 언어를 다루어 본 경험이 있다면 배열의 개념이 친숙할 것이다. 배열은 하나의 변수의 이름에 인덱스 번호를 사용하여 다른 값을 저장할 수 있는 데이터의 집합을 이야기한다. 쉽게 이야기하면 서류 폴더라고 생각할 수 있다. 주제에 맞는 여러 가지 데이터들이 순서대로 저장되어 있는 폴더로 생각하면 된다. 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차원 이상의 경우가 생긴다면 배열이 아닌 다른 데이터베이스나 파일을 이용하는 방법을 찾아야 할 것이다.

'Web Development > ASP' 카테고리의 다른 글

[ASP] 폼과 ASP  (0) 2009.06.06
[ASP] 제어 구문에 대해서  (0) 2009.06.06
[ASP] 프로그램 구조에 대해서  (109) 2009.06.06
[ASP] 내장 객체 에 대해서  (0) 2009.06.06
[ASP] 개체모델에 대해서  (3) 2009.06.06