2023. 10. 10. 20:13ㆍC#
C#에서 프로퍼티를 사용하면서 왜 사용하고 언제 사용해야할지 생각해본 적이 있을 것이다.
이번에 이부분에 대해서 포스팅한다.
객체 지향언어를 사용할 때면 정보 은닉화에 대해서 항상 염두 해야한다. 만약 염두하지 않는다면 외부 클래스를 상속 받고 객체를 참조하는 부분에 있어 문제가 생길 경우가 빈번하다. 그래서 접근제한자에서의 private를 사용할 경우 getter와 setter의 메소드를 구현 해야 한다.
프로퍼티(Property)
프로퍼티는 선언한 변 값을 외부에 접근할 수 있도록 하면 동시에 캡슐화를 지원하 언어의 한 요소이다.
프로퍼티는 다음과 같이 사용할 수 있다.
위와 같이 프로퍼티를 만들때 get과 set을 사용해 속성을 만들어 줄 수 있다.
하지만 큰 프로젝트에서 많은 변수를 선언하는 과정 중에 모든 변수를 이렇게 처리한다면 많은 메소드가 생성된다.
이를 방지하기 위해 C#은 자동구현 프로퍼티라는 것이 있다. 자동구현 프로퍼티는 프로퍼티를 좀 더 사용하기 쉽고 코드를 간결하게 해주는 매커니즘이다.
이처럼 코드가 많이 간결해진 것을 확인할 수 있다. 자동구현 프로퍼티를 사용하면 필드를 작성하지 않아도 되고, get/set 접근자에 return을 굳이 안써줘도 된다.
그리고 Tscore처럼 일반 변수 초기값을 설정하는 것처럼 프로퍼티도 선언과 동시에 기본값을 선언할 수 있다.
그렇다면 왜 이런 프로퍼티를 사용하는 것일까??
프로퍼티 사용 이유
우선 앞서 말했듯이 객체지향언어는 정보은닉을 지향하는 언어이다.
정보은닉이란 객체 내부의 데이터를 외부에 보이지 않게 하지 않음으로써 해당 클래스의 내부 구현 로직을 모르고도 어떠한 메소드를 호출하여 사용할 수 있게 한다는 것이다.
예를 들어 보통 점수는 0~100점의 값을 갖는 int형 변수이다. 그렇기에 해당 score라는 변수의 값에 101을 넣으면 오류이다. 이러한 상황에서 get set을 사용하여 우리는 예제1의 내용처럼 해당 변수에 set에 조건을 달아줘서 0~100점의 값만 가질수 있게끔 설정할 수 있다.
이것이 바로 get set의 사용 이유이다.
또 하나 설명 해보자면 예를들어 외부에서 건드리면 안되는 값이라면 set을 없애고 get의 속성만 부여해주면 된다.
마지막으로 일반 변수와 프로퍼티 차이에 대해 정리해보면
위의 두 클래스의 차이는 일반 선언과 프로퍼티 선언의 차이이다. 만약 프로퍼티에서 get과 set을 둘 다 사용하고 set에 조건을 달지 않는다는 전제하에 두 방법은 어떤 차이가 있을까?
그 결과 예제3에서 Man에서 age의 값을 부여하는 것과 Woman에서 age의 값을 부여하는 것을 100만번 반복하여 돌려봤을때 단순 필드에 값을 부여한 Man은 2.229ms의 시간이 나왔고, Woman은 4.161ms라는 값이 나왔다고 한다.
이 차이는 80%정도의 수치상으로는 큰 결과이다.
그렇지만 이렇게 많은 작업을 돌리고 난 뒤 2ms의 차이라고 하면
사실 그렇게 성능적으로 큰 차이가 있지는 않다.
결론
get set 메소드를 통한 프로퍼티는 특별한 속성을 안넣어도 된다면 일반 전역 필드로 선언하여 사용하는 것이 성능 상 더 유리하다고 판단할 수 있다. 그렇다고 많이 차이는것도 아닌 정말 많은 작업을 돌릴 경우에 미세한 차이가 있다는 것이다.
결국 프로퍼티 내부적으로 변수선언에 조건을 부여가 가능하며 데이터의 읽기 쓰기를 조정해 정보 은닉의 장점을 갖는다는 특징이 있다.
'C#' 카테고리의 다른 글
String vs StringBuilder (0) | 2023.10.13 |
---|---|
C# 작동 방식 .Net Framework, CLR (0) | 2023.10.09 |
C# LINQ(Language-Integrated Query) (0) | 2023.10.08 |
C# 콜백, 델리게이트, 이벤트 (0) | 2023.10.07 |