개발일지 (Property)

Gamediver·2023년 1월 30일
0

개발일지

목록 보기
6/6

오늘의 양식은 Property 이다

얌얌

Property 가 무엇인지 살펴보기에 앞서, Getter와 Setter라는 놈을 먼저 알아야 한다

Getter Setter...?

뭔가 가져오는 놈, 설정하는 놈 이라고 직역할 수 있을까?

Getter = 읽기 전용 메소드
Setter = 쓰기 전용 메소드

라고 생각하면 된다.

정의만 보면 뭔소린지 모를것이다 고로...예시를 살펴보자!

가령 아래와 같은 코드가 있다고 해보자

현재 캐릭터 클라스의 hp와 mp는 각각 10과 5로 초기화가 되어있고, private 접근한정자로 설정해두었다

private으로 설정해두었기 때문에, 아래와 같이 Main()함수내에서 접근할 수가 없다

애초에 다른 클래스에서 접근할 수 없게 하기 위해 private 으로 설정해두었기 때문에, 접근할수가 없는것이긴 한데....

근데도 그냥 뭔가 저 hp라는 놈을 가져오거나 수정해주고 싶다

그럴 때 쓸수 있는게 바로 Getter와 Setter 함수이다

쓸수 있는 방법은 간단하다

바로 캐릭터 클라스 내에서 Getter와 Setter 함수를 아래와 같이 정의해주면 된다

그리고 이 함수들을 Main에서 사용하게 되면?

짜잔!

Getter와 Setter 함수를 이용해, private 으로 설정된 필드의 값을 가져오고, 수정할수도 있다!

자 그러면 이제 Property에 대해 이야기 해보겠다

가령 필드(클래스내에서 선언된 변수를 말함)가 한두개가 아니라 엄청 많다면...?

그럼 저 필드 하나에 getter와 setter함수를 2개씩 만들어줘야하니까...
위 이미지에서 필드는 10개였고... 그러면 getter setter 둘다 포함해서 총 20개의 함수를 만들어줘야한다...

귀찮다!!!

우리의 귀차니즘을 해결해주기 위해 c#에서 지원하는 기능이 바로 property다

Property는 Getter와 Setter를 동시에 쓸 수 있는 아름다운 기능이다!

아래의 예시를 보자

getter와 setter를 20개를 만들어주는 것 대신 10개의 프로퍼티로 작성하였다!(작업이 절반이 준 것이다!)
뭔가 변수처럼 생겼지만 사실은 메소드이다!

자 그럼 여기서 "뭐야 만들어주긴 했는데 값이 없잖아요..?" 라고 할 수 있는데
어차피 우리는 Main()에서 Getter로 값을 가져오고 Setter로 값을 넣어주었다

프로퍼티 사실 자세히 뜯어보면 아래와 같다

위의 코드와 public int hp{get; set;} 은 같은 놈이다(다만 우리눈에 안보이게끔 편하게 생략된 것일 뿐!)

자 이제 Property로 Main()에서 값을 가져오고 넣어보자


짜란!
값을 가져오고 넣어줬다! 프로퍼티를 사용해서 말이다!

그러면 여기서 조금 더 생각을 꼬아보자

만약

Property를 쓰긴 쓰는데
읽기만 할 수 있는 get; 말고
값을 넣어주는 기능인 set기능을 쓰고싶으면 어떡해요?

라고 할 수 있는데

그때는 프로퍼티 내에서 접근한정자를 사용해주면 된다
어떻게?

이렇게!

get 앞에 private을 다 붙여줬다
그리고 Main에서 Console.WriteLine()을 이용해 출력하려 했더니

get에 접근할 수 없으므로 읽어올수가 없다고 컴파일 에러가 뜬다!

그럼 반대로?

set에 private을 주고, get은 냅두면?

Main() 함수로 돌아가보자!

돌아갔더니 아래와 같이 나온다

업로드중..

읽는건 문제가 안되는데, 값을 수정하려 하니 보호수준때문에 컴파일에러가 난다!

이런식으로 프로퍼티를 사용하되 어느 한쪽의 기능을 못쓰게 하고싶다면 접근한정자로 괴롭히면 되겠다!!

정리하자면
Getter는 private으로 설정된 필드를 읽는 함수이고
Setter는 prviate으로 설정된 필드의 값을 수정하는 함수이고
Property는 getter와 setter를 둘다 쓸수도 있고, 한쪽만 쓸수 있는 함수라 보면 되겠다

끝!

profile
a random gameboy just walking past

0개의 댓글