728x90
반응형
이번 포스팅은 C#에서 자주 사용하였지만 정확한 명칭은
몰랐던 자동 구현 속성 이해 (Auto-implemented Properties)에 대해 정리하였습니다.
프로퍼티(Property)를 자동으로 사용하기 위함이며 편리하게 사용할 수 있습니다.
| 자동 구현 속성 기본 구조
public type PropertyName { get; set; }
- type : 속성이 반환하는 데이터 유형
- PropertyName : 속성 이름
- { get; set; } : get, set 접근자로 속성 값을 읽거나 설정하는 데 사용
| 자동 구현 속성 동작 원리
- 내부적으로 해당 속성을 저장하고 반환하는 백엔드 필드 생성
- 백엔드 필드의 이름은 자동 생성되며 외부에서 직접 액세스 불가
- 컴파일러가 필드를 처리하므로 get 및 set 접근자를 통해 값을 읽고 저장
- 이제 예시를 통해 구현해 보고 사용방법에 대해 알아보겠습니다.
예시) 자동 구현 속성의 사용
// 초기화
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Person person = new Person();
person.Name = "John Doe"; // 값을 설정 (set)
string name = person.Name; // 값을 가져옴 (get)
person.Age = 30; // 값을 설정 (set)
int age = person.Age; // 값을 가져옴 (get)
- 이는 프로퍼티에서 get, set 접근자를 직접 구현하는 것과 다른 방법으로 구현한 것을 확인할 수 있습니다.
예시) get, set 접근자를 직접 구현
public class Person
{
private string name; // 백엔드 필드: 데이터를 저장하기 위한 필드
// 프로퍼티: 데이터에 액세스하는 인터페이스를 제공하며 백엔드 필드와 상호 작용합니다.
public string Name
{
get
{
// 'get' 접근자: 프로퍼티 값을 가져올 때 실행되는 코드 블록
return name; // 백엔드 필드 값을 반환
}
set
{
// 'set' 접근자: 프로퍼티 값을 설정할 때 실행되는 코드 블록
if (!string.IsNullOrEmpty(value))
{
// 유효성 검사: 이름이 비어있지 않을 경우만 설정
name = value; // 백엔드 필드에 값을 저장
}
else
{
Console.WriteLine("이름은 빈 문자열이 될 수 없습니다.");
}
}
}
}
- 위 코드는 자동 구현 속성을 사용하지 않고 직접 set 접근자를 구현하는 방법이며
이는 프로퍼티의 사용방법입니다.
| 자동 구현 속성과 프로퍼티의 구현 차이
1. get, set 접근자를 직접 구현한 프로퍼티 :
private string name; // 필드
public string Name
{
get { return name; } // 값을 가져오는 로직
set { name = value; } // 값을 설정하는 로직
}
사용법 :
Person person = new Person();
person.Name = "John Doe"; // 값을 설정 (set)
string name = person.Name; // 값을 가져옴 (get)
2. 자동 구현 속성을 사용한 프로퍼티 :
public string Name { get; set; }
사용법 :
Person person = new Person();
person.Name = "John Doe"; // 값을 설정 (set)
string name = person.Name; // 값을 가져옴 (get)
- 두 가지 방식 모두 프로포티를 사용하는 방법은 동일하며
사용자 입장에서는 값의 설정과 가져오는 방식이 일치합니다.
직접 get, set 접근자를 구현하며 더 많은 제어와 로직 추가가 가능하지만
코드가 복잡해질 수 있으며
자동 구현 속성은 간결하게 값을 저장하고 가져오는 데 사용되며 일반적으로 잘 사용하는 방법입니다.
| 마무리
- C#에서 자동 구현 속성은 객체의 데이터를 캡슐화하고 손쉽게 관리하게 해 줍니다.
코드를 더 간결하게 작성하고 가독성을 높이게 해 주며
이를 통해 저는 프로젝트에서 효과적으로 작업할 수 있었습니다.
틀린 점이나 질문이 있으시면 댓글로 남겨주세요.
감사합니다 다음 포스팅으로 찾아오겠습니다 :)
728x90
반응형
'C#' 카테고리의 다른 글
C# 이벤트 정의와 등록 및 제거 방법 (0) | 2023.11.01 |
---|---|
C# 이벤트 발생 (Event Raising) 이해 (0) | 2023.10.31 |
[C#] CancellationToken 이해 (0) | 2023.10.25 |
[C#] Marshal.Copy 이해 (0) | 2023.09.26 |
[C#] Bitmap.Clone() vs new Bitmap() 비교 (0) | 2023.09.26 |