본문 바로가기

프로그래밍/기본기ㆍ자료구조

Property (프로퍼티)

728x90
반응형

개념

- 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