ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [강좌] ASP 에서 CLASS(클래스) 사용하기
    달을파는아이 2008. 4. 29. 09:23
    php에만 심취하다가 새로온 회사에서 asp 위주라서 asp를 정말 몇년만에 접하게 되었다.
    php에서 클래스 쓰는게 몸에 익어서 asp도 클래스를 써볼까 해서 asp 잘하시는분에게 asp에서 클래스는 어떻게 하면 되는지 물었다. 그런데. asp에는 클래스가 없다는거다!!!

    헉.. 이런 췐장.. 그럼 함수로 인클루드 해서 다해야하는거야? 라고 낙담을 하다가.. 혹시나 해서 구글에서 열라 찾아봤다. 그러다 보니.. 클래스가 있었다. asp에도 클래스가 있는거다.

    우리나라 asp 책 어디에도 나와있지 않은 클래스가 있는거다.
    그래서.. 혹시나 asp는 클래스가 없다고 생각하시는분들을 위해서 강좌 아닌 소개수준의 글을 적어본다. 물론 기억력 나쁜 나에게도 대체 기억장치로 글을 남긴다.

    그리고 본 글은 다른 언어에서 클래스를 접해 본 분들을 위해 간단한 소개 수준이라 클래스가 무엇인지? 라는 원론적인 이야기는 하지 않는다.

    ASP에는 아쉽게도 상속이 되질 않는다. ASP.NET에 가면 지원된다고 들은것같기도 하지만 오리지날  ASP에는 지원되지 않는다. 이점도 유의 하시고..

    ASP 클래스의 시작

    CLASS TESTCLASS
      .....
    END CLASS


    일단 시작은 저렇게 시작하고 마친다. 보통의 SUB 나 FUNCTION이랑 비슷하다.

    그리고 클래스의 시작과 마침에 자동으로 실행되는 함수를 넣어야 하는데 아래와 같다

    Private Sub Class_Initialize()
    ... 클래스 생성될때 자동으로 실행
    END SUB
    Private Sub Class_Terminate()
    ... 클래스 닫힐때 자동으로 실행
    END SUB


    위는 보통 디비는 항상 열고 닫기 때문에  두 함수에 DB를 열고 닫는것을 넣어두면 편하다.
    물론,, 디비접속과 아무관련이 없는 클래스의 경우 넣을 필요는 없다.

    여튼 여기까지를 한번에 묶으면 ..


    CLASS TESTCLASS

        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

        END SUB
        Private Sub Class_Terminate()
           '디비 끊기
            thisDbCon.Close
            thisDbCon=Noting
        END SUB
    END CLASS


    이게 기본 세트라고 할수 있다. 이 이후에는 클래스에 함수들을 하나씩 추가시키면 된다. 그러면 알흠다운 클래스가 만들어지게 되겠다.

    그러면 만들어 놓은 클래스를 다른 페이지에서 불러서 사용하는 방법을 보겠다.

    먼저 저 클래스를 CLASS.TEST.ASP 라는 이름으로 저장한다.
    이름에 CALSS가 들어가는건 특별한 이유가 있는게 아니고 그냥 다른 파일들과 구분하기 위한것이니 이름은 원하는데로 해도 상관없다

    <!--#include virtual="CLASS.TEST.ASP"-->


    먼저 페이지 상단에 위와같이 클래스를 인클루드 시킨다.

    SET CLASSTEST=NEW CLASSTEST


    그런 다음 위와 같이 클래스를 생성한다.

    클래스의 좋은 점은 함수와 달리 클래스를 생성하면 같은 함수들이 독립적으로 작동된다는것이다.

    SET CLASS1=NEW CLASSTEST
    SET CLASS2=NEW CLASSTEST
    SET CLASS3=NEW CLASSTEST


    이렇게 생성해서 사용해도 클래스안의 같은 이름의 변수나 함수들이 독립적으로 행동할수 있다는것이다. 그리고 그냥 인클루드로 함수들을 나열해서 인클루드 할때보다 정리가 쉽고 다른 사이트에 적용하기도 좋다

    클래스가 왜 좋은지 사용하기 좋은지에 대한건 구글이나 네이버에 찾아봐주시고~

    일단 생성된 클래스의 함수를 실행해 보겠다.

    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

        PUBLIC FUNCTION GETDIC()

            Set D=CreateObject("Scripting.Dictionary")
            D.add "BANANA", "100"
            D.ADD "DDALGI","200"
            D.ADD "SO","300"

            SET GETDIC = D

        END FUNCTION
    END CLASS

    '사용하기

    Set DICTEST=NEW DICTEST
    SET DATA=DICTEST.GETDIC

    RESPONSE.WRITE DATA("BANANA")


    보낼때나 받을때나 SET 을 붙여주는게 포.인.트


    대충 이정도로 강좌 아닌 소개를 마칠까 한다. 먼가 중요한 무언가를 빼먹은것같은 기분은 머지??


    대충 찾은 클래스 소개 페이지들
    http://blog.naver.com/yanione?Redirect=Log&logNo=70016736125
    http://www.daniweb.com/tutorials/tutorial19997.html (아쉽게도 영어)





    댓글

달을파는아이 @ nalab.kr