다음을 통해 공유


클래스에 속성 추가

업데이트: 2007년 11월

이 단원에서는 이전 단원에서 만든 클래스에 속성을 추가하는 방법을 배웁니다.

이전 단원 자세히 보기: 속성, 메서드 및 이벤트 이해에서는 모든 개체에 특성이 있고 속성은 특성을 나타낸다는 것을 배웠습니다. 이전 단원에서는 사람을 나타내는 Persons 클래스를 만들었습니다. 사람은 이름이나 나이와 같은 특성을 가지므로 Persons 클래스에는 이러한 특성을 나타내는 속성이 필요합니다.

속성은 필드 또는 속성 프로시저의 두 가지 방법으로 클래스에 추가할 수 있습니다. 또한 속성에 대해 Public, ReadOnly 또는 WriteOnly 한정자를 사용하여 속성의 작동 방식을 결정할 수 있습니다.

필드 및 속성 프로시저

필드는 클래스 밖에서 설정하거나 읽을 수 있는 클래스 내의 Public 변수로만 사용됩니다. 필드는 Boolean(True 또는 False) 값 같이 유효성을 검사할 필요가 없는 속성에 유용합니다. Persons 클래스에는 사람의 결혼 여부를 나타내는 Married라는 Boolean 속성을 지정할 수 있습니다. 이 속성은 사용 가능한 값이 두 가지뿐이므로 필드를 사용하기에 적합합니다.

필드를 클래스에 추가하려면 다음과 같은 코드를 사용합니다.

Public Married As Boolean

하지만 대부분의 속성은 좀 더 복잡하기 때문에 대부분 속성 프로시저를 사용하여 속성을 클래스에 추가합니다. 속성 프로시저는 속성 값을 저장하기 위한 private 변수 선언, 값을 노출하는 Get 프로시저 및 값을 설정하는 Set 프로시저의 세 부분으로 이루어져 있습니다.

예를 들어 Persons 클래스의 Name 속성에 대한 속성 프로시저는 다음과 같습니다.

Private nameValue As String
Public Property Name() As String
    Get
        Name = nameValue
    End Get
    Set(ByVal value As String)
        nameValue = value
    End Set
End Property

코드의 첫 번째 줄은 private String 변수인 nameValue를 선언하여 속성 값을 저장합니다. 속성 프로시저 자체는 Public Property로 시작하고 End Property로 끝납니다.

Get 프로시저에는 사용자가 값을 읽으면 실행되는 코드가 포함되어 있습니다. 예를 들어 Persons.Name 속성을 읽으면 코드는 nameValue 변수에 저장된 값을 반환합니다.

Set 프로시저에는 value 인수로 전달되는 값을 사용하여 nameValue 변수에 새 값을 할당하는 코드가 들어 있습니다. 예를 들어 코드 Persons.Name = "John"을 작성한 경우 String 값 John이 value 인수로 전달됩니다. 그러면 Set 프로시저의 코드는 이 값을 NameValue 변수에 할당하여 저장합니다.

필드를 사용하여 Name 속성을 나타내지 않고 왜 이렇게 번거로운 과정을 거쳐야 하는지 궁금할 것입니다. 실제로는 이름에 특정한 규칙이 있습니다. 예를 들어 이름은 대개 숫자를 포함하지 않습니다. value 인수를 확인하여 숫자가 들어 있으면 오류를 반환하는 코드를 Set 프로시저에 추가할 수 있습니다.

다음 프로시저에서는 필드와 세 가지 속성을 Persons 클래스에 추가합니다.

실습

