VB.NET 2008/VB - 개체지향

개체지향 - 개체를 생성할 수 있게 하는 클래스

본클라쓰 2011. 4. 15. 09:38

 

 

클래스의 캡슐화

 

캡슐화는 관련 항목 그룹에 대한 액세스를 포함하고 제어하는 기능이다. 클래스는 항목을 캡슐화하는 가장 일반적인 방법 중 하나를 제공한다. 아래의 예제에서 BankAccount 클래스는 은행 계정을 설명하는 메서드, 필드 및 속성을 캡슐화한다.

 

캡슐화를 사용하지 않는 경우에는 은행 계정에 대한 정보를 저장하고 관리하기 위해 별도의 프로시저와 변수를 선언해야 하며 한 번에 두 개 이상의 은행 계정에 대해 작업하기도 어렵다. 캡슐화를 사용하면 BankAccount 클래스의 데이터의 프로시저를 하나의 단위로 사용할 수 있다. 각 계정은 클래스의 고유 인스턴스로 표시되므로 문제 없이 동시에 여러 은행 계정으로 작업할 수 있다. 

 

또한 캡슐화를 사용하면 데이터와 프로시저가 사용되는 방법을 제어할 수 있다. Private 또는 Protected 등의 액세스 한정자를 사용하여 외부 프로시저에서 클래스 메서드를 실행할 수 없도록 하거나 속성 및 필드의 데이터를 읽거나 수정하지 못하게 할 수 있다. 클래스 외부에서 클래스의 내부 정보를 사용할 수 없도록 하려면 해당 정보를 Private로 선언해야 한다. 이 기술을 데이터 숨김이라고 합니다. 예금 잔액과 같은 고객 정보가 이러한 방법으로 보호된다. 

 

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 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

 

 

 

클래스와 모듈은 정의된 항목을 캡슐화하는 참조 형식이지만 다른 프로시저에서 항목을 액세스하는 방법이 다르다.

 

클래스와 모듈의 주요 차이점은 클래스는 개체로 인스턴스화 될 수 있지만 표준 모듈은 개체로 인스턴스화될 수 없다는 것이다. 표준 모듈의 데이터 복사본은 하나만 존재할 수 있으므로 프로그램의 한 부분에서 표준 모듈의 공용 변수를 프로그램의 다른 부분에서도 해당 변수를 읽을 때 동일한 값을 얻는다. 반면 개체 데이터는 인스턴스화된 각 개체마다 별도로 존재한다. 뿐만 아니라 표준 모듈과 달리 클래스는 인터페이스를 구현할 수 있다.

 

또한 클래스와 모듈은 해당 멤버에 대해 다른 범위를 사용한다. 한 클래스 내에 정의된 멤버는 해당 클래스의 특정 인스턴스 내에서 범위가 지정되며 해당 개체의 수명이 지속되는 동안에만 존재한다. 클래스 외부에서 클래스 멤버에 액세스하려면 Object.Member 형식의 정규화된 이름을 사용해야 한다.

 

그러나 모듈 내에서 선언된 멤버는 기본적으로 공개적으로 액세스할 수 있으며 해당 모듈에 액세스할 수 있는 모든 코드로 액세스할 수 있다. 따라서 표준 모듈의 변수는 해당 프로젝트의 어디에서나 볼 수 있으며 프로그램의 수명이 지속되는 동안 존재하므로 전역 변수에 해당한다.