Search

메모리 구조

오늘은 메모리 구조에 대해 비전공자도 이해할 수 있게 정리하고자 합니다! 바로 가보시죠.

메모리 구조의 이해

먼저, 메모리에 대해서 알고 계신가요? 메모리는 사람의 뇌처럼 어떠한 정보를 저장하고 관리하는 곳이죠. 메모리의 구조로 4 종류가 있어요. 코드(Code) - 데이터(Data) - 힙(Heap) - 스택(Stack)으로 구성되어 있죠. 먼저, 코드 영역부터 보겠습니다.

코드 영역

코드 영역은 컴퓨터가 실행할 코드를 저장하는 곳이에요. 이를 쉽게 이해하려면 여러 레시피들을 모아둔 레시피 책과 같아요. 코드는 레시피가 되겠죠. 레시피 책에는 다양한 요리법이 적혀 있듯이 코드 영역에는 프로그램이 실행할 작업들이 명령어로 적혀 있어요.
프로그램이 실행될 때 컴퓨터는 이 코드 영역에 있는 명령어들을 차례로 읽고 실행해요. 여기서 중요한 것은 이 명령어들이 얼마나 효율적으로 작성되었느냐예요. 효율적인 명령어란, 컴퓨터가 더 적은 자원(시간, 메모리 등)을 사용하여 더 빠르고 정확하게 작업을 할 수 있는 코드를 말해요.
이 과정에서 컴파일러의 역할도 중요하죠. 컴파일러는 프로그래머가 작성한 코드를 컴퓨터가 이해할 수 있는 기계어 코드로 변환해요. 이 과정에서 컴파일러는 코드를 최적화하여 프로그램이 더 효율적으로 실행될 수 있도록 도와줘요.
요약하자면, 코드 영역은 프로그램이 실행될 때 필요한 명령어들이 저장되는 곳으로 이 명령어들의 효율성과 컴파일러의 최적화 작업이 프로그램의 실행 속도와 성능에 중요한 영향을 미친답니다.

데이터 영역

데이터 영역은 전역 및 정적 변수를 안정적으로 저장하고 관리하는 영역이에요. 예를 들어, 프로그램을 전기를 공급하는 콘센트로 비유를 하자면 전역 변수와 정적 변수는 전기를 공급 받는 물체가 될 수 있겠죠. 전기를 공급 받는 동시에 작동하고 전기가 끊기면 그들은 작동하지 않죠. 즉, 데이터 영역은 프로그램을 실행하는 동시에 각각의 변수들이 메모리에 할당되고 종료되면 함께 소멸됩니다.

힙 영역

힙 영역은 프로그램이 실행되는 동안 메모리를 동적으로 할당하는 영역이에요. **'동적 할당'**이란, 프로그램이 실행되는 도중에 필요한 메모리의 양을 결정하고 할당하는 것을 의미해요. 이는 프로그램이 컴파일될 때 메모리의 크기가 결정되는 스택 영역과는 대비되죠?
예를 들어볼게요. 사용자가 입력한 데이터의 크기에 따라 메모리가 필요할 경우나 프로그램이 실행되는 동안 생성되는 데이터가 불규칙적이거나 크기를 예측하기 어려운 경우 힙 영역이 사용돼요. 즉, 사용자가 몇 개의 데이터를 입력할지 모르는 상황에서는 힙 영역에 메모리를 할당하여 그 데이터를 저장할 수 있어요.
또한, 힙 영역은 관리가 중요해요. 메모리가 더 이상 필요하지 않게 되었을 때 적절하게 해제하지 않으면 메모리 누수가 발생할 수 있어요. 이는 원자력 발전소에서 안전 관리가 중요하듯 프로그램에서도 메모리 관리가 매우 중요하다는 것을 의미해요.
요약하자면, 힙 영역은 프로그램 실행 도중 필요에 따라 메모리를 할당하는 공간이며 이 공간의 관리는 프로그램의 안정성과 효율성을 유지하기 위해 매우 중요해요.

스택 영역

스택 영역은 함수 호출 및 지역 변수와 같은 용량이 작은 데이터를 저장하고 빠르게 사용하기 위한 영역이에요. 스택의 구조는 식당에 가면 있는 쟁반 더미와 같아요. 마지막에 쌓인 쟁반이 가장 먼저 사용되는 것과 같죠. 이를 LIFO(Last In First Out)이라고 하고 한국어로는 후입선출이라고 표현해요.
이러한 구조는 함수 호출에 매우 유용해요. 함수가 호출될 때마다 해당 함수의 지역 변수 및 매개변수가 스택에 할당되고 함수가 반환될 때 해당 변수들이 스택에서 제거돼요. 하지만 스택은 고정된 크기를 가지고 있어 너무 많은 데이터를 저장하려고 하면 스택 오버플로우가 발생할 수 있어요. 따라서 스택을 사용할 때는 메모리 사용량을 주의해야 해요.

힙 영역과 스택 영역의 차이점

힙 영역과 스택 영역의 주요 차이점으로는 크기, 속도, 관리 측면에서 차이가 있어요. 힙은 더 크고 느리며 관리가 필요하지만 스택은 더 작고 빠르며 관리가 필요없어요.
표로 정리하면 다음과 같아요.
스택
크기
크다
작다
속도
느리다
빠르다
관리
필요함
자동

마치며

메모리 영역의 이해는 앱의 효율적인 퍼포먼스를 보여주기 위해선 필수적입니다. 그러기 위해서는 적절한 영역에서 적절한 데이터를 관리하는 것이 중요하죠.