Visual Basic 6.0 사용자를 위한 Class_Initialize 변경 사항
업데이트: 2007년 11월
생성자는 개체가 만들어질 때 실행되는 메서드입니다. 생성자는 Visual Basic에 새로 추가된 기능입니다. 생성자는 Visual Basic 6.0의 Class_Initialize 메서드와 New 문의 동작이 결합된 것이며 보다 융통성있고 원활하게 클래스 인스턴스를 만들 수 있습니다. 개체 만들기에 대한 자세한 내용은 개체 만들기 및 사용을 참조하십시오.
Class_Initialize
Visual Basic 6.0
Visual Basic 6.0에서는 Class_Initialize 메서드를 통해 생성자 개념을 지원합니다. 이 메서드는 전용 메서드이므로 매개 변수를 허용하지 않습니다. 클래스의 새 인스턴스가 만들어질 때 이 메서드가 자동으로 호출됩니다. New 키워드를 호출하면 Class_Initialize 메서드가 있는 경우 호출됩니다.
트리의 연간 증가를 기본값인 5년으로 지정하려는 경우에 클래스 코드는 다음과 같습니다.
' Visual Basic 6.0
Private mvarYearlyGrowth As Integer
Public Property Get YearlyGrowth() As Integer
YearlyGrowth = mvarYearlyGrowth
End Property
Public Property Let YearlyGrowth(ByVal newValue As Integer)
mvarYearlyGrowth = newValue
End Property
Private Sub Class_Initialize()
mvarHeight = 5
End Sub
트리를 만들고 해당 속성을 설정하는 코드는 다음과 같습니다.
Dim growingTree As New Tree
growingTree.YearlyGrowth = 10
Visual Basic 2008
Visual Basic 2008에서는 New 키워드를 통해 생성자를 지원합니다. 이런 경우 YearlyGrowth 속성을 설정하는 추가 코드는 필요하지 않습니다. New 키워드를 호출하면 클래스의 오버로드된 New 메서드 중 하나가 호출됩니다. 클래스에 New 메서드가 없는 경우에는 컴파일러에서 매개 변수 없는 메서드를 만듭니다.
Option Strict On
Public Class Tree
Private yearlyGrowthValue As Integer = 5
Public Property YearlyGrowth() As Integer
Get
Return yearlyGrowthValue
End Get
Set(ByVal Value As Integer)
yearlyGrowthValue = Value
End Set
End Property
Public Sub New(ByVal newYearlyGrowth As Integer)
Me.YearlyGrowth = newYearlyGrowth
End Sub
End Class
트리를 만들고 해당 속성을 설정하는 코드는 다음과 같습니다.
Dim growingTree As New Tree(10)
이 예제에서는 연간 증가를 지정하지 않고 Tree를 만들 수 없습니다. 그렇게 할 수 있도록 허용하려면 매개 변수가 없는 클래스에 다른 New 메서드를 추가합니다. 이를 생성자 오버로드 작업이라고 합니다.
New 키워드
Visual Basic 6.0
Visual Basic 6.0에서는 이 코드 줄을 사용하지 않는 것이 좋습니다.
Dim growingTree As New Tree
이는 growingTree 변수에 액세스할 때마다 컴파일러에서 값이 Nothing인지 여부를 확인하고 Nothing인 경우에는 새 인스턴스를 만들어 growingTree에 할당하기 때문입니다. 이는 비효율적일 뿐만 아니라 프로그래밍 오류를 발생시킵니다.
Visual Basic 2008
Visual Basic 2008에서는 인스턴스가 확인되지 않으므로 새 인스턴스가 만들어지지 않습니다. 새 인스턴스를 만들려면 New 또는 As New 키워드를 사용하여 코드 줄을 실행해야만 합니다. 실제로 위의 코드 줄은 최신 버전에서 새 인스턴스를 만들 때 권장되는 방법입니다.
업그레이드 제안 사항
업그레이드 마법사에서는 Class_Initialize 메서드를 다음으로 업그레이드합니다.
'UPGRADE_NOTE: Class_Initialize was upgraded to Class_Initialize_Renamed. Click for more: ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1061"'
Private mvarHeight As Short
Private Sub Class_Initialize_Renamed()
mvarHeight = 0
End Sub
Public Sub New()
MyBase.New()
Class_Initialize_Renamed()
End Sub
Class_Initialize_Renamed에 대한 호출을 제거하고 코드를 생성자로 직접 이동할 수 있습니다. 이렇게 하면 프로시저에 대한 불필요한 호출이 제거되므로 코드를 읽기가 더 쉬워집니다. New를 호출할 때마다 특정 속성 그룹이 설정되는 경우에는 해당 속성을 설정하는 생성자를 추가하는 것이 좋습니다. Visual Basic 6.0 코드는 Visual Basic 2008에서 다음 코드로 대체할 수 있습니다.
Public Sub New(ByVal newYearlyGrowth As Integer)
Me.YearlyGrowth = newYearlyGrowth
End Sub