클래스를 작성하다보면 private 필드를 선언해야할 경우가 많다.
이 private 필드를 다른 클래스에서 접근하게 하려면 getter, setter 메소드를 따로 정의해 줘야 하는 데 여간 귀찮은 일이 아닐 수 없다.
class MyClass
{
private int myInt;
public int GetMyInt()
{
return myInt;
}
public void SetMyInt(int newInt)
{
this.myInt = newInt;
}
}
class MainApp
{
static void Main()
{
MyClass instance = new MyClass();
instance.SetMyInt(5);
Console.WriteLine(instance.GetMyInt());
}
}
C#에서는 이 귀찮음을 조금 더 우아하게 다루기 위해서 프로퍼티라는 개념을 가져온다.
프로퍼티의 선언
class 클래스이름
{
데이터타입 필드이름;
접근한정자 데이터타입 프로퍼티이름;
{
get
{
return 필드이름;
}
set
{
필드이름 = value;
}
}
}
set에서 value라는 변수는 어디에서도 선언되지 않았지만, 암묵적으로 매개변수로 간주한다.
위의 코드를 프로퍼티로 선언하면 다음과 같다.
class MyClass
{
private int myInt;
public int MyInt
{
get
{
return myInt;
}
set
{
this.myInt = value;
}
}
}
class MainApp
{
static void Main()
{
MyClass instance = new MyClass();
instance.MyInt = 5;
Console.WriteLine(instance.MyInt);
}
}
'=' 연산자를 통해 setter처럼 활용할 수 있다.
class MyClass
{
private int myInt;
public int MyInt
{
get
{
return myInt;
}
}
}
set 접근자를 구현하고 싶지 않으면 get만 정의할 수 도 있다.
자동 구현 프로퍼티
class MyClass
{
public int MyInt
{
get; set;
}
}
class MainApp
{
static void Main()
{
MyClass instance = new MyClass();
instance.MyInt = 5;
Console.WriteLine(instance.MyInt);
}
}
프로퍼티를 활용하더라도 중복된 코드를 작성한다는 느낌이 있다.
이를 위해 C# 3.0 부터 자동구현 프로퍼티 기능이 도입되었다.
프로퍼티 종합 예제
using System;
class BirthdayInfo
{
public string Name
{
get; set;
}
public DateTime Birthday
{
get; set;
}
public int Age
{
get
{
return new DateTime(DateTime.Now.Subtract(Birthday).Ticks).Year;
}
}
public override string ToString()
{
return string.Format("Name : {0}\nBirthDay : {1}\nAge : {2}",
Name, Birthday.ToShortDateString(), Age
);
}
}
class MainApp
{
static void Main()
{
BirthdayInfo birth = new BirthdayInfo();
birth.Name = "셩님";
birth.Birthday = new DateTime(1990, 3, 18);
Console.WriteLine(birth);
}
}
참조
뇌를 자극하는 C# 5.0 프로그래밍, 박상현, 한빛미디어
'아카이빙 > C#' 카테고리의 다른 글
[C#] 인덱서 (0) | 2018.06.20 |
---|---|
[C#] System.Array (0) | 2018.06.20 |
[C#] 추상클래스와 인터페이스 (0) | 2018.06.18 |
[C#] 여러 인터페이스의 멤버를 명시적 구현 (0) | 2018.06.18 |
[C#] 인터페이스 다중 상속 (0) | 2018.06.18 |