프로퍼티라고도 불리는 C#의 속성을 개인적으로 어떻게 사용하는지 정리해보고자 합니다.
속성의 사용이유
속성은 한 클래스의 필드의 변수를 외부 클래스에서 다루고 싶을때 사용하게 되는 클래스 멤버입니다.
필드의 변수 자체를 public 을 사용하여 외부 클래스에서 사용할경우 객체 지향 프로그래밍의 특징중 하나인 캡슐화에 위배되며, 외부에서의 접근으로부터 데이터를 숨길 수 없게됩니다.
속성은 클래스의 변수를 숨기면서 자신의 필드를 접근자를 통해 공개하여 객체 지향 프로그래밍의 캡슐화 특성을 지키는 역할을 합니다.
접근자
속성의 접근자는 get, set이 존재하며, get을 통해 필드의 값을 참조할 수 있고, set 을 통해 내용을 설정할 수 있습니다.
접근자는 둘 다 사용하거나 둘중 하나만 사용하는것도 가능합니다.
사용
속성은 기본적으로 이런 형태를 가집니다.
//Character 클래스
//이름
public string Name { get; set; }
이 경우, 외부 클래스에서 Name 속성의 값을 변경할 수 있으며, 참조할 수 도 있습니다.
//다른 클래스
private Character char = new Character()
//참조
string myName = char.Name;
//설정
char.Name = "홍길동"
기본값에서 set에 private 접근 제한자를 사용할 경우 외부에서 참조할 수는 있지만, 속성의 값을 수정할수는 없게됩니다.
//이름
public string Name { get; private set; }
//다른 클래스
private Character char = new Character()
//참조
string myName = char.Name;
//불가능, Name 속성의 set 접근자가 숨겨져있음
char.Name = "홍길동"
주로 외부에서 변수를 참조해야할 때 이러한 속성을 사용하게됩니다.
또한 속성을 통해 클래스의 멤버 변수에 접근하도록 만들어 줄 수 도 있습니다.
private string name;
//Name 속성을 통해 name에 접근할수 있음
public string Name
{
get { return name; }
set { name = value; }
}
이 경우 속성인 Name 을 통해 외부 클래스에서 필드 멤버변수인 name 에 접근하여 수정과 참조가 가능해집니다.
이경우 역시 set에 private를 사용하여 값을 수정할 수 없게 만들어줄수도 있습니다.
private string name;
//Name 속성을 통해 name에 접근할수 있음, 단 외부에서 name값의 변경은 불가능
public string Name
{
get { return name; }
private set { name = value; }
}
속성을 통해 멤버변수를 공개할때는 set 값을 없이 설정하는경우가 있는데, 이 경우에는 같은 클래스 내부에서도 Name을 통한 값 수정이 불가능하며 속성은 오직 name에 저장된 값을 반환해주는 역할만 하게됩니다.
private string name;
//Name을 통한 name 값 수정 불가능 오직 name값을 반환하는 역할만 함
public string Name
{
get { return name; }
}
개인적으로는 속성을 사용할때는 외부 클래스에서 변수값을 참조해와야할 때 주로 사용되기 때문에 set을 숨기거나 만들지 않는 읽기전용 속성을 주로 사용하게 되었습니다.
또한, 속성의 접근 제한자는 get, set이 가진 접근 제한자보다 높아야 합니다.
//이름
//오류발생, 속성의 접근제한자는 get, set의 접근 제한자보다 높아야함
private string Name { get; private set; }
//이름
//문제 없음
//단 자식클래스에서 이 값을 참조할 수는 있지만 수정할 수 없음
protected string Name { get; private set; }
또한 = 을 사용하여 속성의 초기값을 지정해줄 수 있습니다.
//이름
//속성에 초기값 "Player" 지정
protected string Name { get; private set; } = "Player"
만약 속성의 set을 사용하지 않을경우 생성자 혹은 = 을 사용해 지정해준값이 저장되며, 이외의 방법으로는 값을 변경할 수 없게됩니다.
//이름
//속성에 초기값 "Player" 지정, 클래스 내부에서도 변경할 수 없음
protected string Name { get; } = "Player"
오늘의 TIL로써 개인적으로 주로 속성을 사용하는법을 정리해보았습니다.
'내일배움캠프 > TIL' 카테고리의 다른 글
내일배움캠프 14일차 TIL - 마크다운(Mark Down) 문법 (0) | 2024.10.02 |
---|---|
내일배움캠프 13일차 TIL - C# 이벤트 (0) | 2024.10.01 |
내일배움캠프 11일차 TIL - GC(가비지 컬렉터) (0) | 2024.09.27 |
내일배움캠프 10일차 TIL - C# 싱글톤 (0) | 2024.09.26 |
내일배움캠프 9일차 TIL - 인터페이스 (0) | 2024.09.25 |