인프런 커뮤니티 질문&답변

YuCheol Chae님의 프로필 이미지

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문

은닉성

접근 한정자 질문

작성

·

214

0

class Knight

    {

        protected(or private) int hp;

        hp = 100; //에러

    }

일때  자신 클래스 내부 에서는 필드값 조작이 안되나요?

 class SuperKnight : Knight

    {

       hp =10; //에러 

      void test()

        {

            hp = 10;

        }

    }

상속을 받았을때도 함수를 만들어야만 쓸수 있는건가요?

답변 5

2

Rookiss님의 프로필 이미지
Rookiss
지식공유자

매우 적절한 비유 같네요 ㅎㅎㅎ

그리고 사실 메인함수도 유심히 보면,
클래스 안에 정의된 함수에 불과합니다.
(다만 어떤 프로그램이 시작할 때,
무조건 Main이라는 함수부터 실행해서 시작하기로 약속한 것이죠)

1

YuCheol Chae님의 프로필 이미지
YuCheol Chae
질문자

아하 그렇군요 !! 그럼 제가 강의를 들으면서 이해한 코딩 로직이  클래스 라는 틀안에  재료인 필드(변수)를 넣고 재료를 가지고 요리는 함수 내에서 하고,  다된 음식을 반환 하고  전체 상차림 하는 역할이 메인함수의 역할로 이해 했는데 맞는건가요? ^^  그래서 한정자 상관없이 함수안에서 변수를 조작 해야 하는 거구요^^ 

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

코드가 실행되려면 함수에서 실행되어야 하니
접근 한정자와 관계없이 함수 내부에서
해당 변수를 세팅을 해야 합니다.

선언과 동시에 초기값 세팅을 하는
protected(or private) int hp = 10;
극히 예외적인 문법이라 생각하시면 되고
실제 동작은 생성자에서 실행된다 보시면 됩니다.

그리고 아무것도 지정되어 있지 않으면 private로 동작합니다.
관련하여 한 번 읽어보면 도움이 됩니다.

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers#:~:text=Class%20and%20struct%20members%2C%20including,accessibility%20than%20their%20base%20types.

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

protected(or private) int hp; 는 안되고
protected(or private) int hp = 10; 는 됩니다. (사실상 생성자에서 세팅하는 것과 동일)

상속을 받았다 하더라도 hp=10는 아무데서나 할 순 없고
함수라거나 (사실상 함수와 유사한 개념이지만 나중에 나오는) 프로퍼티 등에서
hp =10로 세팅해서 사용 가능합니다.

0

YuCheol Chae님의 프로필 이미지
YuCheol Chae
질문자

이것저것 테스트 결과 private 는 외부접근이 안되고 해당 내부 클래스 함수(메소드)만 접근 되고, 상속된 하위클래스도 못사용 하는데   진짜 구지 접근하려면 해당 내부클래스 에서 private 로 은닉된 데이터를 조작하는 함수(메소드)를 Public으로 만들어 조작 하는 방법만 있고,  protected는 private보다는 조금완화되어서 상속관계 내자식은 사용 가능하게 만들어 주는건데 이것또한 함수(메소드)로 접근 해야 하는 거가 맞는건가요?  아무것도 접근제어자가 지정 되어있지 않으면 private 이라고 하셨는데 default는  다른건가요?