위즈군의 라이프로그
Reboot... Search /

[.NET&C#] 속성 vs 메서드

2005.07.16 00:27
클래스 라이브러리를 설계할 때 클래스 맴버를 속성으로 구현할지 메서드로 구현할지 하는 것이 큰 고민 중 한 가지입니다.

일반적으로 메서드는 특정 로직을 수행할 경우 사용하고, 속성은 데이터를 제어할 경우에 사용합니다.

하지만 어떤 것을 사용해야 할지 쉽게 판단이 서지 않는 때가 있습니다. 이런 경우에 쉽게 결정 할 수 있도록 하는 방법이 MSDN에 있어서 정리 해봤습니다.

우선 아래 예제를 확인하세요.
private string _Name = "";
public string Name
{
	get {return _Name; }
	set {_Name= value;}
}
참고 : 속성 값을 저장하는 용도로 사용할 내부 변수를 선언 할 때 private 혹은 protected 변수이기 때문에 소문자로 시작 (예: name) 하는 변수명으로 선언하고, public 속성 값에서는 대문자로 시작하는 변수명을 사용 하는 경우가 많이 있습니다.(이런 경우 해당 변수명이 혼동되지 않기 때문에 이렇게 사용하는 경우가 많이 있습니다.)

하지만 C#에서는 문제 될게 없습니다. 만약 이 코드를 VB.NET에서 사용 할 경우 문제가 되겠죠. (VB.NET에서는 대소문자 구분이 없습니다.) 그리고 또한 VB.NET 프로그래밍을 할 때 C#으로 작성한 DLL 참조를 할 경우 protected 로 선언된 변수명은 대략 난감입니다. 그래서 속성값에 대한 정보를 저장하는 변수를 선언 할 때는 "_"로 시작하는 변수명을 사용합니다. (이런 경우 위와 같은 효과를 얻을 수 있죠..^^)

다음과 같은 경우에는 메서드를 사용합니다.
  • 해당 작업이 Object.ToString() 등의 변환인 경우
  • 해당 작업에 너무 많은 리소스가 소모되어서 결과를 캐싱하는 것을 고려하도록 사용자에게 알리려는 경우
  • get 접근자를 사용하여 속성 값을 가져오는 데 의도하지 않은 주요 효과가 있는 경우
  • 멤버를 연속해서 두 번 호출하면 서로 다른 결과를 생성되는 경우
  • 실행 순서가 중요한 경우. (형식의 속성은 순서에 상관 없이 설정하고 검색할 수 있어야 합니다. )
  • 멤버가 정적이지만 변경될 수 없는 값을 반환하는 경우
  • 멤버가 배열을 반환하는 경우 이외의 경우에는 속성으로 선언을 해도 관계없을 것 같습니다.
참고 : 배열을 반환하는 경우에는 사용자가 내부 상태를 변경할 수 없도록 내부 배열의 복사본을 반환해야 합니다. (배열의 경우는 스택에 저장되기 때문에 해당 값을 반환해도 변경하면 변경이 되기 때문입니다.)
신고
Name : Password : Blog : ( )

위즈군의 라이프로그

Category

전체 (569)
개발 (0)
정보 (0)
일상 (0)
정리중 (569)
Total:2,094,883
Today:448 / Yesterday:200
Daum 코드
Powered by Tistory / Skin by 위즈 / Copyright Click Here 라이센스정책 rss 2.0