본문 바로가기

프로그래밍/C#

[C#] 접근자(Accessor)와 변경자(mutator)에 대해서 알아보자!

 


 

C# Prog.


처음으로 C#을 공부하면서 포스팅한 것이기에 다소 틀린 내용이 있을 수 있습니다. 그리고, 다른 언어를 알고 계시다는 가정하에 포스팅 하기때문에, 프로그래밍 언어를 처음 공부하시는 분은 다른 글도 참고하시길 바랍니다. 이 글은 <뇌를 자극하는 C# 4.0 프로그래밍>을 참고하였습니다.

 


 이번에는 접근자와 변경자에 대해서 알아볼까 합니다. 다른 말로 하자면, getter와 setter 입니다.

이것들을 통해서 클래스의 프로퍼티(속성)에 대해 접근을 하고 변경을 할 수 있는데요.

 

 C#에서 제공하는 이들은 자바보다 굉장히 간결하면서 편리합니다. 하지만, 어떻게 보면 난잡하다는 생각도 들더군요.

그건 취향나름*^^*

 

 우선 기본적으로 프로퍼티에 대해서 접근자와 변경자를 등록하는 방법은 다음과 같습니다.

접근자 데이터타입 속성명; 

접근자 데이터타입 속성접근명{

get{ return 속성명; }

set{ 속성명= value;}

}

 

 잘보시면, getter와 setter를 하나로 통합해서 관리하는 것을 볼 수 있는데요. 굉장히 깔끔합니다.

그리고 속성접근명-제가 임의로 붙였습니다.-은 임의로 지정할 수 있구요. setter 에 보면 value 라는 키워드가 있는데, 이는 암묵적 매개변수로서, 사용방법은 조금 후에 알아볼까 합니다.

 

 그렇다면, 한번 사용해 봅시다.

 

namespace TEST
{
    class Test
    {
        static void Main(string[] args)
        {
            User user1 = new User();
            user1.Age = 12;
          user1.Name = "정몽희";

            Console.WriteLine("{0}의 이름은 {1}이고 나이는 {2}입니다.", "user1", user1.Age, user1.Name);
        }
    }

 

    class User
    {
        private string name;
        private int age;

 

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

        public int Age
        {
            get { return age; }
            set { age = value; }
        }
    }

 

  클래스 User를 만들고 각 프로퍼티에 접근자와 변경자를 만들어 줬습니다.

Main 메소드가 있는 엔트리 포인트를 보시면, Age와 Name 이라는 속성(?)에 값을 넣는 것을 볼 수 있는데요?

이때, 메소드를 이용하는 것이 아닌 대입연산자를 통해서 간단히 넣는 것을 볼 수 있습니다.

 

user1.Name = "정몽희";

 

 위를 보시면, setter의 value 키워드에 "정몽희"라는 값이 들어가서 우리가 원하는 프로퍼티에 값을 넣어주는 것을 짐작해볼수 있겠습니다.  getter도 우리가 만들어 놓았던. 접근명을 통해 간단히 값을 얻어오구요.

 

 자바와 비교해 볼 때, 굉장히 편리하고 깔끔한 방식이긴 하지만, 물론 코드도 더 줄어들었구요. 더 간단한 방법이 있습니다. 이는 자동 구현 프로퍼티라고 getter와 setter의 바디(구현부)를 생략하는 것입니다.

 

 속성도!! 생략 합니다!!

    class User
    {

        public string Name{ get; set; }
        public int Age{ get; set; }
    }

 

이런식으로 만들 수 있습니다. 그래도 결과를 확인해봐야겟죠?

 

 

제대로 되는군요. 굉장히 편리한 방법입니다. 이렇게 만들면, 컴파일러가 내부적으로 알아서 코드를 만들어준다고 해요.

다들 유용하게 씁시다.