저번에는 간단하게 포인터의 개념만 정리를 해보았는데
이번에는 포인터를 사용하는 방법과 프로그래밍에서 왜 데이터의 주소를 알아야 하는지에 대해 정리해보려고 한다.
1. 포인터의 사용법
void 함수( )
{
int num = 5;
int* ptr = #
}
자,
위의 코드블럭을 살펴보면
num 이라는 변수에 5 라는 값이 선언되었다. 그렇다면 컴퓨터의 메모리에는 뭐라고 적어놨을까?
구제적인 예를 든다면,,
"0012FFCC" 라는 메모리주소에 "00 00 00 05" 라는 정보가 기록될 것이다.
그럼 위의 코드에서 포인터 ptr은 어떤값을 가지고 있을까?
이전 포스팅에서 정리한대로 포인터는 메모리 주소를 저장하는 변수이다.
따라서 변수 ptr은 0012FFCC 라는 주소를 가지고 있을 것이다.
1-2. 동적할당
포인터를 사용하면 늘 붙어다니는 키워드 동적할당이다.
동적할당은 프로세스 메모리 구조에서 설명한 Heap이라는 메모리 구역에 원하는만큼 메모리를 가져다 쓰고 반환하는 행위를 말한다.
동적할당의 이유는 뒤에서 마저 설명하고 사용법에 대해 간략하게 보자.
쉽다.
얼마나 메모리 가져다 쓸지만 말하면 된다.
- [타입] [변수] = new [타입] ; 이를 테면, int num = new int;
위에서 [타입]이 메모리 크기를 말하는 것이다.
Heap은 알겠지만 공공재이다. 썻으면 도로 돌려줘야한다. 돌려주는 키워는 delete 이다.
- delete [변수]; delete num;
2. 포인터의 사용이유
사실, 이번 포스팅은 포인터의 사용이유에 대해서 쓰고 싶었다.
뭐.. 사용법이야 여기보다 정리가 잘된 블로그가 많으니 거기서 참고하길 바란다.
왜 우리는 동적할당인지 뭔지를 하면서 메모리를 가져다쓰고 메모리를 참조하고 이런 행위들을 할까?
개발을 하다보면 사실 뭔가 대단한 스킬이나 용어들이 많지만 간단하게 보면
어디에 뭐가 있다. 로 끝나는 것 같다. 여기서 말하는 '뭐' 는 데이터, 정보일 것이다.
그 어디에 있는 데이터를 어디로 옮기고 다시 어디로 보내며.. 데이터의 위치를 옮겨주는 행위가 개발이 아닌가 싶기도 하다.
이런 관점에 포인터는 '어디' 를 가리키는 개념인 것이다. 어디에 있는데??
그렇다면, 위에서 설명한 Heap공간을 사용하는 동적할당은 왜 필요할까?
Heap라는 공간을 제외하면 우리는 Stack이라는 메모리 공간에서 데이터들을 생성하고 만든다 그리고 사라진다.
Stack의 특성상 메모리 공간이 휘발성에 가깝다. 자세한 개념은 추후에 다루기로 하자.
개발을 하다보면 데이터의 생명주기를 필요에 따라 늘리기도하고 줄이기도 해야하는 상황들이 온다. (dynamic)
이러한 개발의 니즈를 충족시키위해 Heap이라는 공간이 있다고 생각한다.
따라서 Heap이라는 메모리 공간에 데이터를 써넣고 가지고 놀기 위해선 위에서 언급한 "데이터가 어디에 있는지" 가 필요하고
포인터가 필요하다고 생각한다.
다음에는 위에서 말한것처럼 메모리 공간, 특히 Heap공간은 공공재와 같다.
다 썼으면 도로 갖다놓아야한다.
인간사회도 그렇듯, 항상 공공재는 문제가 생긴다. 개개인의 책임들이 분산이 되기 때문.. (공중화장실이 대표적인 예)
프로그래밍에서는 공공재의 관리문제가 매우 엄격하며 프로그램이 죽는 이슈까지 생긴다.
C++ 에서는 어떻게 이런 자원 관리를 하며 좀 더 스마트하게 관리할 수 있을지 정리해보겠다.
오늘 수업은 끝!
그럼 다음 시간에 또 봐요! >.< .... ㅜㅜ

'CS > C++' 카테고리의 다른 글
메모리 관리(3) - 똑똑하게 포인터 사용하자 (0) | 2023.02.27 |
---|---|
메모리 관리(1) - 포인터(pointer) (0) | 2023.02.13 |