728x90

클래스의 멤버 변수를 private, public 으로 선언할 것인가에 따라 정보은닉, 정보공개를 고민하게 된다.

private 로 선언하면 getter 메소드, setter 메소드를 구현해야 한다.


C# 언어에서는 다양한 이유로 프로퍼티의 사용을 장려한다. 지금까지도 타입(type)에서 public 데이터 변수를 사용하거나, get/set류의 메서드를 직접 만들어서 사용하고 있다면 이제 그런 방법을 사용하지 않는 것이 좋다. 프로퍼티는 우리가 만든 타입의 값을 외부에서 접근할 수 있도록 하면서 동시에 객체지향에서 논의되는 캡슐화를 지원한다. 프로퍼티는 데이터 멤버처럼 접 근가능하면서 메서드의 형태로 구현되는 C# 언어의 요소이다.


프로퍼티(속성)를 사용하면 클래스가 구현 또는 코드를 숨기는 동시에 값을 가져오고 설정하는 방법을 공개적으로 노출할 수 있다.
- get 속성 접근자는 속성 값을 반환하고, set 접근자는 새 값을 할당하는데 사용한다.
- set 접근자의 value 키워드는 set 접근자가 할당하는 값을 정의하는데 사용한다.
- set 접근자만을 구현하면 쓰기 전용, get 접근자만을 구현하면 읽기 전용이다.
- value : set 접근자 사용 시 사용되는 암묵적 매개변수


자동구현 프로퍼티

using System;

namespace Property
{
    class Test
    {
        private int x;
        public int X   // 프로퍼티
        {
            get { return x; }
            set {
                x = value; // value : set 접근자 사용시 사용되는 암묵적 매개변수
            }
        }
    }

    class Person
    {
        public string Name { get; set; } // 자동 구현 프로퍼티
        public int Age { get; } // 읽기전용, 자동 구현 프로퍼티
        public int grade { get; } = 5; // 자동속성초기화
        public Person(string name, int age) // 생성자
        {
            this.Name = name;
            this.Age = age;
        }
        
        public override string ToString()
        {
            return $"name={Name}, age={this.Age}, grade={grade}";
        }
    }


    public class SaleItem
    {
        public string Name // 자동 구현 프로퍼티
        { get; set; }

        public decimal Price // 자동 구현 프로퍼티
        { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Test t1 = new Test();
            t1.X = 5000;              // 프로퍼티 set 접근자를 통한 값 지정
            Console.WriteLine(t1.X);  // 프로퍼티 get 접근자를 통한 출력

            Person a = new Person("Tom", 14);
            Console.WriteLine(a);

            var item = new SaleItem { Name = "구두", Price = 150000 };
            Console.WriteLine($"{item.Name}의 판매 가격은 {item.Price}");
        }
    }
}


Program.cs


'C# > 문법 및 기능' 카테고리의 다른 글

C# 인터페이스  (0) 2019.08.18
C# 구조체(Struct)  (0) 2019.08.14
C# 접근 제한자(Access Modifier)  (0) 2019.08.13
자바와 C#의 차이점  (0) 2016.12.27
C# NameValueCollection  (0) 2016.03.20
블로그 이미지

Link2Me

,