속성 개요

Visual Studio 같은 비주얼 디자이너는 속성 브라우저에 필드가 아니라 속성을 표시하므로 구성 요소에서 공용 필드 대신 속성을 정의해야 합니다. 속성을 정의해야 하는 다른 이유는 이 항목의 뒷부분에 나옵니다.

속성은 스마트 필드와 유사하며 일반적으로 속성에는 전용 데이터와 접근자 함수가 들어 있으며, 구문적으로 클래스의 필드와 같이 액세스됩니다. 속성에는 여러 가지 액세스 수준이 있지만, 여기에서는 공용 액세스에 초점을 맞춰 설명합니다. 속성은 Visual Baisc의 여러 버전에서 사용되었기 때문에 Visual Basic 프로그래머의 경우에는 이 항목을 건너뛰어도 됩니다.

속성 정의는 다음과 같이 두 부분으로 구성됩니다.

  • 전용 데이터 멤버의 정의

    private int number = 0;
    
    Private number As Integer = 0
    
  • 속성 선언 구문을 사용한 공용 속성의 정의. 이 구문은 getset 접근자 함수를 사용하여 전용 데이터 멤버와 공용 속성을 연결합니다.

    public int MyNumber 
    {
    // Retrieves the number data member.
    get 
       { 
          return number; 
       }
    // Assigns to the number data member.
    set 
       { 
          number = value;
       }
    }
    
    Public Property MyNumber As Integer
       ' Retrieves number.
       Get 
          Return number
       End Get
       ' Assigns to number.
       Set 
          number = value
       End Set
    End Property
    

value는 속성 정의 구문에 사용되는 키워드이며 value 변수는 호출 코드의 속성에 할당됩니다. value의 형식은 value가 할당된 속성의 선언된 형식과 동일해야 합니다.

전용 데이터 멤버는 속성 정의에 일반적으로 포함되지만, 필수적이지는 않습니다. get 접근자는 전용 데이터 멤버에 액세스하지 않고도 값을 반환할 수 있습니다. 한 예로, get 메서드에서 시스템 시간을 반환하는 속성을 들 수 있습니다. 속성은 데이터를 숨길 수 있도록 하며 접근자 메서드는 속성의 구현을 숨깁니다.

속성 구문은 프로그래밍 언어마다 조금씩 다릅니다. 예를 들어 property가 C#에서는 키워드가 아니지만 Visual Basic에서는 키워드입니다. 언어 관련 정보는 해당 언어 문서를 참조하십시오.

다음 예제에서는 MyNumber이라는 속성을 SimpleProperty 클래스에서 정의하고 UsesSimpleProperty 클래스에서 MyNumber에 액세스합니다.

public class SimpleProperty 
{
   private int number = 0;
   public int MyNumber 
   {
   // Retrieves the data member number.
   get 
      { 
         return number; 
      }
   // Assigns to the data member number.
   set 
      { 
         number = value;
      }
   } 
// Other members.
}
public class UsesSimpleProperty
{
   public static void Main()
   {
      SimpleProperty example = new SimpleProperty();
// Sets the property.
      example.MyNumber = 5;
// Gets the property.
      int anumber = example.MyNumber;
   }
}
Public Class SimpleProperty 
    Private number As Integer = 0

    Public Property MyNumber As Integer
        ' Retrieves number.
        Get 
            Return number
        End Get
        ' Assigns to number.
        Set 
            number = value
        End Set
    End Property    

' Other members...
End Class

Public Class UsesSimpleProperty
    Public Shared Sub Main()
        Dim example As New SimpleProperty()
        ' Sets the property.
        example.MyNumber = 5
        ' Gets the property.
        Dim anumber As Integer = example.MyNumber
    End Sub
End Class

일반적으로 getset 메서드는 다른 메서드와 비슷하게 프로그램 논리를 수행하거나 예외를 throw하거나 재정의되거나 또는 프로그래밍 언어에서 허용하는 한정자로 선언될 수 있습니다. 속성은 정적일 수도 있는데, 속성이 정적이면 getset 메서드로 수행할 수 있는 작업이 제한됩니다. 자세한 내용은 프로그래밍 언어 참조서를 참조하십시오.

속성 형식은 기본 형식, 기본 형식의 컬렉션, 사용자 정의 형식 또는 사용자 정의 형식의 컬렉션일 수 있습니다. .NET Framework에서는 모든 기본 형식에 대해 문자열에서 값으로의 변환을 구현하는 형식 변환기를 제공합니다. 자세한 내용은 일반화된 형식 변환을 참조하십시오. 속성에 형식 변환기를 사용할 수 있는 경우, 형식 변환기는 디자이너의 속성 브라우저에 표시됩니다. 정의된 사용자 지정 특성을 속성 브라우저에 표시하려면 먼저 사용자 지정 형식 변환기를 구현해야 합니다.

속성의 데이터 형식이 열거형이면 Microsoft Visual Studio 같은 개발 환경에서는 속성을 속성 창에 드롭다운 목록으로 표시합니다. 속성의 데이터 형식이 여러 속성을 갖는 클래스이면, 이러한 여러 속성은 정의하는 속성의 하위 속성이 됩니다. 사용자는 Visual Studio의 속성 창에서 특정 속성을 확장하여 해당 속성의 하위 속성을 표시할 수 있습니다.

디자인 타임에 속성이 속성 창에 올바르게 표시되도록 하려면 속성에 특성을 추가하는 것이 중요합니다. 자세한 내용은 구성 요소의 디자인 타임 특성을 참조하십시오.

속성은 버전 관리가 가능하고 데이터를 숨기는 기능을 제공하고 해당 접근자 메서드에서는 추가 논리를 수행할 수 있기 때문에 구성 요소에서 공용 필드 대신 속성을 노출시켜야 합니다. 일반적으로 just-in-time 최적화를 사용할 수 있기 때문에 속성과 필드에 소모되는 리소스는 비슷합니다.

참고 항목

개념

구성 요소의 디자인 타임 특성