안녕하세요 판타지코딩입니다.
프로그래밍을 하다 보면 변수를 생성하고 배열을 선언할 때 길이를 미리 지정해줍니다. 그런데 저장할 문자나 숫자의 크기가 정해져있지 않다면, 최대한 큰 숫자로 배열의 길이를 지정해줍니다. 그렇게 되면 사용하지 않는 메모리의 낭비가 심해지기 때문에 '동적 할당'을 활용하게 됩니다.
1. 동적 할당 이란 무엇일까?
동적 할당이란 필요에 따라서 메모리를 직접 할당해주는 것을 의미합니다. 단어 자체만으로는 이해가 어려울 수 있기 때문에 위에서 미리 메모리에 대한 이야기를 했습니다. 사용할 수 있는 메모리는 한정적이기 때문에 필요할 때 마다 메모리를 할당해주는 방법을 활용해 불필요한 메모리를 계속 점유하지 않도록 하는 것입니다. 간단한 예를 들자면, 과제를 수행하기 위해서 학교 강의실의 컴퓨터를 빌려야 하는데 지금은 5명의 학생이 컴퓨터를 필요로 한다고 가정해보겠습니다. 이 때 필요한 컴퓨터의 수는 5대입니다. 그런데 5명의 학생이 더 와서 총 10대의 컴퓨터가 필요해질 때가 있습니다. 처음부터 10대의 컴퓨터를 빌려 놓으면 좋겠지만, 미리 많은 양의 컴퓨터를 점유하면 5명의 학생만 있을 때는 불필요한 컴퓨터를 차지하고 있게 됩니다. 그러므로 동적 할당 또한 필요할 때 마다 적절한 메모리를 점유하기 위해서 활용하는 방식이라고 생각하시면 됩니다.
2. 동적 할당 하는 방법 : new & delete
C++에서 동적 할당을 하는 방법은 new와 delete를 활용하는 것입니다. 단어의 의미를 생각해보면 쉽게 이해가 되실 것 같습니다. new는 새롭다는 의미이므로 새로운 메모리를 생성한다고 이해하면 되고, delete은 메모리를 삭제시킨다는 의미로 반환한다고 이해하시면 됩니다.
2-1. 동적 할당하기 new
new는 heap영역에서 메모리를 할당 받습니다. 메모리를 할당하는 방법은 아래와 같습니다.
- int *num = new int;
- *num = 100;
int형으로 heap 영역에 메모리를 할당했습니다. 할당한 메모리에 포인터를 활용해서 100을 저장하고 포인터를 활용해서 불러올 수 있습니다.
2-2. 메모리 반환하기 delete
delete은 메모리를 heap 영역에 반환합니다. 아래와 같이 반환할 수 있습니다.
- delete num;
heap 영역에 메모리를 반환했습니다.
처음부터 큰 메모리를 점유하지 않고 필요할 때 메모리를 동적으로 할당하기 위해서 '동적 할당'을 사용합니다. 그리고 C++에서 동적 할당을 위해서 활용하는 연산자가 바로 'new'와 'delete'입니다. new는 메모리를 heap 영역에서 할당하고, delete은 heap에 메모리를 반환합니다. 메모리를 할당했다면, 사용하지 않을 때는 반환시켜주어야 합니다. 이런 내용을 이해하였다면 C++로 코드를 작성하면서 동적 할당을 충분히 활용하실 수 있을 것입니다. 감사합니다!
'C언어' 카테고리의 다른 글
C++ 클래스가 무엇일까? / 클래스를 생성하는 방법 / C++ 기초 (0) | 2022.12.27 |
---|---|
런타임 에러가 무엇일까? 런타임 에러가 발생하는 이유 (1) | 2022.12.26 |
C++ cin 함수 / 입력 함수 / C++ 공부하기 (0) | 2022.12.22 |
C언어 int / float / 소수 표현하기 / C언어 기초 (1) | 2022.12.21 |
C++ cout / 출력함수 / printf / C++ 기초 (1) | 2022.12.20 |