안녕하세요. 굿띠입니다...
이번 포스트는 Property에 대해 얘기를 해보고 활용방법에 대해 간단하게 정리를 해볼까 합니다... 이것도 팁이 될수 있을까 모르겠네요..^^ Property는 어떤 구조로 되어 있다는거는 누구나 다 아실 겁니다.. 하지만 어떤 property를 얘기하는거지??? 라고 말하시는 분도 있을수도 있기 때문에 한번 다음과 같이 간단하게 소스를 만들어보도록 하겠습니다. class TestProperty public string Test public TestProperty() 아~ 이것은 프로그램 하신 분이라면 누구나 많이 보던 소스아닙니까??? 그쵸??^^ 그럼 제가 한번 정리 해보겠습니다. 일반적으로 필드가 public이면 다른 개체가 해당 필드에 직접 액세스가 가능하고 수정 할 수 있지만 위와 같은 Property는 다른 개체를 통해 수정할수는 있으나 해당 필드를 소유하는 개체에 접근하지 못 하도록 합니다. 그리고 필드의 전용값을 읽고 쓰고 융통성 있는 메커니즘을 제공하는 멤버입니다. 이 Property는 멤버변수 처럼 사용할 수 있지만 실제로는 접근자를 통해 구현이 가능 한것이죠! 접근자는 위의 소스내용을 보시면 get, set을 생성하여 private 데이터에 엑세스 한다는것을 보실수 있습니다. 하지만 여기서 Property와 필드의 명확한 구분이 필요할 것 같습니다. 이 Property와 필드는 모두 개체에 정보를 저장하고 검색합니다. 이런 두개의 속성과 필드 기능의 유사성으로 인해 다음과 같은 경우에 서로 구분하여 프로그래밍 방식을 결정합니다. 다음 내용은 MSDN의 한 부분을 발췌했습니다. 다음 경우는 Perperty를 사용합니다.
{
private string m_Test;
{
get
{
return m_Test;
}
set
{
m_Test = value;
}
}
{
}
}
값이 설정되고 검색되는 시기와 방법을 제어해야 하는 경우
속성에 유효성을 검사해야 하는 잘 정의된 값 집합이 들어 있는 경우
IsVisible 속성처럼 값을 설정했을 때 개체의 상태가 크게 변경되는 경우
속성을 설정했을 때 다른 내부 변수나 다른 속성의 값으로 변경되는 경우
속성을 설정하거나 검색하기 전에 일련의 작업 단계를 수행해야 하는 경우
다음 경우에 필드를 사용합니다.
값이 자체적으로 유효성을 검사하는 형식인 경우. 예를 들어, Boolean 변수에 True 또는 False 이외의 값이 할당되면 오류가 발생하거나 자동 데이터 변환이 수행됩니다.
데이터 형식에서 지원하는 범위의 값이 유효한 경우. Single 또는 Double 형식의 여러 속성에도 적용됩니다.
속성이 String 데이터 형식이고 문자열의 크기나 값에 대해 제약 조건이 없는 경우
링크 : http://msdn2.microsoft.com/ko-kr/library/9d65as2e(VS.80).aspx
다음으로 Property의 접근자에 대해서 한번 알아보도록 합시다. get 접근자는 속성 값을 반환하는 데 사용되고, set 접근자는 데이터를 저장할때 사용합니다. 여기서 get접근자는 방금 말씀드렸다시피 Property를 정의할때도 사용되지만 인덱서 요소를 검색하고 정의할때 사용되기도 합니다. 인덱서의 자세한 내용은 여기를 참조하시면 될거 같습니다.^^ http://msdn2.microsoft.com/ko-kr/library/6x16t2tx(VS.80).aspx
활용 : Property를 활용하여 TextBox의 DataBindings속성을 구현하자(따라하기)
그럼 한번 Property를 이용하여 TextBox컨트롤과 데이타바인딩을 한번 시켜보겟습니다. Control.DataBindings속성은 필드의 데이터와는 바인딩이 되지 않지만 Property와는 데이터 바인딩이 가능하기 때문에 코드의 가독성과 효율적인 프로그래밍을 할 수 있습니다.
1. 먼저 응용프로그램 프로젝트를 하나 만듭니다. 이름은 TextDataBinding으로 합니다.
2. 다음 폼디자인 화면에서 다음과 같이 컨트롤을 배치합니다. 이름의 텍스트 박스 컨트롤의 네임은 txt_name, 나이의 텍스트 박스 컨트롤의 네임은 txt_age로 지정합니다.
3. 다음 두개의 텍스트박스와 데이터 바인딩 되는 Property를 만듭니다. 소스는 다음과 같습니다.
4. 폼 로드 이벤트에 텍스트박스와 Property가 데이터 바인딩 될수 있도록 다음과 같이 작성합니다.
Add메서드의 3개의 인자중 첫번째는 데이터 바인딩 되는 속성을 말합니다. 저는 텍스트 박스의 Text속성과 데이터바인딩을 하기위해 Text라고 적었습니다. 2번째 인자는 데이터 소스와 3번째 인자 데이터 멤버이므로 현재 클래스의 this와 Property이름을 넣었습니다.
5. 버튼 컨트롤을 더블 클릭하여 Click이벤트를 등록하고 다음과 같이 작성합니다.
그럼 전체 소스를 보여드리고 테스트를 한번 해보겠습니다.
테스트를 해볼까요??? ^^ 프로그램을 실행한뒤 텍스트박스에 이름과, 나이를 입력하고 확인을 눌러봅시다.
짠~~ 올바른 결과가 나왔네요...
정리 : 버튼을 눌렀을경우 Property를 출력하라고 했습니다. 어때요?? Property는 TextBox와 데이터 바인딩이 되어 있기 때문에 Property를 통해 TextBox의 Text의 내용을 간단하게 출력할 수 있는 것입니다. 더 이상 정리는 필요 없을 것 같군요..
한번 여러분도 따라 해보세요...^^!!
TIP : VS2005의 리페터링으로 Property를 쉽게 만들자!!!
여러분은 Property를 처음부터 끝까지 입력하시는건 아니죠??? Property를 10개나 만든다고 생각해보세요. 코딩 제대로 못하고 반복되는 Ctrl + C,V를 하면서 고친다면 프로그래밍의 재미를 보기전에 흥미를 잃어버릴수도 있을 겁니다. 저도 처음에는 열심이 입력했답니다.^^
VS2005 이상 에서는 이러한 귀찮은 작업을 쉽게 만들수 있도록 도와주는 기능이 있습니다. 바로 리펙터링이라는 기능중에 필드 캡슐화라는 기능 인데요. 사용법은 다음과 같습니다.
1. 먼저 private 멤버변수를 하나 만듭니다.
2. private 멤버변수에서 우클릭 -> 리펙터링 -> 필드 캡슐화를 선택합니다.
3. 다음 아래 그림과 같이 필드 이름을 적어주고 확인을 눌러줍니다.
4. 짜잔~~! Property가 쉽게 만들어지는걸 볼 수 있습니다.
VS2005는 이러한 반복적인 작업을 최소화 하기 위해 여러가지의 리펙터링 기능이 존재합니다. 이러한 리팩터링 작업을 사용하면 기존 필드에서 신속하게 속성을 만든 다음 문제 없이 코드를 새 속성에 대한 참조로 구현할 수 있습니다.^^
[출처] [C#] Property를 활용하자!|작성자 굿띠