2003. 10. 22. 14:24

메서드에 대한 간단한 강좌

오늘은 메서드에 관해 이야기를 하려고 합니다.

F8을 눌러서 한라인씩 실행을 시켜서 실행을 해보십시오.

어떻게 클래스에서 선언된 메서드를 호출하고 어떻게 동작이 되는지 알아 보십시오.



▨ 클래스의 메서드(Method)

오늘은 클래스의 메서드에 대해서 진행을 하겠습니다.
메서드는 일종의 프로시져(Sub, Function)이며 글래스 모듈에서 작성이되면 일반적으로 메tj드라고 부립니다.
클래스에서의 메소드란 표준모듈의 사용자 정의 프로시져와 같습니다.

메tj드도 Public과 Private로 선언을 해서 사용을 하며 어느것으로 선언을 했는지에 따라서 외부로부터 호출을 할 수 있는지 없는지
결정을 할 수 있습니다.

저번 강좌에서 했던 1부터 100까지 구하는 예제는 메소드를 이용하지 않고 사용을 했는데 좋은 방법은 아님니다.
Property Get 프로시져는 오로직 외부로부터 값을 전달만 해주는 기능으로만 이용을 하는 것이 바람직합니다.

다음 예제는 1부터 100까지 구하는 메소드입니다.
Public Sub Compute()
    Dim i%
    Dim Tot%
    Tot = 0
    For i = 1 To MyValue
        Tot = Tot + i
    Next
    MyValue = Tot
End Sub

기존에 표준모듈에서 사용을 하던 사용자 정의프로시져와 비슷하다는 걸 알 수 있을 겁니다.
단지 틀린 점은 100까지 구한 결과를 MyValue라는 클래스에서 선언된 변수에 넣는다는 점입니다.


▨ 클래스 메소드 예제

이번 예제는 1부터 100까지 합을 구하는 방법을 클래스의 메서드와 표준모듈의 사용자정의프로시져를 이용해서 그 결과값을 구하는 예제 입니다.

소스에 각 Command Button의 Click이벤트를 보면 클래스의 메소드보다 사용자정의 프로시져를 이용하는 것이 훨씬 소스의 간결함을 볼 수 있을 겁니다.
하지만 표준모듈에서는 이벤트를 만들 수 없다는 단점이 있습니다.
이 클래스이벤트는 나중에 설명을 하지요.

폼에 Command Button을 2개 추가를 하고 표준모듈과 클래스모듈을 각각 하나씩 추가를 합니다.

*** Form1 ***
Private Sub Command1_Click()

    Dim Result As Integer
    Dim C1 As Class1

    Set C1 = New Class1

    C1.MyData = 100
    C1.Compute '클래스의 메서드를 호출합니다.

    Result = C1.MyData

    MsgBox "클래스에서 구한 결과 값 " & Result

    Set C1 = Nothing

End Sub

Private Sub Command2_Click()

    Dim Result As Integer

    Result = Compute(100)

    MsgBox "사용자 정의 프로시져에서 구한 결과 값 " & Result

End Sub


*** Class1 ***
Private MyValue As Integer

Public Property Let MyData(Value As Integer)
    MyValue = Value '외부에서 값을 전달 받는다
End Property

Public Property Get MyData() As Integer
    MyData = MyValue '내부에서 사용한 변수의 값을 외부로 전달한다
End Property

Public Sub Compute()
    Dim i As Integer
    Dim Tot As Integer
    Tot = 0
    For i = 1 To MyValue 'Property Let로 전달 받은 값으로 반복문을 실행
        Tot = Tot + i
    Next
    MyValue = Tot '반복된 결과값을 내부에서 사용하는 변수에 저장
End Sub


*** Module1 ***
Public Function Compute(Value As Integer) As Integer
    Dim i As Integer
    Dim Tot  As Integer
    Tot = 0
    For i = 1 To Value
        Tot = Tot + i
    Next
    Compute = Tot
End Function