asp 클래스(class) 사용하기
ASP 클래스의 시작
CLASS SampleClass
......................................................
END CLASS
일단 시작은 저렇게 시작하고 마친다. 보통의 SUB 나 FUNCTION이랑 비슷하다.
그리고 클래스의 시작과 마침에 자동으로 실행되는 함수를 넣어야 하는데 아래와 같다
Private Sub Class_Initialize()
... 클래스 생성될때 자동으로 실행
END SUB
Private Sub Class_Terminate()
... 클래스 닫힐때 자동으로 실행
END SUB
위는 보통 디비는 항상 열고 닫기 때문에 두 함수에 DB를 열고 닫는것을 넣어두면 편하다.
물론,, 디비접속과 아무관련이 없는 클래스의 경우 넣을 필요는 없다.
여튼 여기까지를 한번에 묶으면 ..
CLASS SampleClass
private thisDbCon
Private Sub Class_Initialize()
'디비접속
Set thisDbCon=Server.CreateObject("ADODB.Connection")
StrDBConnect = "Provider=ORAOLEDB.ORACLE;Password=***;User ID=****;Data Source=****;Persist Security Info=True;"
thisDbCon.Open StrDBConnect</p>
END SUB
Private Sub Class_Terminate()
'디비 끊기
thisDbCon.Close
thisDbCon=Noting
END SUB
END CLASS
이게 기본 세트라고 할수 있다. 이 이후에는 클래스에 함수들을 하나씩 추가시키면 된다. 그러면 알흠다운 클래스가 만들어지게 되겠다.
그러면 만들어 놓은 클래스를 다른 페이지에서 불러서 사용하는 방법을 보겠다.
먼저 저 클래스를 CLASS.TEST.ASP 라는 이름으로 저장한다. 이름에 CALSS가 들어가는건 특별한 이유가 있는게 아니고 그냥 다른 파일들과 구분하기 위한것이니 이름은 원하는데로 해도 상관없다
먼저 페이지 상단에 위와같이 클래스를 인클루드 시킨다.
그런 다음 위와 같이 클래스를 생성한다.
클래스의 좋은 점은 함수와 달리 클래스를 생성하면 같은 함수들이 독립적으로 작동된다는것이다.
일단 생성된 클래스의 함수를 실행해 보겠다.
CLASS TEST
Private Sub Class_Initialize()
END SUB
Private Sub Class_Terminate()
END SUB
'A+B 함수
PUBLIC FUNCTION GETSUM(A,B)
GETSUM=A+B
END FUNCTION
END CLASS
SET T=NEWTEST
RESPONSE.WRITE T.GETSUM(10,20)
위의 간단한 합계 함수이다. 화면에는 30이 뿌려질테고..
저걸 좀더 바꿔보면..
CLASS TEST
Private Sub Class_Initialize()
END SUB
Private Sub Class_Terminate()
END SUB
PUBLIC FUNCTION GETSUM(NUMARR)
DIM I,RESULT
FOR I=0 TO UBOUND(NUMARR)
RESULT=RESULT+NUMARR(I)
NEXT
GETSUM=RESULT
END FUNCTION
END CLASS
SET T=NEWTEST
DIM NUMBERS(4)
NUMBERS(0)=10
NUMBERS(1)=20
NUMBERS(2)=100
NUMBERS(3)=200
RESPONSE.WRITE T.GETSUM(NUMBERS)
머 이렇게 배열변수를 바로 넘겨서 사용할수도 있다.
PUBLIC & PRIVATE
PUBLIC 과 PRIVATE 는 다 알다시피 광역이냐 지역이냐 이다. 클래스 안에 쓰이는 변수들이나 함수앞에 PUBLIC 을 붙이면 클래스 밖에서도 사용가능하다. 위의 함수 GETSUM 도 앞에 PUBLIC 이 붙어 있기 때문에 클래스 밖에서 실행이 가능한것이다.
반대로 PRIVATE가 붙으면 클래스 내부에서만 실행된다. 외부에서 불러낼려치면 호출 오류가 뜰것이다.
이건 변수들도 마찬가지다.
추가 팁(?) 딕셔너리 주고 받기 PHP 에서는 배열 자체가 딕셔너리같은거라 주고 받기 편했는데.. ASP에서 이 방법을 찾는데 꽤나 고생했다. 혹시나 같은 고생하는 분이 있을까 해서 적어 본다
이걸 클래스와 연결해서 보면..
CLASS DICTEST</p>
PUBLIC FUNCTION GETDIC()
Set D=CreateObject("Scripting.Dictionary")
D.add "BANANA", "100"
D.ADD "DDALGI","200"
D.ADD "SO","300"</p>
SET GETDIC = D
END FUNCTION
END CLASS
Set DICTEST=NEW DICTEST
SET DATA=DICTEST.GETDIC
RESPONSE.WRITE DATA("BANANA")
ASP 에서 클라스 예제
<%
Class AspTemplate
Private Temp
Private ArrTemp
Private Var
Private SubVar
Public Root
Private fs
'***************************************************
' 클래스를 시작되면 개체를 생성하는 이벤트 핸들러
'***************************************************
Private Sub Class_Initialize
Dim key
Set Temp = server.CreateObject("Scripting.Dictionary")
Set ArrTemp = server.CreateObject("Scripting.Dictionary")
Set Var = server.CreateObject("Scripting.Dictionary")
Set SubVar = server.CreateObject("Scripting.Dictionary")
Set fs = Server.CreateObject("Scripting.FileSystemObject")
Root = Server.MapPath(".") & "\"
For each key in request.form
Var.Item(key) = request.Form(key)
Next
For each key in request.QueryString
Var.Item(key) = request.QueryString(key)
Next
End Sub
'***************************************************
' 파일을 불러들여 템플릿을 정의하는 함수
'***************************************************
Public Function define(variable, filename)
if InStr(filename, ".") > 0 or InStr(filename, "\") > 0 then
fdefine variable, filename
else
ddefine variable, filename
end if
End Function
'***************************************************
' 파일을 불러들여 템플릿을 정의하는 함수
'***************************************************
Public Function fdefine(variable, filename)
Dim fo
Dim buffer
if not fs.FileExists(Root & filename) then
'Temp.Item(variable) = Root & filename & " 파일이 존재하지 않습니다."
Temp.Item(variable) = filename & " 파일이 존재하지 않습니다."
else
Set fo = fs.OpenTextFile(Root & filename,1)
Temp.Item(variable) = include_file(fo.ReadAll)
fo.close : Set fo = nothing
end if
End Function
'***************************************************
' 다이나믹 역영을 정의하는 함수
'***************************************************
Public Function ddefine(variable, parent)
Dim buffer, tmp
buffer = Temp.Item(parent)
tmp = Split(buffer, "<!-- DYNAMIC AREA '" & variable & "' -->")
if Ubound(tmp) = 2 then
Temp.Item(variable) = tmp(1)
Temp.Item(parent) = tmp(0) & "{{" & variable & "}}" & tmp(2)
if SubVar.Item(parent) <> "" then
SubVar.Item(parent) = SubVar.Item(parent) & ":::" & variable
else
SubVar.Item(parent) = variable
end if
end if
End Function
Public Function include_file(buffer)
Dim pos, endpos, filename, tag
Dim fs, fo, tmp, flag
flag = true
Do While flag = true
pos = InStr(buffer, "<!-- INCLUDE FILE '")
if pos <> 0 then
pos = pos + 19
endpos = InStr(pos, buffer, "' -->")
filename = Mid(buffer, pos, endpos - pos)
tag = "<!-- INCLUDE FILE '" & filename & "' -->"
Set fs = Server.CreateObject("Scripting.FileSystemObject")
if not fs.FileExists(Root & filename) then
'buffer = Replace(buffer, tag, Root & filename & " 파일이 존재하지 않습니다.")
buffer = Replace(buffer, tag, filename & " 파일이 존재하지 않습니다.")
else
Set fo = fs.OpenTextFile(Root & filename,1)
buffer = Replace(buffer, tag, fo.ReadAll)
fo.close : Set fo = nothing
end if
set fs = nothing
else
flag = false
end if
Loop
include_file = buffer
End Function
'***************************************************
' 해당변수에 값을 저장하는 함수
'***************************************************
Public Function assign(key, value)
if value = "" or IsNull(value) then
Var.Item(key) = ""
else
Var.Item(key) = value
end if
End Function
'***************************************************
' 해당변수에 값을 저장하는 함수
'***************************************************
Public Function parse(variable)
Dim buffer, count
Dim tmp, tmp1, tmp2, str, arr, svar, i
if IsArray(ArrTemp.Item(variable)) then
tmp = ArrTemp.Item(variable)
count = Ubound(tmp)
str = tmp(0)
For i = 1 to count step 2
str = str & Var.Item(tmp(i)) & tmp(i+1)
Next
else
buffer = Temp.Item(variable)
tmp1 = Split(buffer, "{{")
count = Ubound(tmp1)
if count > 0 then
str = tmp1(0)
arr = tmp1(0)
For i = 1 To count
tmp2 = Split(tmp1(i), "}}")
if Ubound(tmp2) = 1 then
str = str & Var.Item(tmp2(0)) & tmp2(1)
arr = arr & ":::" & tmp2(0) & ":::" & tmp2(1)
else
str = str & tmp1(i)
arr = arr & "::::::" & tmp1(i)
end if
Next
ArrTemp.Item(variable) = split(arr, ":::")
else
str = buffer
end if
end if
Var.Item(variable) = Var.Item(variable) & str
if SubVar.Item(variable) <> "" then
svar = Split(SubVar.Item(variable), ":::")
Var.Item(svar(0)) = ""
count = Ubound(svar)
For i = 1 to count
Var.Item(svar(i)) = ""
Next
end if
End Function
'***************************************************
' 코멘트를 함수
'***************************************************
Public Function comment(variable, parent)
Dim buffer
buffer = Temp.Item(parent)
buffer = replace(buffer,"<!-- " & variable & " START -->","<!--")
Temp.Item(parent) = replace(buffer,"<!-- " & variable & " END -->","-->")
End Function
'***************************************************
' 템플릿을 출력하는 함수
'***************************************************
Public Function print(variable)
Dim buffer, pos, endpos, filename, tag
Dim fs, tmp, flag
buffer = Var.Item(variable)
flag = true
Do While flag = true
pos = InStr(buffer, "<!-- EXECUTE FILE '")
if pos <> 0 then
pos = pos + 19
endpos = InStr(pos, buffer, "' -->")
filename = Mid(buffer, pos, endpos - pos)
tag = "<!-- EXECUTE FILE '" & filename & "' -->"
Set fs = Server.CreateObject("Scripting.FileSystemObject")
if not fs.FileExists(Root & filename) then
'buffer = Replace(buffer, tag, Root & filename & " 파일이 존재하지 않습니다.")
buffer = Replace(buffer, tag, filename & " 파일이 존재하지 않습니다.")
else
tmp = Split(buffer, tag)
response.write tmp(0)
Server.Execute(filename)
buffer = tmp(1)
end if
set fs = nothing
else
flag = false
end if
Loop
response.write buffer
End Function
'***************************************************
' 템플릿을 얻는 함수
'***************************************************
Public Function fetch(variable)
fetch = Var.Item(variable)
End Function
'***************************************************
' 클래스를 소멸하면서 개체를 소멸하는 이벤트 핸들러
'***************************************************
Private Sub Class_Terminate
Set Temp = Nothing
Set ArrTemp = Nothing
Set Var = Nothing
Set SubVar = Nothing
Set fs = Nothing
End Sub
End Class
Set tpl = new ASPTemplate
tpl.define "Design-File", skinPath &"/html/Modify.html"
tpl.define "NL_Wec", "Design-File"
tpl.define "NL_Wec1", "Design-File"
tpl.define "NL_Not_Wec", "Design-File"
tpl.define "NL_Not_Wec1", "Design-File"
tpl.define "NL_Not_TxtAttachFile", "Design-File"
tpl.define "NL_GlobalLev", "Design-File"
tpl.define "NL_UseHtml", "Design-File"
tpl.define "NL_UseHtml_Wec", "Design-File"
tpl.define "NL_ReturnMail", "Design-File"
tpl.define "NL_UsePrivate", "Design-File"
tpl.define "NL_TxtAttachFile_Dext", "Design-File"
tpl.define "NL_TxtAttachFile_Tabs", "Design-File"
tpl.define "NL_BbsMent", "Design-File"
tpl.define "NL_FileAttach", "Design-File"
tpl.define "NL_UseLink", "Design-File"
'기본사용변수
no_value1 = "<!--" : no_value2 = "-->"
tpl.assign "skinPath", skinPath
tpl.assign "id", id
tpl.assign "board", board
%>