정리중/C# & .NET & Web
[.NET&C#] 속성 vs 메서드
위즈
2005. 7. 16. 00:27
클래스 라이브러리를 설계할 때 클래스 맴버를 속성으로 구현할지 메서드로 구현할지 하는 것이 큰 고민 중 한 가지입니다.
일반적으로 메서드는 특정 로직을 수행할 경우 사용하고, 속성은 데이터를 제어할 경우에 사용합니다.
하지만 어떤 것을 사용해야 할지 쉽게 판단이 서지 않는 때가 있습니다. 이런 경우에 쉽게 결정 할 수 있도록 하는 방법이 MSDN에 있어서 정리 해봤습니다.
우선 아래 예제를 확인하세요.
하지만 C#에서는 문제 될게 없습니다. 만약 이 코드를 VB.NET에서 사용 할 경우 문제가 되겠죠. (VB.NET에서는 대소문자 구분이 없습니다.) 그리고 또한 VB.NET 프로그래밍을 할 때 C#으로 작성한 DLL 참조를 할 경우 protected 로 선언된 변수명은 대략 난감입니다. 그래서 속성값에 대한 정보를 저장하는 변수를 선언 할 때는 "_"로 시작하는 변수명을 사용합니다. (이런 경우 위와 같은 효과를 얻을 수 있죠..^^)
다음과 같은 경우에는 메서드를 사용합니다.
일반적으로 메서드는 특정 로직을 수행할 경우 사용하고, 속성은 데이터를 제어할 경우에 사용합니다.
하지만 어떤 것을 사용해야 할지 쉽게 판단이 서지 않는 때가 있습니다. 이런 경우에 쉽게 결정 할 수 있도록 하는 방법이 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 접근자를 사용하여 속성 값을 가져오는 데 의도하지 않은 주요 효과가 있는 경우
- 멤버를 연속해서 두 번 호출하면 서로 다른 결과를 생성되는 경우
- 실행 순서가 중요한 경우. (형식의 속성은 순서에 상관 없이 설정하고 검색할 수 있어야 합니다. )
- 멤버가 정적이지만 변경될 수 없는 값을 반환하는 경우
- 멤버가 배열을 반환하는 경우 이외의 경우에는 속성으로 선언을 해도 관계없을 것 같습니다.