minjea.dev의 코딩블로그
[c#] get과 set 본문
필드에 직접적으로 접근하는것은 허용하고 싶지 않고, 그렇다고, 필드를 가져오는 메서드를 따로 정의하자니 그건 조금 그렇고, 어떻게 해야 할지 모르실때 사용하면 좋으신 기능인 get과 set에 대하여 오늘 알려드리겠습니다.(c#에선 이걸 프로퍼티라 합니다.)
예를 들어, Example 클래스에 private 접근제한자를 가진, ex 필드가 있다고 해 봅시다. 그러면 외부에서 이 필드에 접근하려면 어떻게 해야 할까요? 우리가 배운 지식으로는, 공개 메서드를 하나 만들어 값을 리턴해야할겁니다.
class Example {
int ex;
public int getEx() {
return this.ex;
}
}
그렇다면 값을 정하는것은 어떻게 해야 할까요? 또 하나의 메서드를 만들어야 하겠죠? (물론 생성자를 이용해도 되지만, 여러번 생성자를 호출하는건 불가능하니까 생성자는 사용하지 않는것으로 하겠습니다.)
class Example {
int ex;
public int getEx() {
return this.ex;
}
public void setEx(int ex) {
this.ex = ex;
}
}
이렇게 작성된 코드를 조금 더 간결하고 보기 쉽게 작성할수 있게 c#에서 지원하는 키워드가 바로 get과 set입니다. 그러면 get과 set을 어떻게 이용할수 있을까요? 일단 get과 set의 정의법은 다음과 같습니다.
// get과 set은 클래스 내에서만 정의 가능
접근제한자 타입 프로퍼티명 {
접근제한자1 get {
// code
return 프로퍼티의 타입과 일치하는 값;
}
접근제한자2 set {
// code
}
}
그렇다면 일단 get을 사용하여 Example 클래스를 수정해 봅시다.
class Example {
int ex;
public int EX {
get {return this.ex;}
}
}
아까전보다 코드가 정말 짧아졌습니다. 그러면 이제는 set을 정의해봅시다. 그런데 set에서 값은 어떻게 받아올까요? 프로퍼티의 정의에는 매개변수를 받아오는것도 불가능한데 말이죠. 이걸 알고 c# 컴파일러는 set 안에서만 사용이 가능한 value 예약어를 제공합니다(이 value는 set 밖에서는 변수명으로 사용하거나, 메서드명으로 사용할수 있습니다).
class Example {
int ex;
public int EX {
get {return this.ex;}
set {this.ex=value;}
}
}
그러면 이렇게 정의된 get, set은 어떻게 사용할수 있을까요? 바로 다음처럼 사용이 가능합니다.
Example example = new Example();
example.EX = 10;
Console.WriteLine(example.EX);
class Example {
int ex;
public int EX {
get {return this.ex;}
set {this.ex=value;}
}
}
결과를 보면 잘 작동하는것을 볼수 있습니다.
오늘은 이렇게 프로퍼티에 대하여 알아보았습니다.
'코딩강좌 > c#' 카테고리의 다른 글
[c#] 델리게이트 (0) | 2022.04.21 |
---|---|
[c#] 추상 클래스 (0) | 2022.04.20 |
[c#] 아주 오래전에 했어야 했으나 지금에서야 하는 배열강좌 (0) | 2022.04.18 |
[c#] 오버로드 (오버라이딩 아님주의!) 그리고 여러 기능들 (1) | 2022.04.17 |
[c#] virtual 그리고 override (0) | 2022.04.16 |