변수는 데이터를 담아두는 상자(메모리영역)라고 정의하였지요. 그럼 이제 데이터에 대해 알아봅시다.

데이타는 여러가지 정보를 총합해서 지칭합니다. 예를 들어 사람의 이름, 날짜, 숫자 따위의 정보들은 그 형태가 각각 다름니다. 실제로 이런 데이타들은 구분해야 합니다. 하지만 그냥 편의상 테이터라고 정의하고 이용하게 되지요.

예를 들어 C 언어의 경우 문자형데이타와 숫자형데이타로 구분하고 숫자형데이타일경우에는 다시 정수형과 실수형으로 구분하고 각각 그 데이타를 취급하는 변수의 선언도 다르게 하여 그 변수에는 선언된 데이타형만 대입할 수 있습니다.

하지만 asp 의 경우에는 VBScript의 Dim를 이용하여 변수를 만들기 때문에 이런 복잡한 테이타의 형태를 구분하지 않고 바로 사용합니다.

좀더 정확하게 이야기하면 asp의 경우에는 VBScript의 Variant라는 변수타입을 사용합니다. 그런데 이놈의 Variant라는 변수타입은 아주 특별한 성질을 가지고 있는데

아무거나 다 저장할 수 있다는겁니다. C 언어처럼 저장될 데이타를 구분하여 그 형을 미리 선언할 필요가 없다는거죠.. 한마디로 엄청 편하다는 겁니다.

다음은 변수를 선언하는 방법입니다.( 아는 내용이죠?)



이렇게 하면 vartemp라는 이름을 가진 변수가 생성되고 어늘 일정한 주소를 가지는 메모리를 할당 받습니다.

여기에 정수값 10 을 넣어는 방법은? - 쉽죠? 그냥 다음과 같이 써주면 됩니다.
Dim vartemp

vartemp=5


이번엔 다른 데이타를 넣어봅시다. tianai 라는 문자를 넣어봅시다.

vartemp="tianai"


위에서 보면 약간의 차이점이 있습니다. - 맞습니다. " " 마크를 사용하고 안하고의 차이입니다. 이것은 아래에서 좀 더 깊에 알아봅시다.

이제 조금 깊이 들어갑시다.

변수에 저장되는 데이터의 형(실수형이건 정수형이건)에 상관없이 변수생성할때는 그냥 생성한다고 했습니다. 이걸 Variant 타입이라고 한다고 했고...

하지만 실제적으로 돌아가는것을 보면 VBScript는 Variant에 저장된 데이타의 타입을 추적합니다. 즉 스스로 알아서 잘난척하면서 우리가 임의로 넣어준 데이타의 타입을 구별한다는 것입니다.

예를 들어 우리가 정수 5를 넣었다면 추적해서 스스로가 아....이것은 정수구나..라고 Variant에 할당합니다. 이번에 5.5 를 넣었다면 ... 스스로가 추적해서 아 이것은 실수구나 하고 Variant에 할당을 한다는 것입니다.

즉 이렇게 변수에 대입된 데이타의 타입을 스스로가 구별,판독(이의 기준을 서브타입이라고 합니다)해서 Variant에 할당합니다.

서브타입에는 크게 숫자 서브타입,스트링(문자) 서브타입,날짜 서브타입,불린 서브타입 그리고 기타 서브타입으로 나눕니다.

이건 머냐면 결국 데이타를 분류한다는거죠...스스로가..알아서...잘난척하려고^^

숫자에는 여러가지 종류가 있습니다. 즉 데이타의 숫자를 넣었다면 스스로가 알아서 서브타입을 결정한다는 거죠..

1.숫자 서브타입

- 정수(Integer) : 예를 들어 3, 6, 9 (삼육구 삼육구 일 이 ...^^), -300,100,-20 이런 숫자들을 우린 정수라고 하는거 다 아시죠? 이런 정수들 중에서 -32768 에서 + 32768 까지 사이에 있는 정수가 데이타로 변수안에 있다면 이것을 숫자 서브타입 integer로 구분합니다. (16bit 로 데이타를 표현)

- 긴정수(Long) : 이건 위에서 설명한 정수(Integer)보다 클때, 즉 -2147483648 에서 +2147483647 까지의 정수가 들어 있을때 구분됩니다.(32비트로 데이타를 표현)

- 바이트(Byte) : 0 ~ 255 까지의 정수일때

- 싱글(Single) : 보통 C 언어에서 실수형일때와 같습니다.

- 더블(Double) : 싱글의 두배입니다.

- 통화(Currency) : 소수점 4자리가지의 숫자를 받아들인다.

