본문 바로가기
프로그래밍/C#

C# Property/Getter / Setter

by Roland 2021. 11. 24.

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 영역이된다, 따라서 둘다 접근을 할 수 있다.

댓글