[C# 고급문법] #1 프로퍼티(Property) & get/set 함수
- Archive2/C#
- 2021. 6. 2.
[목차]
- get/set 함수
- 프로퍼티(Property)
- 자동구현 프로퍼티
* 개인적인 공부 기록용으로 작성한 포스팅 이기에, 잘못 된 내용이 있을 수 있습니다.
#1 get / set 함수
프로그래머는 정보 은닉을 위해서, 클래스 내부의 속성들을 private 혹은 protected 로 선언 합니다.예를 들어 knight 클래스의 protected로 선언된 hp 변수가 있다고 가정해 봅시다.
class knight
{
protected int hp;
}
hp 변수를 main 클래스에서 접근 하고자 하면, 아래와 같이 보호 수준 에러가 발생합니다.
class Knight
{
protected int hp;
}
static void Main(string[] args)
{
Knight knight = new Knight();
knight.hp = 100;
}
외부에서도 특정 클래스의 protected / private 속성에 접근하기 위해 , 프로그래머는 Get , Set 함수 라는 것을 정의하여 사용합니다.
class Knight
{
protected int hp;
// Get Function
public int GetHp()
{
return hp;
}
// Set Function
public void SetHp(int hp)
{
this.hp = hp;
}
}
static void Main(string[] args)
{
Knight knight = new Knight();
knight.SetHp(100);
knight.GetHp();
}
위와 같이 public 으로 정의한 Get , Set 함수 ( Getter , Setter 함수 라고도 부릅니다. ) 를 이용해 클래스 내부의 protected / private 속성들에 접근을 하는 것이지요. * 여기 까지의 내용은 [C#] 6. OOP 은닉성 편에서도 다루었습니다.
#2 프로퍼티(Property)
하지만, 프로젝트의 범위가 커지면 이러한 Get Set 함수의 개수가 몇십개 이상으로 늘어날 것입니다.
따라서 C#은 Get Set 함수를 관리하기 쉽도록 프로퍼티(Property)라는 문법을 제공합니다.
사용 방법은 아래와 같이, 프로퍼티 내부에 get { } set { } 형식으로 작성 하면 됩니다.
* 프로퍼티의 set접근자 내부의 value는 전달 받은 인자 값을 의미합니다.
// Property
public int Hp
{
get { return hp; }
set { hp = value; }
}
이 처럼 프로퍼티(Property) 문법을 이용하면, 굳이 Get / Set 함수를 따로 정의해 줄 필요도 없고, 코드의 길이도 줄어들어 가독성도 좋아집니다.
#3 자동 구현 프로퍼티
프로퍼티(Property)를 더욱 간략화 하기 위해서 C# 7.0 버전 이상부터 자동 구현 프로퍼티 라는 문법을 제공합니다.
자동 구현 프로퍼티를 이용하면, 아래 처럼 소스코드를 한 줄로 줄이는 것 도 가능합니다.
[사용 방법] public int Hp { get; set; }
class Knight
{
protected int hp;
public int Hp { get; set; }
}
static void Main(string[] args)
{
Knight knight = new Knight();
knight.Hp = 100;
int myHp = knight.Hp;
}
'Archive2 > C#' 카테고리의 다른 글
[C# WPF] #0 WPF란 무엇인가? (WPF VS Winform) (0) | 2021.06.06 |
---|---|
[C#] 7. OOP 다형성(Polymorphism) - Virtual 가상함수 & Override 오버라이딩 (0) | 2021.06.03 |
[C#] 6. OOP 은닉성(Data Hiding) 접근 한정자 - public/protected/private (0) | 2021.06.01 |
[C#] 5. OOP 상속(inheritance) & base 키워드 (0) | 2021.05.31 |
[C#] 4. static 정적 변수 / 정적 함수 / 정적 클래스 (0) | 2021.05.31 |