250x250
Notice
Recent Posts
Recent Comments
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

minjea.dev의 코딩블로그

[c#] get과 set 본문

코딩강좌/c#

[c#] get과 set

minjea.dev 2022. 4. 19. 12:00
728x90

필드에 직접적으로 접근하는것은 허용하고 싶지 않고, 그렇다고, 필드를 가져오는 메서드를 따로 정의하자니 그건 조금 그렇고, 어떻게 해야 할지 모르실때 사용하면 좋으신 기능인 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;}
    }
}

결과를 보면 잘 작동하는것을 볼수 있습니다.

 

오늘은 이렇게 프로퍼티에 대하여 알아보았습니다.

728x90