vb6에서는 클래스 상속이 없다.
그러나 인터페이스 구현은 가능하다.

소스로 예를 들어보겠다.
프로젝트를 생성 ActiveX Dll로 생성한다.
클래스에
달랑 메소드 명만 입력하고 코드는 입력하지 않는다.

Option Explicit

Public Sub TestInterface()
End Sub

접근자는 Public으로 입력해야 된다.

다음은 Exe프로젝트를 하나 추가한다.
그리고 참조에서 이전에 프로젝트명을 찾아 참조에 추가한다.
그리고 Exe 프로젝트에 클래스 모듈을 하나 추가하고
Implements를 사용해 이전의 프로젝트 클래스 메소드를 다시 구현한다.
상단의 콤보 박스에 클래스명과 메소드를 선택해도 관계없다.
Option Explicit

Implements clsInt

Private Sub clsInt_TestInterface()
    MsgBox "Class1"
End Sub

Public Sub test()
    Debug.Print "test"
End Sub

다음은 폼 모듈에 버튼 하나를 올리고
폼 모듈 소스에서 이전 프로젝트의 클래스에 대한 개체 변수를 생성하고
같은 프로젝트의 클래스에 개체를 생성해서 위의 개체 변수에 참조시켠 참조가 된다.
왜 인터페이스가 같기 때문이다.
그러면 개체변수.메소드를 호출하게 되면
현재 프로젝트에 구현된 인터페이스 프로시저가 호출된다.
Option Explicit

Private Sub Command1_Click()
    Dim b As clsInt ' 인터페이스 개체 변수 생성
    Set b = New Class1 ' 클래스 개체를 생성하여, 인터페이스 개체 변수에 할당
    b.TestInterface ' 인터페이스 메소드 호출하면, 인터페이스 개체 변수에 할당된 개체의 원래 클래스의 메소드가 호출된다.
    
    Dim c As Class1 ' 클래스 개체 변수 생성
    Set c = b ' 클래스 개체 변수에 인터페이스 개체 변수에 할당된 개체 할당
    c.test ' 개체의 클래스에 구현된 메소드 호출
End Sub

같은 형태의 메소드를 사용하는 클래스가 많은 경우, 이들을 효과적으로 관리하기 위해 인터페이스를 사용하므로
각 클래스에 코드는 다르지만 서로 같은 메소드 이름과 형식을 같게 되므로
서로 다른 클래스 개체라도  같은 방법으로 메소드를 호출하게 되므로, 루프를 돌리게된다던지 하는 방법으로 사용할
수 있다.

인터페이스 클래스와, 대상 클래스를 같은 그룹 프로젝트에 포함시키던지
따로 DLL을 만들어 참조하는 형태로 사용할 수 있다. 따로 DLL을 생성하면 후기 바인딩도 가능하다.

인터페이스를 상속하는 클래스가 있다고 할때, 인터페이스의 추가한 경우는 관계 없지만, 추가된 기능을 삭제한 경우에
는 클래스에서 DLL 생성시에 아래와 이미지와 같은 에러가 발생된다

이때는 프로젝트 속성에 구성요서 탭에 버전 호완성에서 호환성 없음으로 선택하고 DLL 생성할수 있으면 다시 이전의 호환성으로 선택하면 된다.

+ Recent posts