스트링 서브타입

스트링은 문자를 의미합니다. 맨위에서 우리가 변수에 값을 넣을때 숫자일때는 그냥 아무것도 써주지 않았지만 문자를 대입할때는 " " 를 이용해서 구분을 해 주었습니다. 이것은 변수에 대입되는 정보의 서브타입이 숫자 서브타입인지 스트링 서브타입인지를 구분해주는 역확을 합니다.

이게 무슨 말인가 하면..

vartemp=5
vartemp="5"


위에서 보면 똑같이 5를 대입하는거지만 전혀 다른 서브타입을 가지고 있죠. 즉 " " 를 이용해서 대입한것은 스트링 서브타입이고 아무것도 없이 그냥 5라고 대입한것은 숫자 서브타입이라는 겁니다.

이게 머가 중요한가. 우린 숫자와 문자를 구분할수 있죠? 즉 똑같은 5 라고 해도 어떤것은 숫자타입이 될 수 있고 그냥 문자로 인식할 수 있다는 겁니다.

연산할때 이런것이 중요하다는것을 느낄겁니다. 우리가 5+5를 연산한하면 당연히 10이 나와야 하지만 숫자 5와 문자 5를 더한하면 어떤 값이 나올까요? - 몰라요 하지만 10 이라는 결과가 나오지 않는다는것은 자명합니다.

그래서 숫자서브타입과 문자 서브타입을 꼭 구별해야 합니다.

날짜 서브타입

오늘이 2000년 12월 25일이라고 가정해봅시다. 이걸 표현하는 방법은 많이 있지만 다음과 같이 표현해 보면 12/25/2000 이고 숫자도 아니고 스트링도 아니고 날짜서브타입이라고 합니다.

날짜 서브타입을 변수에 넣는 방법은 다음과 같이 조금 특이합니다.

varData=#12/25/2000#


숫자와 스트링 서브타입을 넣을때 와는 분위기가 틀리지 않습니까?

데이타 서브타입을 왜 구별하는지는 다음 소스에서 자명합니다.

<%
varDate1=#12/25/2000#
varDate2=#11/20/2000#
varDate3=varDate1-varDate2
Response.write varDate3
%>


위의 소스를 저장해서 확인해보면 결과는 35가 나옵니다. 왜 그런지 아시죠?

불린 서브타입 - 부울린 , Boolean

다 아시다 시피 컴퓨터는 0 와 1 만 이용해서 연산을 합니다. 우린 1을 참이라고 하고 영어로는 TRUE , 0 을 거짓이라고 표현하고 영어로는 FALSE 라고 씁니다.

여기서 FALSE 또는 TRUE 를 불린 서브타입이라고 합니다. 즉 참 또는 거짓의 두가지 값중 하나만 가질때 이를 불린 서브타입이라고 합니다. 다 아는거죠?
그 값을 넣을때는 다음과 같이 합니다.
blnVarient1=FALSE
blnVarient2=TRUE


특별한 서브타입

Empty : 변수에 아무런 값을 가지고 있지 않다.

NULL : 테이터타입과 테이터값이 없다.

Object : 생략(나중에 언급됨)

Error : 생략(거의 사용되지 않는다)

이상입니다. 여기까지가 서브타입에 대한 간단한 설명이었습니다.

그런데 복잡하죠? 그럴수밖에 없습니다. 데이타들의 종류가 워낙 많다보니깐 이렇게 세분해서 연산을 해야지 우리가 원하는 대로 연산이 됩니다.

그럼 이걸 다 외어야 하는가? - 외우면 좋죠 아니면 이해만 해도 상관없습니다.

그런데... 다음과 같이 좋은 방법이 있습니다. 우리가 사용하는 변수의 데이타의 서브타입이 무엇인가를 바로 알 수 있는 함수가 있습니다.

다음과 같이 소스를 저장하고 확인해보세요.

<%
var=5
subtype=Typename(var)
Response.write subtype
%>


위소스의 결과는 Integer 라고 나옵니다. 여기서 함수 Typename() 이 쓰였습니다. 이 함수는 () 안에 인수를 넣으면 그 인수의 서브타입을 리턴시킴니다.

리턴된 서브타입을 subtype이라는 변수에 넣어 Response.write를 이용해서 출력한것이죠. 그러니깐 우리가 변수를 사용하다가 이게 무슨 서브타입인지 알아보는 가장 편한 소스입니다.

첫줄의 var=5 대신에 var="tianai", var=#12/25/2000# 따위의 다른 데이터를 넣어보시고 확인해보세요.

이상 데이터타입에 대해 간단하게 정리하였습니다.