클래스의 멤버 변수를 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