JavaScript

웹 개발의 필수 언어

동적인 웹 페이지 구현을 위한 핵심 프로그래밍 언어.

Java

객체지향 프로그래밍

안정적이고 확장성 있는 백엔드 개발의 대표 언어.

HTML

웹의 기초

웹 페이지의 구조를 정의하는 마크업 언어.

React

현대적 UI 라이브러리

효율적인 사용자 인터페이스 구축을 위한 JavaScript 라이브러리.

CSS

웹 디자인의 핵심

웹 페이지의 시각적 표현을 담당하는 스타일 언어.

Spring

자바 웹 프레임워크

기업급 애플리케이션 개발을 위한 강력한 프레임워크.

Java/자바 학습

2. 메모리 - 1. 스택(Stack)과 힙(Heap)

lamarcK 2025. 5. 12. 20:30

기본 이해

  • 개념 정의
    • 스택: LIFO(Last In First Out) 구조의 메모리 영역으로, 정적 메모리 할당에 사용
    • 힙: 동적 메모리 할당을 위한 자유로운 영역으로, 크기가 불규칙한 데이터 저장
  • 일상생활 비유
    • 스택: 접시 쌓기 (마지막에 쌓은 접시를 먼저 사용)
    • 힙: 도서관 책장 (필요한 공간에 자유롭게 책을 배치)
  • 작동 방식
    • 스택: 함수 호출과 지역변수 저장, 컴파일 시점에 크기 결정
    • 힙: 런타임에 동적으로 메모리 할당/해제

핵심 구성요소

스택:

  • 프레임: 함수 호출마다 생성되는 독립적 영역
  • 포인터: 현재 실행 위치 추적
  • 지역변수 저장소

힙:

  • 가용 메모리 풀
  • 메모리 블록
  • 메모리 관리자

존재 이유와 목적

  • 메모리 효율적 관리
  • 빠른 액세스 속도 (스택)
  • 유연한 메모리 할당 (힙)
  • 스코프와 생명주기 관리

주의사항과 일반적 오류

  • 스택 오버플로우
  • 메모리 누수
  • 댕글링 포인터
  • 힙 단편화

비교 분석

스택 vs 힙:

특성 스택
속도 빠름 느림
크기 제한적 큰 용량
할당 자동 수동
관리 LIFO 자유로움
접근 순차적 랜덤

실무 활용

public class MemoryExample {
    public static void main(String[] args) {
        // 스택 사용
        int x = 5;  // 스택에 저장

        // 힙 사용
        String str = new String("Hello");  // 힙에 저장

        // 객체 생성
        Person person = new Person("John");  // 참조는 스택, 객체는 힙
    }
}

이전 개념:

  • 메모리 구조
  • 변수와 데이터 타입

후속 개념:

  • 가비지 컬렉션
  • 메모리 관리 전략
  • 동시성 프로그래밍

Best Practices:

  1. 큰 객체는 힙에 할당
  2. 작고 임시적인 데이터는 스택 활용
  3. 적절한 스코프 관리
  4. 명시적 메모리 해제 (필요한 경우)