해결된 질문
작성
·
129
1
8분 12초와 10분 55초에서
*pt와 arr[0] 둘 다 식별자는 아니지만 표현식을 통해서 메모리 공간에 접근하는 것인데
*pt는 오브젝트를 가리킨다고 표현하고
arr[0]은 오브젝트라고 표현하는게 이해가 잘 안되요
그러니까 arr[0]이 표현식이라는건 납득이 되는데 오브젝트라는건 납득이 안되요
변수 이름으로 메모리 공간에 접근하는 걸로 변수 이름을 오브젝트라고 하지 않는 것 처럼
표현식으로 메모리 공간에 접근하는 걸로 표현식을 오브젝트라고 표현하면 안되는 것 아닌가요?
실제로 *pt는 표현식이지만 메모리 공간에 접근한다고 해서 오브젝트라고 부르지 않잖아요
항상 좋은 답변 정말 감사합니다.
답변 1
2
안녕하세요, 질문&답변 도우미 Soobak 입니다.
두 가지 부분에서 혼동이 있으신 것 같습니다.
포인터의 참조 표현식과 배열에서의 원소 접근 표현식 에서의 용어 차이
변수의 이름(식별자)과 오브젝트가 구분되는 정확한 이유
*pt
와 arr[0]
모두 메모리 공간에 접근하여 그 위치에 저장된 '값'을 참조합니다.
다만, 포인터 자료형인 pt
의 경우 *pt
표현식을 통해서 '오브젝트' 를 가리킨다고 표현합니다.
즉, 포인터의 역참조를 통해 간접적으로 메모리 위치를 참조하게 되며,
이러한 맥락과 과정에 대해서 "*pt
designates an object." 로 , 'designate'
라는 용어를 사용하여 표현하게 됩니다. (용어의 사용에 대해서는 해당 강의 8:40 부분 교수님 설명처럼, 이러한 용어가 사용되는 구나 정도로 이해하고 추후에 복습해보시는 것을 추천드립니다.)
반면, arr[0]
표현식은 배열내의 구체적인 메모리 위치를 직접적으로 참조합니다.
따라서, 'desginate' 라는 용어의 사용 없이 'object' 라고 표현할 수 있게 됩니다.
질문 주신 내용 중,
변수 이름으로 메모리 공간에 접근하는 걸로 변수 이름을 오브젝트라고 하지 않는 것 처럼
표현식으로 메모리 공간에 접근하는 걸로 표현식을 오브젝트라고 표현하면 안되는 것 아닌가요?
: 변수 이름과 오브젝트가 구분되는 이유는 '변수 이름' 은 메모리 상의 특정 위치에 대한 '식별자'이고,
해당 위치의 값인 '오브젝트' 가 아니기 때문입니다.
만약, 표현식이 평가된 후 메모리에 저장된 데이터를 가리키는 경우, 그 데이터(표현식이 참조하는 메모리 위치에 저장된 값)는 오브젝트가 됩니다.
다만, 표현식 자체를 오브젝트라고 부르는 것이 아니라, 표현식이 가리키는 메모리 상의 데이터가 오브젝트입니다.
arr[0]
를 Object 라고 표현하는 부분에서, Object 가 되는 대상은 arr[0]
이라는 표현식이 아니라, arr[0]
이라는 표현식의 결과, 즉, 메모리 상의 구체적인 값입니다.
즉, 이해하신 것처럼 식별자나 표현식이 아니라, '주소를 가지고 있는 메모리 상의 데이터' 가 오브젝트 입니다.
이 때, 용어의 사용에 있어서 간접적으로 메모리 주소를 참조하여 값을 표현하는 *pt
와, 직접적으로 메모리 주소를 참조하여 값을 표현하는 arr[0]
의 차이점을 혼동하고 계신 것 같아, *pt designates an object. 라는 주석 내용과 arr[0] is an object 주석 내용을 구분 지어서 표현식이 오브젝트를 표현하는 과정에 대한 언어 사용을 설명 드린 것입니다.
예를 들어, 주석 // arr[0] is an object 에서,
object 의 대상은 arr[0] 이라는 표현식이 아니라, arr[0] 표현식의 결과, 즉, arr[0] 이 직접적으로 참조하고 있는 메모리 주소의 데이터 입니다.
반면,
arr[0]
표현식은 배열내의 구체적인 메모리 위치를 직접적으로 참조합니다.따라서, 'desginate' 라는 용어의 사용 없이 'object' 라고 표현할 수 있게 됩니다.
여기서 arr[0]이라는 표현식은 object라고 표현할 수 있다고 하셨는데
다만, 표현식 자체를 오브젝트라고 부르는 것이 아니라, 표현식이 가리키는 메모리 상의 데이터가 오브젝트입니다.
여기서는 표현식이 가리키는 메모리 상의 데이터가 오브젝트라고 하시는 게 개념이 충돌되서 잘 이해가 안되네요
그러니까 arr[0]은 표현식이지만 오브젝트라고 표현할 수 있다고 하는 것과
표현식이 메모리에 저장된 데이터를 가리키는 경우 표현식 자체를 오브젝트라 부르는 게 아니라
표현식이 가리키는 메모리 상의 데이터가 오브젝트라고 하는게 혼동이 돼요
답변 정말 감사합니다.