개념
- Get과 Set이라는 접근자로 구성
- 변수를 은닉하여 사용하기 위함
- 객체지향의 4가지 속성중 캡슐화를 구현하기 위해 사용
- Get과 Set 앞에 접근제한자를 선언하여 접근에 제한을 둘 수 있다.
- void를 제외한 데이터 형식 정의 가능
- 실제 메모리상에서 값을 가지고 있지 않기 때문에 ref out은 사용 불가
사용 방법
1번)
private int m_level;
public int Level { get { return m_level; } set { m_level = value; } }
// 여기서 value란, set 접근자가 암묵적으로 매개 변수로 간주하는 값
public void SetLevel(int level)
{
Level = level; // 이렇게 Level에 값을 대입하면 Level에 선언되어 있는 set 접근자를 통해 m_level에 level 값이 셋팅된다.
System.Console.WriteLine(Level.ToString());
// 이렇게 Level을 사용하면 get 접근자를 통해 m_level을 얻어온다.
}
2번)
public int Level { get { return m_level; } }
// 위 처럼 get만 설정할 수도 있다. (읽기만 가능하다)
3번)
public int Level { get; set; }
// 1번과 동일한데, m_level을 선언해줄 필요가 없어진다.
// 위 같은 코드를 자동 구현 프로퍼티라고 한다.
4번)
private m_hp;
private m_upgradeHpValue;
private m_upgradeHpCount;
public int TotalHp { get { return m_hp + (m_upgradeHpCount * m_upgradeHpValue); } }
위 처럼 get을 할 때 어떠한 동작을 구현해서 리턴해도 된다.
* 프로퍼티를 사용할 떄 가장 중요하다고 생각되는 부분
프로퍼티를 사용할 때 set은 되도록 private로 하고 읽기만 가능하도록 구현하는 것이 좋다.
만약 set의 접근제한자가 public이면 의도치 않은 곳에서 데이터를 수정할 수가 있어서 위험하다.
(실제 팀 프로젝트를 하다보면 내가 만들어놓은 코드가 다른 작업자에 의해 의도와 다르게 사용되곤 한다.
그리고 그런것들이 쌓이다보면 돌이킬 수 없는 코드가 되어 수정이 어려워진다.)
* 내가 프로퍼티를 사용하는 방법
private int m_level;
public int Level { get { return m_level; } }
위 처럼 외부에서는 읽기만 가능하도록 get만 구현하거나
public int Level { get { return m_level; } private set { m_level = value; } }
위 처럼 set 앞에 private를 선언하여 set은 내부에서만 호출 가능하도록 구현한다.
'프로그래밍 > 기본기ㆍ자료구조' 카테고리의 다른 글
BackBuffer (백버퍼) (5) | 2020.05.01 |
---|---|
Property Indexer (프로퍼티 인덱서) (5) | 2020.04.30 |
var와 let의 차이 (10) | 2020.04.28 |
재귀호출 (2) | 2020.04.28 |
정규식 (정규 표현식) (7) | 2020.04.27 |