프로그래밍/C#

[C#] 프로퍼티, 왜 사용하는거지?

gameObject 2023. 6. 18. 21:40
728x90

객체지향언어에서 클래스를 작성할때는 은닉성이 중요하다.

외부에서 클래스 내부의 데이터가 의도하지 않은 방식으로 오염되는것을 막아야 하기 때문이다.

 

이때 보통 클래스 내부의 필드를 private 또는 protected 접근제한자를 이용하여

외부에서 접근하지 못하도록 막고 또다른 함수를 이용하여 해당 필드에 접근해서 값을 받거나 수정하는 방식을 거친다.

 

여기서 보통 Get으로 명명된 함수와 Set으로 명명된 함수를 사용하는데, 

C#에서 프로퍼티는 이 부분을 간추려주고 은닉성과 사용성을 동시에 이루게 해준다.

 

어떤 변화가 이루어지는지 아래 코드를 참고해보자

// Get과 Set으로 명명한 함수를 이용한 클래스 내부의 필드값 조정방식

class Car
{
	private string carName = "벨로스터";
    public string GetCarName()
    {
    	return carName;
    }
    public string SetCarName(string newCarName)
    {
    	carName = newCarName;
    }
}

>>>> 이것을 프로퍼티로 구현하면 다음과 같다.

class Car
{
	public string CarName{get;set;}= "벨로스터";
}

이렇게나 간편해진다.

 

그런데 나는 이런 의문이 들었다.

결국에 자동구현 프로퍼티로 선언을 하면서 set에 조건을 걸지 않는다면

일반 public으로 선언된 필드랑 다를게 뭐가있지? 왜 굳이 조금 더 긴 프로퍼티를 사용하는걸까. 이런 생각이 들었다.

 

열심히 찾아봐도 사실 아직도 속이 시원하지는 않지만 실제로 사용을 하다보면 이해가 되지 않을까 싶다.

일단 이해한 내용의 핵심은 아래와 같다.

 

'코드의 유지보수성'

굳이 public필드를 사용할것을 프로퍼티로 선언을 해준다는 뜻은 추후에 코딩을 하다가 set에 조건을 넣어줘야 할 경우가 생길 수 있는데 그때 빠르게 수정을 할 수 있다는 점 때문에 프로퍼티를 사용하는것 같다.

당연히, 은닉성과 캡슐화 접근제어는 기본이다.

 

위의 내용은 일반 public 필드와 비교했을때의 차이점을 이야기 한것이고

프로퍼티 그 자체를 왜 써야하냐고 물어본다면

'프로퍼티 = 필드에 체크기능 추가'

이렇게 말하고 싶다.

만약 Main함수에서 필드에 0~100까지 숫자만 들어오면 넣고싶다면 if등 조건문을 이용하여야 한다.

그런데 프로퍼티는 set 뒤쪽에 0~100까지 숫자만 받고싶다는 조건을 걸어준다면

해당 프로퍼티를 get하여 사용하는 쪽에서 굳이 if를 사용할 필요가 없게된다.

즉 외부에서 프로퍼티를 통해 값을 입력하면, Class 내부에서 값을 필터링 해 줄 수 있기때문에 누군가 이 코드를 봤을때 더 쉽게 알아볼 수 있다.

 

이렇게 오염을 방지할 수 있고, 또 자동구현 프로퍼티로 순식간에 은닉성을 구현할 수 있으니 안 쓸 이유가 없을 것같다.

728x90