Programming/.NET

C# 3.0이전에 클래스의 속성은 아래와 같이 작성해야 했습니다.

 

class Member
{
    string name;
    public string Name {
        get { return name}
        set { name = value}
    }
}

 

즉, 변수를 하나 만들고 그 변수와 연계되는 속성을 따로 만들어야 합니다. 물론

 

class Member
{
    public string name;
}

 

이렇게 처리하는 경우도 있으나 캡슐화에 위배되는 문제가 생기게 됩니다. 그래서 속성처리는 하되 코드의 간결함을 유지할 수 있도록 하는 자동구현속성이 생기게 됩니다.

 

public string Name { getset}

 

따라서 위와 같이 하면 컴파일러는 처음예제와 같은 코드로 변환하여 컴파일을 진행하게 됩니다.

 

이러한 속성은 객체를 초기화하는데도 사용될 수 있습니다. 예를 들어 내부 변수를 초기화 하기 위해 생성자를 아래와 같이 만들었을때

 

class Member
{
    int _i;

    public Member(int i)
    {

        _i = i;
    }
}

 

만약 변수가 하나더 추가된다면 생성자를 다음과 같이 수정할 수 있습니다.

 

class Member
{
    int _i;
    int _j;

    public Member(int iint j)
    {

        _i = i;

        _j = j;
    }
}

 

이때 변수 _i와 _j가 따로 초기화 될 수 있다면 그 만큼 생성자를 분리해야 할 것입니다.

 

class Member
{
    int _i;
    int _j;

    public Member() : this(0, 0)
    {
    }

    public Member(int i) : this(0, i)
    {
    }

    public Member(int iint j)
    {

        _i = i;         _j = j;
    }
}

 

이러한 불편함은 속성을 통해 해결할 수 있습니다.

 

class Member
{
    public int I
    {
        get;

        set;
    }

    public int J
    {
        get;
        set;
    }
}

 

클래스에서 속성을 위와같이 적용해 두면 클래스의 개체를 초기화 할때 다음처럼 초기화 하는 것이 가능합니다.

 

Member m1 = new Member();
Member m2 = new Member { I = 10 };
Member m3 = new Member { J = 20 };
Member m4 = new Member { I = 10, J = 20 };

 

이러한 초기화 방식은 기본 생성자와 함께 혼용할 수도 있습니다.

 

class Member
{
    string _s;
    public int I
    {
        get;

        set;
    }

    public int J
    {
        get;
        set;
    }

    public Member()
    {
    }

    public Member(string s)
    {
        _s = s;
    }
}

 

->

 

Member m1 = new Member();
Member m2 = new Member() { I = 10 };
Member m3 = new Member("hello") { J = 20 };
Member m4 = new Member() { I = 10, J = 20 };

 

만약 이러한 속성에 기본값을 지정해야 한다면 다음과 같이 처리할 수 있습니다.

 

public int J
{
    get;
    set;
} = 100;

 

또한 람다식을 사용하면 get 정의에 한해 단일문으로 속성을 정의할 수 있습니다.

 

public int I => 100;

'Programming > .NET' 카테고리의 다른 글

[C#] 람다식 (Lambda expression)  (0) 2018.05.02
[ASP.NET MVC] 바인딩(Binding)  (0) 2018.04.25
[C#] 자동구현속성  (0) 2018.04.17
[C#] 익명메서드(anonymous method)  (0) 2018.04.10
[ASP.NET MVC] Web API  (0) 2018.03.28
[ASP.NET MVC] 필터(Filter)  (0) 2018.03.20
0 0