public 필드의 유혹
필드를 public으로 선언하면 은닉성이 지켜지지 않기 때문에 접근 한정자를 private로 설정 후 Get/Set 메소드를 따로 만들어서 해당 필드에 접근할 수 있도록 하였다.
class MyClass
{
private int myField;
public int GetMyField()
{
return myField;
}
public void SetMyField(int myFiled)
{
this.myField = myFiled;
}
}
class Program {
static void Main(string[] args)
{
MyClass myClass = new MyClass();
myClass.SetMyField(3);
Console.WriteLine(myClass.GetMyField());
}
}
Get/Set 메소드를 만들어서 접근하는 방식은 보통 Java에서 사용하지만 C#에서는 프로퍼티 라는 문법을 이용해서 이를 더 쉽게 사용할 수 있도록 도와준다.
프로퍼티 사용법
class MyClass
{
private int myField;
public int MyField
{
get { return myField; }
set { myField = value; }
}
}
class Program {
static void Main(string[] args)
{
MyClass myClass = new MyClass();
myClass.MyField = 3;
Console.WriteLine(myClass.MyField);
}
}
여기서 value는 set 접근자의 암묵적 매개변수(수정할 값)로 간주하기 때문에 컴파일 문제를 일으키지 않는다.
"=" 할당 연산자를 그대로 사용할 수 있다는 차이가 있다.
class MyClass
{
private int myField;
public int MyField
{
get { return myField; }
}
}
읽기 전용 프로퍼티는 get만 써주면 된다.
자동 구현 프로퍼티
해당 프로퍼티가 단순히 읽고 쓰는 작업을 하는 경우 private 필드와 프로퍼티를 합쳐서 한번에 만들 수 있다.
자동 구현 프로퍼티는 C# 3.0 부터 도입된 문법이다.
class MyClass
{
public int MyField
{
get; set;
}
}
class Program {
static void Main(string[] args)
{
MyClass myClass = new MyClass();
myClass.MyField = 3;
Console.WriteLine(myClass.MyField);
}
}
C# 7.0 부터는 다음과 같이 자동 구현 프로퍼티를 선언함과 동시에 초기화를 수행할 수 있다.
class MyClass
{
public int MyField
{
get; set;
} = 1000;
}
class Program {
static void Main(string[] args)
{
MyClass myClass = new MyClass();
Console.WriteLine(myClass.MyField); // 1000
}
}
'프로그래밍 언어' 카테고리의 다른 글
C# 추상 클래스 (0) | 2024.03.05 |
---|---|
C# 상수와 열거형 (0) | 2024.02.29 |
C# reflection (0) | 2024.02.28 |
객체지향 프로그래밍(OOP) 개념정리 (0) | 2024.01.25 |
C# Delegate(대리자) (0) | 2023.11.10 |