본문 바로가기

Study_C#

[C#] Get, Set 키워드

728x90
반응형

Get, Set

  • C++의 경우, Data의 은닉성을 위해 Member 변수를 Private나 Protected로 선언한 후, 그 변수를 이용할 때 Set(), Get()과 같은 함수를 만들어 이용해야 했음
  • C#의 경우, Get, Set Property를 통해 이를 간단하게 처리할 수 있음

 

  • Class를 Instance화 하여 내부의 Field와 Property를 할당, 조회할 수 있음
  • Field에 get, set을 이용해 Property로 처리할 수 있음
  • 이 때 Property의 값을 할당 및 반환할 때 사용 
    • Field : Class / Structure에서 직접 선언되는 모든 형식의 변수. 값 할당, 조회만 가능
    • Property : 값을 함수로 처리할 수 있음. 변수의 값을 변경하거나 가져올 때 조건을 걸어 변수의 접근을 제한할 수 있음

 

  • Get, Set은 반드시 같이 쓸 필요는 없음
  • 해당 변수의 값이 개발자가 원하는 범위나 조건에 들 때만 값이 할당되거나 반환되게 함
    • 이를 통해 해당 변수가 항상 올바르도록 강제성을 띄울 수 있음

 

  • 예제
public class Custom
{
    private string _job = "";			// Field
    public string _hobby = "";			// Field

    public int seq_no { get; set; }		// Property
    public string name { get; set; }	// Property

    public string job {					// Property
        get {	// 값 반환 시 사용
            if (string.IsNullOrEmpty(_job))
            {
                _job = "JOBLESS";
            }

            return _job;
        }
        set {	// 값 할당 시 사용
            if (value == "PROGAMMER")
            {
                _job = "ENGINEER";
            }
            else
            {
                _job = "ETC JOB";
            }
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        Custom cs = new Custom();

        // job 속성의 set으로 처리됨
        cs.job = "PROGAMMER";

        // job 속성의 get으로 처리됨
        string job_value = cs.job;
    }
}

 

  • Custom Method의 Field _job은 private로 외부에서 직접 접근 불가
    • job Property를 통해 _job의 값 설정
  • Main 문에서 job의 값을 "PROGRAMMER" 로 할당하나, job property의 set 조건에 의해 실제로는 "ENGINEER"를 _job 할당
  • job의 값을 불러올 때는 위에서 할당한 "ENGINNER"를 반환

 

  • C++의 경우 아래처럼 변수 별로 입/출력 함수를 따로 만들어줬어야 함
#include <iostream>
using namespace std;


class MyClass
{
private:
    int num;
public:
    //변수 별로, 입출력 함수를 따로만들었음
    void SetNum(int n) { num = n; }
    int GetNum() { return num; }
};
void Main()
{
    MyClass a;
    a.SetNum(10);
    cout << a.GetNum() << endl;
}
  • C#의 경우 아래처럼 Get, Set Property를 사용해 간편화가 가능하다
class MyClass
{
        private int num;
        public int Number
        {
            set { num = value; }
            //여기서 value는 C#에서 미리 예약된 변수로
            //멤버 변수에 대입하는 값을 의미한다
            get { return num; }
        }
        //c++과는 다르게 굳이, 함수를 따로따로 작성해 주지 않고 이런식으로 만듬
  }

 

 

 

 


참고 자료 : 

https://error999.tistory.com/11

 

C# - Get Set의 사용법, 의미

클래스를 인스턴스화 하여 내부의 필드(클래스 또는 구조체에서 직접 선언되는 모든 형식의 변수)와 속성을 할당, 조회할 수 있습니다. 필드와 속성은 접근한정자를 public으로 했을 때는 클래스

error999.tistory.com

 

https://barnabas-kim8618.tistory.com/177

 

C# WinForms get,set 사용법 04/05

캡슐화에 대한 먼저 기본적인 이해가 필요하다! 캡슐화는 정보 은닉을 위해 클래스에서 선언된 변수가 외부에서 접근이 안되도록 public이 아닌 private로 선언하여 외부에서 접근을 불가능하게 합

barnabas-kim8618.tistory.com

 

https://blog.naver.com/kimsung4752/221013543888

 

[C#] Get,Set 기본 개념 및 활용 예제

C#의 프로퍼티  "C#  이가지는 편리한 도구""멤버변수의 은닉성을 지켜주며, 접근성과 이...

blog.naver.com

 

728x90
반응형

'Study_C#' 카테고리의 다른 글

[C#] Various Keywords, Methods  (0) 2024.07.30
[C#] Invoke, InvokeRequired, Delegate  (0) 2024.07.30
[C#] Using의 2가지 사용법  (0) 2024.07.30
[C#] 비동기 관련  (0) 2024.07.06
[C#] 자료형 정리  (0) 2024.07.06