Class의 데이터를 밖에서 사용하지 못하게 하는것 까지는 좋았다,
하지만 Private으로 선언된 데이터를 사용하고 싶을때도 있다, 그래서 나온게 Getter / Setter 이다.
샘플예제를 보면
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
using System;
namespace C_Double_Array
{
class Program
{
static void Main(string[] args)
{
Car car = new Car();
Console.WriteLine(car.GetPrice());
Console.WriteLine(car.GetGas());
}
}
class Car
{
private int mPrice = 500000;
private float mGas = 600.00f;
// Getter / Setter // 멤버 변수를 직접 접근하지 않고 함수를 이용해서 접근하기 위해서 사용한다.
public int GetPrice()
{
return mPrice;
}
public float GetGas()
{
return mGas;
}
}
}
|
cs |
mPrice와 mGas는 private 영역으로 되어 있지만, Get함수를 통해 밖에서 그값을 가져올수 있음을 보여준다.
하지만 C#에서는 이러한 과정을 더욱 편리한 개념이 나왔는데, 그 개념이 프로퍼티 이다.
프로퍼티 : (명사) 재산,특성,속성
변수와 메서드(Getter,Setter)가 모두 함께 있는 형태
프로퍼티는 변수가 아니다
컴파일러가 알아서 getter / setter 함수를 만들어준다
멤버 변수를 외부에 노출하지 않고 데이터를 변경할 수 있게 해준다
Getter와 Setter 함수 처럼 추가적인 논리 코드도 넣을 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
|
public int Price
{
get
{
return mPrice;
}
set
{
mPrice = value;
}
}
|
cs |
위 코드를 보면 Getter/Setter 와 비교했을때 ()가 없고 훨씬더 편해진것을 볼수있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class Program
{
static void Main(string[] args)
{
Car car = new Car();
int i = car.Price;
car.Price = 4;
Console.WriteLine(car.GetPrice());
Console.WriteLine(car.GetGas());
Console.WriteLine(i);
}
}
|
cs |
위 Getter/Setter 와 마찬가지로 Private영역의 멤버변수에 접근 할 수가 있다.
더욱 간단히 만들어보면,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
EX ex = new EX();
ex.P_ex = 12.0f;
ex.P_ex2 = 10;
Console.WriteLine(ex.P_ex);
Console.WriteLine(ex.P_ex2);
}
}
class EX
{
public int P_ex2 { get; set; }
public float P_ex { get; set; } = 10.0f;
// 주의 할점은 앞에 접근 지정자가 private 이면 get set은 public 이 올수 없다.
}
}
|
cs |
앞에가 public 이므로 get 과 set 모두 public 영역이된다, 따라서 둘다 접근을 할 수 있다.
'프로그래밍 > C#' 카테고리의 다른 글
[C#] 깊은 복사 vs 얕은 복사 (0) | 2024.11.26 |
---|
댓글