메소드보다 프로퍼티
class MyClass
{
private int myField;
public int MyField
{
get
{
return myField;
}
set
{
myField = value;
}
}
}
- 자바와 달리 C#에서는 프로퍼티라는 우아한 방법을 장치를 통해 필드의 은닉성을 보장한다.
자동 구현 프로퍼티
public class NameCard
{
public string Name { get; set; }
public string Number { get; set; }
public string Date { get; private set; } // 이렇게 쓰면 읽기는 public, 쓰기는 private가 적용된다.
}
- 일반적인 프로퍼티도 우아하지만 매번 필드와 프로퍼티를 따로 작성하는 것이 번거롭기 때문에 C# 3.0부터는 아예 자동구현 프로퍼티라고 해서 위와 같이 코드를 작성해도 프로퍼티로 인식해주고 있다.
프로퍼티와 생성자
public class BirthdayInfo
{
public string Name { get; set; }
public DateTime Birthday { get; set; }
public int Age { get; set; }
}
BirthdayInfo birth = new BirthdayInfo()
{
Name = "수영", // 콤마(,)를 이용한다.
Birthday = new DateTime(1982, 4, 16)
};
- 객체를 생성할 때 프로퍼티를 이용해서 초기화 할 수도 있다.
- 초기화 할 때는 객체의 모든 프로퍼티를 초기화할 필요가 없기 때문에 생성자를 작성할 때와 달리 어떤 필드를 초기화 할 지 고민할 필요가 없다.
무명 형식
// 중괄호 사이에 임임의 프로퍼티 이름을 적고 값을 할당하면 그대로 새 형식의 프로퍼티가 된다.
var myInstance = new { Name = "박수영", Age = "34" };
// 이렇게 선언된 무명 형식의 인스턴스는 여느 객체처럼 프로퍼티에 접근하여 사용할 수 있다.
Console.WriteLine(myInstance.Name, myInstance.Age);
- 무명 형식은 형식의 선언과 동시에 인스턴스를 할당한다. 이 때문에 인스턴스를 만들고 다시는 사용하지 않을 때 요긴하다.
- 무명 형식의 프로퍼티에 할당된 값은 변경이 불가능하다. 인스턴스가 만들 때 값을 넣은 후에는 읽기만 가능하다는 이야기
- 무명 형식은 LINQ와 함께 사용하면 매우 요긴하다.
인터페이스의 프로퍼티
interface IProduct
{
string ProductName { get; set; }
}
- 인터페이스에 들어가는 프로퍼티는 구현을 갖지 않기 떄문에 자동 구현 프로퍼티 선언과 모습이 같다.
추상 클래스와 프로퍼티
abstract class Product
{
abstract public DateTime ProductDate { get; set; }
}
- 추상 클래스는 그 특성상 구현된 프로퍼티와 구현되지 않은 프로퍼티를 모두 가질 수 있다. 추상 클래스에서 구현되지 않은 프로퍼티를 만들 때는 abstract 한정자를 붙여서 만들면 된다.
관련