• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

프로퍼티 관련 은닉성 질문입니다.

21.08.03 20:21 작성 조회수 301

0

말씀하신대로 get set을 프로퍼티로 만들고 지향하는 바에 따라 private를 임의로 붙이는 것으로 접근을 제한할 수 있다는 사실을 이해했습니다.

다만 여기서 추가로 궁금한 케이스는 class의 경우 기본 동작이 ref 형식으로 이루어진다 들었는데 get으로 가져온 변수가 타 함수에서 동작 도중 값이 변경될 경우(예를 들어 ++ -- 같은 증감연산자 등) 원본에 영향이 가는지를 알고 싶습니다.

추가로 그러한 점을 고려해서 const 를 붙이려 했는데 

public int Hp {const  get; private set; }

public const int GetAttack() { return _iAttack;}

두 가지 모두 에러가 나더군요. const 관련하여 어떻게 사용해야 될 지도 문의하고 싶습니다.

//

자동 완성 프로퍼티로 만들 시 변수의 기본 접근지시제어자는 private인가요?

//

늘 빠르고 친절한 답변 감사합니다.

답변 2

·

답변을 작성해보세요.

2

다만 여기서 추가로 궁금한 케이스는 class의 경우 기본 동작이 ref 형식으로 이루어진다 들었는데 get으로 가져온 변수가 타 함수에서 동작 도중 값이 변경될 경우(예를 들어 ++ -- 같은 증감연산자 등) 원본에 영향이 가는지를 알고 싶습니다.


class 객체가 기본적으로 참조값으로 동작하는건 맞지만
get { return Hp; } 를 할 때 Hp까지 참조값으로 동작하는건 아닙니다.
Hp는 어디까지나 int (value)임으로 그냥 복사 되기 때문에,
get을 한 다음에 그것을 수정하면 원본값은 수정되지 않습니다.
반면 set을 이용하면 수정됩니다.
이 부분은 질문을 하시기 보단, 직접 테스트틀 해보면서 학습하는게 오래 남습니다.

-> 자동 완성 프로퍼티로 만들 시 변수의 기본 접근지시제어자는 private인가요?
정확히 말하면 private이 아니라 internal입니다.


여담이지만 _iAttack과 같은 컨벤션으로 변수 이름을 짓는걸 보니
학원이나 게임 학과, 혹은 이미 코딩 경험이 있으신 것으로 판단되는데,
만약 그렇다면 구글링 연습을 한다 생각하고
질문주신 부분은 반드시 구글에서 찾는 연습을 해보시기 바랍니다.

https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/const

0

강동훈님의 프로필

강동훈

질문자

2021.08.04

답변 감사합니다.

스스로 찾으려는 노력이 부족했던 것 같습니다. 지적해주신 부분 감사합니다.^^

ㅎㅎㅎㅎ 딱히 지적은 아닙니다.
이번 [프로그래머 취업 특강]을 만든겸
수강생 분들을 더 강하게(?) 키워야(?) 한다는 깨우침을 얻어서
구글링으로 나올만한 것들은 따로 알려드려고 합니다 ^^