Programming/C#

C# 프로퍼티(Property)란? (사용하는 이유 / Java get set)

JeongKyun 2021. 11. 5.
반응형

서론

C#의 프로퍼티에 대해 알아볼 것이다.

java에서의 getter, setter 라고 보면된다.

 

우선 글을 작성하기 앞서 이 주제에 대한 글을 작성한 이유는 멤버변수 선언을 해놓는것과 프로퍼티(get,set)로 속성을 부여해주는 차이가 무엇일까? 라는 생각으로 내용을 정리하게됐다. 이제 이 차이에 대해 알아보겠다.

 

우리는 java와 c#과 같은 객체 지향언어를 사용할 때면 정보 은닉화에 대해서 항상 염두 해야한다. 만약 염두하지 않는다면 외부 클래스를 상속 받고 객체를 참조하는 부분에 있어 문제가 생길 경우가 빈번하다. 그래서 접근제한자에서의 private를 사용할 경우 getter와 setter의 메소드를 구현 해야 한다.

 

===get, set 접근자===

get : 읽기 전용

set : 쓰기 전용

==================

 

"프로퍼티"는 선언한 변수의 값을 외부에서 접근할 수 있도록 하면서 동시에 캡슐화를 지원하는 언어의 한 요소이다.

이것을 사용하는 방식은 다음과 같다.

 


 

예제

예제 1-1)

// 기본 Property의 get set 구조

class PropertyTest{

    private int score;  //field
    public int Scoore  // property
    {
    	get { return score; }  //get method
        set 
        { 
        	if( 0 < value && value <= 100)
            {
           		this.score = value; 
            }
        	
        }  //set method
    }
}

위와 같이 프로퍼티를 만들어줄 때 get과 set을 사용하여 속성을 만들어 줄 수 있다.

 

근데 큰 프로젝트에서 많은 변수를 선언하는 과정중 모든 변수를 위와 같이 처리한다면 정말 많은 메소드가 생성된다.

 

이를 방지하기위해 C#에서는 자동구현 프로퍼티라는 것이 있다. 이제 이 프로퍼티에 대해 알아보자.

 

자동 구현 프로퍼티는 프로퍼티를 좀 더 사용하기 쉽고 코드를 간결하게 해주는 메커니즘이라고 보면된다.

 

아래의 예제를 참고해보자.

 

 

예제 2-1)

// 자동 구현 프로퍼티

class PropertyTest{

    private int score { get; set; }  //자동 구현 프로퍼티
        
    private int Tscore { get; set; } = 20;  // 프로퍼티의 기본값 설정도 가능하다.
}

위의 소스를 보면 많이 간결해진 것을 확인할 수 있다. 자동 구현 프로퍼티를 사용해주면 필드를 작성하지 않아도 되며, get set 접근자에 return을 굳이 안써줘도 되기 때문이다.

 

그리고 Tscore를 보면 일반 변수의 초기 값을 설정하는 것처럼 프로퍼티도 선언과 동시에 기본 값을 선언할 수 있다.

 

이제 프로퍼티의 구조와 사용방법을 알아봤으니 사용 이유에 대해 한번 알아보자.

 


 

Property 사용 이유

우선 앞서 말했듯이 객체지향언어는 정보은닉을 지향하는 언어이다.

 

정보은닉이란 객체 내부의 데이터를 외부에 보이지 않게 하지 않음으로써 해당 클래스의 내부 구현 로직을 모르고도 어떠한 메소드를 호출하여 사용할 수 있게 한다는 것이다. 

 

예를 들어 보통 점수는 0~100점의 값을 갖는 int형 변수이다. 그렇기에 해당 score라는 변수의 값에 101을 넣으면 오류이다.

 

이러한 상황에서 get set을 사용하여 우리는 예제1의 내용처럼 해당 변수에 set에 조건을 달아줘서 0~100점의 값만 가질수 있게끔 설정할 수 있다.

 

이것이 바로 get set의 사용 이유이다.

 

또 하나 설명 해보자면 예를들어 외부에서 건드리면 안되는 값이라면 set을 없애고 get의 속성만 부여해주면 된다.

 

이 글의 첫 목표인 get set의 사용 이유에 대해 알아보았다.

 

이제 마지막으로 궁극적인 목표인 일반적인 변수선언과 프로퍼티 선언의 차이에 대해 정리해보겠다. 예제로 한번 보자.

 

예제 3-1)

Class Man{
	public int age;
}

Class Woman{
	public int age { get; set;}
}

// 이 두가지의 차이를 알고가자!!

위의 두 클래스의 차이는 일반 선언과 프로퍼티 선언의 차이이다. 만약 프로퍼티에서 get과 set을 둘 다 사용하고 set에 조건을 달지 않는다는 전제하에 두 방법은 어떤 차이가 있을까?

 

난 이 차이에 대해 정말 많은 글을 알아봤다.

 

그 결과 예제3에서 Man에서 age의 값을 부여하는 것과 Woman에서 age의 값을 부여하는 것을 100만번 반복하여 돌려봤을때 단순 필드에 값을 부여한 Man은 2.229ms의 시간이 나왔고, Woman은 4.161ms라는 값이 나왔다고 한다.

 

이 차이는 80%정도의 수치상으로는 큰 결과이다.

 

그렇지만 이렇게 많은 작업을 돌리고 난 뒤 2ms의 차이라고 하면 

사실 그렇게 성능적으로 큰 차이가 있지는 않다.

 


 

결론

get set 메소드를 통한 프로퍼티는 특별한 속성을 안넣어도 된다면 일반 전역 필드로 선언하여 사용하는 것이 성능 상 더 유리하다고 판단할 수 있다.

 

그렇다고 많이 차이는것도 아닌 정말 많은 작업을 돌릴 경우에 미세한 차이가 있다는 것이다.

 

java get set 쓰는 이유 / C# property란? / c# 접근제한자 / c# get set / c# property / property와 get set 차이

댓글

💲 많이 본 글