C#에는 프로퍼티라는 아주 효과적인 기능이 존재한다.
private 선언을 통해서 변수의 은닉성은 유지하면서도
값을 수정하거나 불러오는 편의성을 확보할 수 있다.
우선은 1. 프로퍼티를 사용하는 가장 기본적인 방법을 설명하고
그 뒤에, 실제로 사용하게 되는 더 간단한 형태인 2. 자동구현프로퍼티를 설명하겠다.
1. 을 읽으면서 우선 프로퍼티를 이해하고
코드를 작성할 때는 2의 방식으로 작성하면 될 것 같다.
1. 프로퍼티를 사용하는 가장 기본적인 방법
우선, 프로퍼티를 선언하는 방식을 알아보자.
class 클래스이름
{
// 데이터형식 필드이름;
private int myField;
// 접근제한자 데이터형식 프로퍼티이름
public int MyField
{
get
{
return myField; // return 필드이름;
}
set
{
myField = value; // 필드이름 = value;
}
}
}
프로퍼티에서 get{...}과 set{...}을 접근자라고 한다.
get접근자는 필드로부터 값을 읽어오고, set 접근자는 필드에 값을 할당한다.
set 접근자에 value는 컴파일러가 자동으로 매개변수로 간주한다.
위와같이 프로퍼티로 코드를 작성하면,
myField가 private로 선언되었음에도
데이터를 다른 곳에서 불러오거나 변경할 수 있게 된다.
만약, set접근자를 아예 생략해버린다면
읽기전용 프로퍼티로 만들수도 있다.
실제 사용 예제를 살펴보자.
using System;
namespace Property
{
class BirthdayInfo
{
private string name;
private DateTime birthday;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public DateTime Birthday
{
get
{
return birthday;
}
set
{
birthday = value;
}
}
public int Age
{
get
{
return new DateTime(DateTime.Now.Subtract(birthday).Ticks).Year;
}
}
}
class MainApp
{
static void Main(string[] args)
{
BirthdayInfo birth = new BirthdayInfo();
birth.Name = "서현";
birth.Birthday = new DateTime(1991, 6, 28);
Console.WriteLine($"Name : {birth.Name}");
Console.WriteLine($"Birthday : {birth.Birthday.ToShortDateString()}");
Console.WriteLine($"Age : {birth.Age}");
}
}
}
위의 코드를 실행하면
Name : 서현
Birthday : 1991-06-28
Age : 29
가 출력된다.
Name과 Birthday는 프로퍼티를 통해서 값을 입력하고 불러왔으며,
Age는 get만 존재하는 읽기 전용이므로 불러올 수 있다.
2. 자동 구현 프로퍼티
프로퍼티는 굉장히 편리한 기능이지만, 위에 설명한 대로 코드를 작성해야한다면 매우 귀찮을 수도 있다.
단순히 읽고 쓰기만 하는데 중복된 코드를 더 작성하는 기분이 들기 때문이다.
C#에서는 이런 경우에 코드를 더 단순하게 만드는 자동 구현 프로퍼티가 존재한다.
자동구현프로퍼티의 예를 보자.
class 클래스이름
{
private int myField { get; set; } = 1;
}
글의 초반부 1번 설명에서와 동일한 프로퍼티 소스코드이다.
코드의 길이가 압도적으로 줄어들었음을 확인할 수 있다.
자동구현프로퍼티는 추가적인 선언 없이 그저 get과 set을 적어주기만 하면 된다.
그리고 이렇게 선언함과 동시에 초기화도 한번에 수행할 수가 있다.
따라서, 초기값이 필요한 경우에도 간단하게 작성할 수가 있다.
자동구현프로퍼티를 사용해서 1번에서 확인했던 예제를 짧게 줄여보면
자동구현 프로퍼티의 효력을 확실하게 느낄 수 있을 것이다.
'C# > C# 공부' 카테고리의 다른 글
C# : 비트연산자1 - 시프트 연산자 (0) | 2021.07.11 |
---|---|
C# : null 조건부 연산자 (0) | 2021.07.10 |
C# : Nullable 형식 (0) | 2021.07.10 |
C#: 열거 형식 (enum) (0) | 2021.07.10 |
C# : 상수( const ) (0) | 2021.07.09 |
댓글