클래스를 인스턴스화 하여 내부의 필드(클래스 또는 구조체에서 직접 선언되는 모든 형식의 변수)와 속성을 할당, 조회할 수 있습니다. 필드와 속성은 접근한정자를 public으로 했을 때는 클래스를 인스턴스화 하여 개별 값을 할당, 조회할 수 있습니다. 필드로 선언됐을 경우에는 값 할당, 조회에서 끝나지만 속성이 됐을 때는 값을 함수로 처리하여 유연하게 사용할 수 있게됩니다. 즉, 값 할당, 조회시 메소드처럼 내부에서 사용이 가능하게 되는데 C#에서는 필드에 get, set을 이용해서 속성으로 처리할 수 있습니다.
아래의 예제를 보면 seq_no, name, job은 속성이며, hobby, _job은 필드입니다. 필드를 보면 _job은 접근한정자가 private으로 되어있고 hobby는 public으로 되어있습니다. _job은 클래스를 인스턴스화 한 상태에서 값제어를 할 수 없고 job속성 값을 할당하기 위한 필드이며, hobby는 값을 제어할 수 있습니다.
속성으로는 seq_no, name, job이 속성인데 seq_no, name은 속성으로 선언하고 get, set만 붙였지 아무런 값처리를 하지않고 있습니다. 하지만 job속성은 값 할당, 조회시 값 처리를 내부에서 하도록 메소드처럼 구현을 했습니다.
job속성에 값을 할당할 경우에는 set하위의 {}에 구현된 로직대로 구현이 되며, 값을 가져올 때는 get하위의 {}에 구현된 로직대로 처리하여 값을 return해 줍니다.
public class Custom
{
private string _job = "";
public int seq_no { get; set; }
public string name { get; set; }
public string hobby = "";
public string job {
get {
if (string.IsNullOrEmpty(_job))
{
_job = "JOBLESS";
}
return _job;
}
set {
if (value == "PROGAMMER")
{
_job = "ENGINEER";
}
else
{
_job = "ETC JOB";
}
_job = value;
}
}
}
class Program
{
static void Main(string[] args)
{
Custom cs = new Custom();
// job 속성의 set으로 처리됨
cs.job = "PROGAMMER";
// job 속성의 get으로 처리됨
string job_value = cs.job;
}
}