Learning
When: 1학년 5월 13일
How:
학교에서 개인 프로젝트를 하다가 프로퍼티를 사용하게 되었는데, 조금 더 자세히 알고 싶어서 공부를 하게 되었습니다.
Understanding:
프로퍼티는 변수를 public으로 선언하고 싶을 때 사용할 수 있는 메서드 비슷한 무언가입니다. 프로퍼티를 알기 전에
머릿속에 들어 있어야 하는 개념이 있는데, 그것은 캡슐화입니다. 캡슐화는 간단히 말하면 변수가 public으로 설정되어 무방비하게 존재해서는 안 된다는 것이며, 이때 다른 클래스에서 이 변수를 참조하려면 인스턴스를 만든 후, 그 인스턴스 안에 있는 변수에 접근할 수 있는 메서드를 호출해야 합니다. 간단히 말하면 접근하게 하고 싶은 변수는 따로 그 변수를 반환하거나 바꿀 수 있는 메서드를 만든 후, 그 메서드를 통해서만 접근할 수 있도록 만드는 것입니다. 그런데 이런 식으로 변수에 접근하는 것은 너무나도 번거롭습니다. 변수에 메서드를 두 개씩이나 달아줘야 완전히 접근할 수 있다니요. 그렇기에 C#은 프로퍼티를 만들었습니다. 이 프로퍼티는 간단히 말해서 Get, Set 메서드의 단축형입니다.
이게 무슨 말이냐면, 코드로 보여드리는 것이 빠르겠습니다.
private int a = 1;
public void Seta(int value)
{
a = value;
}
public int Geta()
{
return a;
}
이런 긴 코드가
private int a = 1;
public int A
{
get { return a; }
set { a = value; }
}
이런 짧은 코드로 바뀌고, 심지어 public int a { get; set; } = 1; 이렇게 한 줄만으로도 끝낼 수 있습니다. (자동 구현 프로퍼티)
이것을 사용하는 방법도 아주 간단한데, 사용할 때는 a가 아니라 A를 사용하면 됩니다. 여기서 두 가지 의문점이 들 수 있습니다.
첫 번째는 get은 메서드를 단축시킨 거라 하니까 그렇다 쳐도, 저기 있는 value 변수는 어디서 나온 것인지 궁금할 수 있습니다. 이 value는 자동으로 만들어진 변수로, 예를 들어 A = 10;이라고 작성했을 때 자동으로 10이 됩니다.
두 번째 궁금증은 이렇게 하는 것과 그냥 변수를 public으로 선언하는 것과의 차이입니다. 그 답은 아까 Get, Set 메서드를 사용하는 이유와 관련이 있습니다. 제가 미처 그것을 설명드리지 않았습니다.
Get, Set처럼 접근을 메서드로 하면, 그 메서드 안에 "a가 0보다 클 때만 접근을 허용해라" 같은 조건을 넣을 수 있고, 아무 곳에서나 호출되어 캡슐화 규칙에 어긋나게 되는 것을 방지할 수 있다는 장점이 있습니다. 프로퍼티도 같은 원리로 작동합니다.
Result: 프로퍼티는 캡슐화를 위해 사용되는 Get, Set 메서드를 단축시킨 메서드와 public 필드 사이의 무언가입니다.
'C#' 카테고리의 다른 글
| [C#] 인터페이스와 추상 클래스 (0) | 2025.05.15 |
|---|---|
| [C#] out, ref 키워드 (0) | 2025.05.14 |
| [C#] 다형성 (0) | 2025.05.12 |
| [C#] 빠른 입력과 출력 (0) | 2025.05.04 |
| [C#] switch문 (0) | 2025.05.03 |