본문 바로가기
C언어

C언어 동적 할당 / new와 delete / C++ 기초

by 여름코딩 2022. 12. 25.
반응형

안녕하세요 판타지코딩입니다.

 

프로그래밍을 하다 보면 변수를 생성하고 배열을 선언할 때 길이를 미리 지정해줍니다. 그런데 저장할 문자나 숫자의 크기가 정해져있지 않다면, 최대한 큰 숫자로 배열의 길이를 지정해줍니다. 그렇게 되면 사용하지 않는 메모리의 낭비가 심해지기 때문에 '동적 할당'을 활용하게 됩니다.

 

new&delete 동적할당


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++로 코드를 작성하면서 동적 할당을 충분히 활용하실 수 있을 것입니다. 감사합니다!

반응형