상세 컨텐츠

본문 제목

[C#] 프로퍼티

.NET/C#

by 클리엘 클리엘 2021. 2. 1. 13:11

본문

728x90

1. 프로퍼티

 

클래스를 작성할때 어떤 필드에 대해서 외부접근을 허용하고자 한다면 해당 필드를 public으로 하면 됩니다. 그러나 이 방법은 가장 쉽지만 클래스의 은닉성을 확보하지 못한다는 점에서 큰 문제입니다. 그래서 우리는 그에 대한 대안으로 프로퍼티 사용을 생각해 볼 수 있습니다.

class Car
{
	private int speed;
	public int Speed
	{
		get {
			return speed;
		}
		set {
			speed = value;
		}
	}

	public void Drive()
	{
		Console.WriteLine($"Speed : {Speed}");
		Console.WriteLine("Drive");
	}
}

Car클래스에서 사용된 speed가 Speed라는 프로퍼티로 사용된 것입니다. 여기서 get은 speed필드에 값을 할당하고 get은 speed필드의 값을 가져오도록 합니다. 따라서 get을 생략하면 speed에는 값을 할당할뿐 읽어올 수 없는 상태가 되고 set을 생략하면 저장된 값을 불러오기만 할뿐 값을 할당할 수 없는 상태가 됩니다.


2. 자동 구현 프로퍼티

 

프로퍼티는 또한 다음과 같이 간략화한 표현도 가능합니다.

class Car
{
	public int Speed
	{
		get;
		set;
	}

	public void Drive()
	{
		Console.WriteLine($"Speed : {Speed}");
		Console.WriteLine("Drive");
	}
}

speed라는 이름을 반복적으로 사용하지 않고 극단적으로 줄인 에인데 C#에서는 이것을 '자동 구현 프로퍼티'라고 합니다. 그러나 자동 구현 프로퍼티는 단순히 값에 대한 읽기와 할당만을 가질때 유용한 것이며 내부에 구체적인 구현이 추가되어야 하는 경우 자동 구현 프로퍼티를 유지할 수는 없습니다.

private int speed;
public int Speed
{
	get{
		return speed;
	}

	set {
		if (value > 100) {
			Console.WriteLine("과속");
			speed = value;
		}
	}
}

프로퍼티는 선언과 동시에 필드에 대한 초기값을 할당할 수도 있고

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

클래스의 인스턴스를 생성할때도 초기값을 할당시켜 줄 수 있습니다.

static void Main(string[] args)
{
	Car c = new Car() { Speed = 100 };
	c.Drive();
}

3. 무명형식

 

프로퍼티는 간략하게 프로퍼티들로만 묶어서 값을 할당하고 가져오는 무명형식을 지원합니다.

static void Main(string[] args)
{
	var c = new { Speed = 100, Color = "Red" };
	Console.WriteLine($"{c.Speed}");
}

다만 무명형식은 한번값을 할당하면 그 값은 다시 바꿀 수 없습니다.

728x90

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

[C#] 일반화  (0) 2021.02.11
[C#] 배열및 컬렉션과 인덱서활용 그리고 나열하기  (0) 2021.02.08
[C#] 프로퍼티  (0) 2021.02.01
[C#] 인터페이스와 추상클래스  (0) 2021.01.28
[C#] 클래스  (0) 2021.01.26
[C#] 구조체와 튜플  (0) 2021.01.25

관련글 더보기

댓글 영역