클래스: 개체에 대한 청사진
업데이트: 2007년 11월
클래스는 개체를 기호로 나타낸 것입니다. 즉, 청사진이 빌딩을 구성하는 항목을 설명하는 것과 마찬가지 방법으로 클래스는 개체를 구성하는 속성, 필드, 메서드 및 이벤트를 설명합니다. 여러 빌딩을 만드는 데 하나의 청사진을 사용할 수 있는 것처럼 단일 클래스를 사용하여 원하는 수의 개체를 만들 수 있습니다. 청사진에 사람들이 액세스할 수 있는 빌딩의 특정 부분이 정의되어 있는 것처럼 클래스는 캡슐화를 통해 개체 항목에 대한 사용자의 액세스를 제어할 수 있습니다.
클래스 및 개체
용어 클래스와 개체를 혼용하는 경우가 있지만 실제로 클래스는 개체의 구조를 설명하는 반면 개체는 사용 가능한 클래스의 인스턴스를 나타냅니다. 각 인스턴스는 해당 클래스의 동일하면서도 고유한 복사본입니다. 개체는 클래스의 인스턴스이므로 개체를 만드는 작업을 인스턴스화라고 합니다.
청사진에 비유한다면 클래스는 청사진이고 개체는 해당 청사진을 사용하여 만든 빌딩입니다. 대부분의 경우 한 개체의 데이터를 변경해도 다른 개체의 데이터는 변경되지 않습니다. 한 가지 예외로 Shared 한정자로 선언된 클래스 멤버인 공유 멤버를 들 수 있습니다. 이 멤버는 클래스의 특정 인스턴스와는 독립적으로 존재합니다.
캡슐화
캡슐화는 관련 항목 그룹에 대한 액세스를 포함하고 제어하는 기능입니다. 클래스는 항목을 캡슐화하는 가장 일반적인 방법 중 하나를 제공합니다. 아래의 예제에서 BankAccount 클래스는 은행 계정을 설명하는 메서드, 필드 및 속성을 캡슐화합니다.
캡슐화를 사용하지 않는 경우에는 은행 계정에 대한 정보를 저장하고 관리하기 위해 별도의 프로시저와 변수를 선언해야 하며 한 번에 두 개 이상의 은행 계정에 대해 작업하기도 어렵습니다. 캡슐화를 사용하면 BankAccount 클래스의 데이터와 프로시저를 하나의 단위로 사용할 수 있습니다. 각 계정은 클래스의 고유 인스턴스로 표시되므로 문제 없이 동시에 여러 은행 계정으로 작업할 수 있습니다.
또한 캡슐화를 사용하면 데이터와 프로시저가 사용되는 방법을 제어할 수 있습니다. Private 또는 Protected 등의 액세스 한정자를 사용하여 외부 프로시저에서 클래스 메서드를 실행할 수 없도록 하거나 속성 및 필드의 데이터를 읽거나 수정하지 못하게 할 수 있습니다. 클래스 외부에서 클래스의 내부 정보를 사용할 수 없도록 하려면 해당 정보를 Private으로 선언해야 합니다. 이 기술을 데이터 숨김이라고 합니다. 예금 잔액과 같은 고객 정보가 이러한 방법으로 보호됩니다.
캡슐화의 기본 규칙 중 하나는 클래스 데이터가 Property 프로시저나 메서드를 통해서만 수정되거나 검색되어야 한다는 것입니다. 클래스의 구현 정보를 숨기면 클래스가 원치 않는 방법으로 사용되는 것을 막을 수 있으며 나중에 호환성 문제 없이 해당 항목을 수정할 수 있습니다. 예를 들어, BankAccount 클래스의 이후 버전에서는 AccountBalance 필드에 의존하는 다른 응용 프로그램을 중단시키지 않고도 이 필드의 데이터 형식을 특정 데이터 형식으로 변경할 수 있습니다.
상속
Visual Basic 구조체와 마찬가지로 클래스를 사용하면 관련 항목의 그룹을 캡슐화하는 데이터 형식을 정의할 수 있습니다. 그러나 Visual Basic 클래스는 구조체와 달리 다른 클래스의 특성을 상속하고 확장할 수 있습니다. 새 클래스의 기본으로 사용되는 클래스를 기본 클래스라고 합니다. 기본 클래스에서 파생된 클래스는 파생 클래스라고 합니다. 파생 클래스는 기본 클래스의 모든 필드, 속성, 메서드 및 이벤트를 상속합니다. 따라서 한 번 클래스를 개발하고 디버깅하면 해당 클래스를 다른 클래스의 기본으로 다시 사용할 수 있습니다.
다음 예제에서는 일반 은행 계정을 나타내는 기본 클래스를 정의하고, 기본 클래스의 속성을 상속하지만 당좌 예금 계정을 설명하도록 사용자 지정된 특정 클래스를 정의합니다.
Class BankAccount
Private AccountNumber As String
Private AccountBalance As Decimal
Private HoldOnAccount As Boolean = False
Public Sub PostInterest()
' Add code to calculate the interest for this account.
End Sub
ReadOnly Property Balance() As Decimal
Get
' Return the available balance.
Return AccountBalance
End Get
End Property
End Class
Class CheckingAccount
Inherits BankAccount
Sub ProcessCheck()
' Add code to process a check drawn on this account.
End Sub
End Class
상속에 대한 자세한 내용은 상속 기본 사항을 참조하십시오.
공유 멤버
기본적으로 클래스 데이터는 클래스의 개별 인스턴스에 고유하게 적용되지만 하나의 클래스에서 만들어진 모든 개체에서 단일 데이터 항목을 공유해야 할 경우가 있습니다. 이러한 경우 Shared 한정자를 사용하여 특정 변수가 클래스의 모든 인스턴스에서 같은 값을 공유하도록 할 수 있습니다. 다른 프로그래밍 언어에서는 공유 멤버를 "정적 멤버"라고도 합니다. 먼저 클래스의 인스턴스를 만들지 않고 클래스 이름을 사용하여 직접 공유 메서드를 호출할 수 있습니다.
공유 멤버에 대한 자세한 내용은 Visual Basic의 공유 멤버를 참조하십시오.
숨김
파생 클래스는 Shadows 키워드를 사용하여 상속된 멤버와 같은 이름을 갖는 멤버를 선언할 수 있습니다. 숨겨진 멤버는 숨겨지는 대상 멤버와 같은 데이터 형식을 가질 필요는 없습니다. 예를 들어, 속성은 Integer 형식의 변수를 숨길 수 있습니다.
공유 멤버에 대한 자세한 내용은 Visual Basic의 숨김 기능을 참조하십시오.