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

김민우님의 프로필 이미지
김민우

작성한 질문수

C개발자를 위한 최소한의 C++

클래스 기본 문법

접근제어와 관련한 질문입니다.

해결된 질문

작성

·

192

0

안녕하세요! 새해 복많이 받으십시오.

 

접근제어와 관련하여 강의내용 복습하며 생각해보다가 궁금한 점이 있어서 질문 남깁니다.

 

C언어 클래스에서 private영역에 대해 접근제어에 대해

  1. 직접 부르는 것만 막는 것인지

  2. 클래스에 대한 포인터를 통해 접근제어까지 막는 것인지

  3. 또는 메모리상의

    주소를 알아내서 포인터로 변수로 직접 접근하는 경우(...)

이 다음 디스포인터영상에서 였나 2번까지는 막고 있는 것을 보여주셨던 것이 기억나는데,

3번은 과연 뚫리지 않을까... 생각이 들어서 그렇습니다.

 

진짜로 묻고 싶은 이유는,

사실은 접근제어 라는 게 C++ 프로그래밍 문법상의 규칙으로 컴파일 타임에서 관리할 뿐,

 

'런타임에서는 (C++에서 정해졌었던 문법이고 뭐고;)이걸 죄다 걸러내고 남은 기계어로만 돌아간다' 라고 이해해도 되는가 입니다.(CS지식이 일천한 상태에서 드리는 뇌피셜이라...^^;)

 

감사합니다.

답변 1

1

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

  1. C++의 접근제어 지시자는 모두 언어의 문법에만 존재합니다. OS나 CPU 같은 하드웨어 수준에서는 존재하지 않습니다. 본인의 뇌피셜이 정확히 맞습니다. 문법은 언어 수준에만 존재할 뿐 결국 기계어 수준까지 내려가면 모두 없는 것과 마찬가지 입니다.

  2. 클래스 인스턴스에 대한 주소를 char*로 강제 형변환 후 접근하면 모든 멤버에 대한 조작이 얼마든지 가능합니다. C++는 C언어의 확장형식이라 할 만합니다. 심지어 참조형에 대한 조작도 가능합니다. 즉, 막지 못합니다.

  3. 2번 질문의 연장선에 있는 것으로 보입니다. 괜히 C/C++ 이라고 표기하는 것이 아닙니다. 😄

Java나 C#에서는 VM을 이용하기 때문에 C/C++ 같은 논리가 성립하지 않습니다. 해서 더 안전합니다. 개발자의 자유도가 낮기 때문에 의도적인 조작이 쉽지 않으니까요. 반대로 개발자의 실수가 큰 오류로 번지는 것을 막아 줍니다. 참고하시기 바랍니다. 😄

김민우님의 프로필 이미지
김민우

작성한 질문수

질문하기