클래스에 속성을 추가하려면

  1. 이전 단원에서 만든 Persons 프로젝트를 엽니다. 프로젝트를 저장하지 않았으면 먼저 이전 단원 실세계 개체 모델링: 클래스 처음 만들기로 돌아가서 저장 절차를 완료합니다.

  2. 솔루션 탐색기에서 Persons.vb를 선택한 다음 보기 메뉴에서 코드를 선택합니다.

  3. Public Class Persons 줄 아래에 다음 선언 코드를 추가합니다.

    Private firstNameValue As String
    Private middleNameValue As String
    Private lastNameValue As String
    Public Married As Boolean
    
  4. 다음 속성 프로시저를 선언 코드 아래에 추가합니다.

    Public Property FirstName() As String
        Get
            FirstName = firstNameValue
        End Get
        Set(ByVal value As String)
            firstNameValue = value
        End Set
    End Property
    
    Public Property MiddleName() As String
        Get
            MiddleName = middleNameValue
        End Get
        Set(ByVal value As String)
            middleNameValue = value
        End Set
    End Property
    
    Public Property LastName() As String
        Get
            LastName = lastNameValue
        End Get
        Set(ByVal value As String)
            lastNameValue = value
        End Set
    End Property
    
  5. 파일 메뉴에서 모두 저장을 선택하여 작업을 저장합니다.

읽기 전용 및 쓰기 전용 속성

한 번 설정하면 프로그램을 실행하는 동안 변경할 수 없는 속성이 있습니다. 예를 들어 직원 번호를 나타내는 속성은 변경하면 안 됩니다. 즉, 다른 프로그램에서 직원 번호를 읽을 수는 있지만 이에 대한 변경은 할 수 없습니다.

ReadOnly 키워드는 속성 값을 읽을 수만 있고 수정할 수 없음을 표시하는 데 사용합니다. ReadOnly 속성에 값을 할당하려고 하면 코드 편집기에 오류가 발생합니다.

읽기 전용 속성을 만들려면 다음과 같이 Set 프로시저 없이 Get 프로시저만 사용하여 속성 프로시저를 만듭니다.

Private IDValue As Integer
ReadOnly Property ID() As Integer
    Get
        ID = IDValue
    End Get
End Property

마찬가지로 WriteOnly 키워드를 사용하면 속성 값을 설정할 수 있지만 읽을 수는 없습니다. 예를 들어 암호 속성은 일반적으로 다른 프로그램에서 읽을 수 없게 만듭니다. 암호 속성 값을 사용하여 클래스 내에서 작업을 수행하지만 그 값은 보통 공개하지 않습니다.

쓰기 전용 속성을 만들려면 다음과 같이 Get 프로시저 없이 Set 프로시저만 사용하여 속성을 만듭니다.

Private passwordValue As String
WriteOnly Property Password() As String
    Set(ByVal value As String)
        passwordValue = value
    End Set
End Property

ReadOnly 및 WriteOnly 속성 프로시저는 한 속성 값을 가져와서 다른 값으로 변환하는 데도 유용합니다. 사람의 나이를 예로 들겠습니다. 이름과 달리 나이는 변합니다. 따라서 클래스에 나이를 할당하고 1년 뒤에 읽으면 잘못된 나이가 됩니다.

Persons 클래스에 두 가지 속성, 즉 변하지 않는 출생 연도를 나타내는 WriteOnlyBirthYear 속성 및 현재 연도와 출생 연도의 차이를 계산하여 그 값을 반환하는 ReadOnlyAge 속성을 추가하면 이러한 문제를 해결할 수 있습니다.

실습

ReadOnly 및 WriteOnly 속성을 클래스에 추가하려면

  1. 다음 선언 코드를 클래스 모듈 맨 위에 있는 다른 선언 아래에 추가합니다.

    Private birthYearValue As Integer
    
  2. 다음 속성 프로시저를 선언 코드 아래에 추가합니다.

    WriteOnly Property BirthYear() As Integer
        Set(ByVal value As Integer)
            birthYearValue = value
        End Set
    End Property
    
    ReadOnly Property Age() As String
        Get
            Age = My.Computer.Clock.LocalTime.Year - birthYearValue
        End Get
    End Property
    
  3. 파일 메뉴에서 모두 저장을 선택하여 작업을 저장합니다.

다음 단계

이 단원에서는 속성에 대한 내용과 속성을 클래스에 추가하는 다양한 방법을 배웠습니다. 다음 단원에서는 메서드를 클래스에 추가하여 작업을 수행하도록 하는 방법을 배웁니다.

다음 단원: 클래스에 메서드 추가

참고 항목

작업

실세계 개체 모델링: 클래스 처음 만들기

개념

속성 프로시저 및 필드

기타 리소스

개체를 사용한 프로그래밍: 클래스 사용