📘 메모리의 정의

  • 메모리는 RAM으로써 순서에 상관없이 임의로 데이터들에 접근하는 장치를 의미합니다.

  • 컴퓨터가 작업을 처리할 경우 CPU는 계산을 담당하고 HDD와 같은 보조기억장치는 정보를 담당합니다. 그런데 보조기억장치에서 바로 계산하기에는 CPU에 비해 보조기억장치가 상대적으로 너무 느리기 때문에 보다 빠른 RAM을 활용하여 정보를 처리합니다.



📘 메모리는 어디서 접하게 될까?

  • 언어는 Managed 언어와 Unmanaged 언어로 나눌 수 있습니다. C언어와 같이 개발자가 메모리를 직접 관리하는 언어를 Managed 언어, 자바와 같이 가비지 컬렉터가 메모리를 관리하는 언어를 Unmanaged 언어라고 합니다.

  • 메모리 관리에 따라 프로그램들이 느려지거나 무한 대기 상태에 빠지는 경우가 종종 있습니다. 그리고 변수의 종류에 따라 다른 메모리 영역에 적재됩니다. 그래서 메모리를 알고 프로그래밍을 메모리 관리를 효과적으로 할 수 있습니다.



📘 메모리 영역 알아보기

  • 일단 코드 혹은 프로그램이 실행되면 가장 먼저 작성한 코드는 컴퓨터가 이해할 수 있는 언어로 변환되어야 합니다. 이 과정을 컴파일이라고 하며, 이 과정에서부터 네 가지 메모리 영역에 변수들이 종류별로 다르게 적재됩니다.

📌 메모리 - 코드 영역

  • 프로그램이 컴파일되면 모든 코드는 코드 영역으로 적재됩니다. 그리고 코드 영역의 코드들을 CPU가 하나씩 가져가서 처리합니다. 코드 영역의 자원들은 프로그램이 모두 종료될 때 까지 해제됩니다.

📌 메모리 - 데이터 영역

  • 전역 변수와 정적 변수가 저장되는 공간입니다. 두 변수의 공통점은 프로그램이 끝나기 전까지 해제되지 않는다는 것입니다. 해제되지 않고 프로그램이 종료되기 전까지 남아 잇어야 하는 변수는 데이터 영역에 할당됩니다.

📌 메모리 - 힙 영역

  • 동적 할당 영역으로 프로그램이 실행되는 도중에 일시적으로 필요할 경우 메모리를 할당하고 사용 후 반납하는 영역입니다.

  • 힙 영역은 메모리의 주소값을 할당하고 사용 후 반납하는 영역입니다. 힙 영역은 메모리의 주소값을 할당하며 이후 필요가 없어질 경우 해제합니다. 힙 영역을 해제할 경우에는 더 이상 메모리를 사용하지 않을 경우 해제해야 메모리를 효율적으로 사용할 수 있습니다. 힙 영역은 스택에 실제 데이터가 저장되는 위치에 대한 주소값만을 저장한 후 필요할 경우 주소값을 활용해 접근하여 사용합니다.

  • 사실 힙 영역은 스택에 비해 데이터 처리가 느립니다. 그럼에도 힙 영역을 사용하는 이유는 이러합니다.

LIFE Cycle : 스택 메모리에서는 저장한 값이 스택과 함께 사라집니다. 따라서 프로그램이 실행되는 동안 값을 저장하기 부적합하기에 힙 영역이 사용됩니다.

Large Size : 커다란 객체를 스택에 무작정 할당할 경우 한정된 스택 메모리에 다른 값을 쌓는 게 어려울 수 있기 때문에 스택에 주소만 주고 힙 메모리에 할당하여 메모리를 효율적으로 관리합니다.

Dynamic Memory : 처음부터 객체의 개수를 정하지 않고 필요할 경우마다 객체 생성을 결정할 수 있기 때문에 힙 메모리를 사용합니다.


📌 메모리 - 스택 영역

  • 정적 할당 영역으로 지역변수와 매개변수가 저장되는 공간입니다. 메인 메소드를 포함한 모든 메소드가 적재되는 공간으로 메소드의 순서에 따라 할당되고 해체됩니다. 스택 방식은 후위선출 방식인 LIFO 방식으로 나중에 들어온 코드가 실행 후 먼저 해제되는 방식을 사용합니다. 모든 메소드의 실행이 끝나면 끝난 순서대로 해제됩니다.


📘 메모리를 알아야 하는 이유

  • 메모리는 한정된 자원입니다. 변수에 따라 다른 메모리 영역을 사용하는 이유도 계속 사용할 변수와 잠깐 사용하고 해제할 변수를 메모리에 다르게 적재하여 원하는 시점에 변수를 할당 및 해제하기 위함입니다. 메모리를 알고 효율적으로 사용하는 것은 개발에 있어 매우 중요합니다.
profile
나 혼자 보려고 만든 개발 일기

0개의 댓글