스택 (Stack)

핵심 인사이트 (3줄 요약)

후입선출(LIFO) 구조의 자료구조. 함수 호출, 지역 변수, 인터럽트 처리에 사용되는 핵심 메모리 영역이다. PUSH/POP 연산으로 데이터를 저장하고 꺼낸다.


📝 기술사 모의답안 (2.5페이지 분량)

📌 예상 문제

"스택 (Stack)의 개념과 핵심 원리를 설명하고, 비교 분석 및 실무 적용 방안을 기술하시오."


Ⅰ. 개요

1. 개념

스택(Stack)은 가장 나중에 넣은 데이터를 가장 먼저 꺼내는(LIFO) 자료구조다. 메모리 영역으로서 함수 호출 관리에 필수적이다.

비유: "접시 쌓기" - 맨 위에 쌓고, 맨 위에서 꺼냄


Ⅱ. 구성 요소 및 핵심 원리

2. 스택 구조

       ┌───────┐
       │   D   │ ← SP (Stack Pointer)
       ├───────┤
       │   C   │
       ├───────┤
       │   B   │
       ├───────┤
       │   A   │
       └───────┘

LIFO: Last In, First Out
나중에 들어간 게 먼저 나옴

3. 기본 연산

PUSH: 데이터 넣기
      SP 감소 → 데이터 저장

POP:  데이터 꺼내기
      데이터 읽기 → SP 증가

┌───────┐         ┌───────┐
│   D   │ PUSH E  │   E   │ ← SP
├───────┤   →     ├───────┤
│   C   │         │   D   │
└───────┘         └───────┘

4. 스택 포인터 (SP)

스택 포인터 역할:
- 스택 최상단(Top)을 가리킴
- PUSH 시 감소 (Full Descending)
- POP 시 증가

ARM Cortex-M: SP는 R13 레지스터
x86: SP (16-bit) 또는 ESP (32-bit)

6. 함수 호출과 스택

void funcA() {
    funcB();  // 호출
    // ...
}

void funcB() {
    int x = 10;  // 지역 변수
    // ...
}

스택 변화:
┌────────────────┐
│ funcA의 지역변수│
├────────────────┤
│ funcA 반환주소  │
├────────────────┤
│ funcB의 지역변수│ ← SP
└────────────────┘

funcB 종료 시:
- 지역 변수 제거
- 반환 주소로 복귀

7. 스택 프레임

┌────────────────┐
│    매개변수     │
├────────────────┤
│   반환 주소     │
├────────────────┤ ← 이전 FP
│   이전 FP      │
├────────────────┤
│   지역 변수    │
├────────────────┤
│   임시 공간    │ ← SP
└────────────────┘

FP (Frame Pointer): 현재 프레임 시작점
SP (Stack Pointer): 현재 프레임 끝점

8. 스택 오버플로우

스택 오버플로우 원인:
1. 무한 재귀 호출
2. 너무 큰 지역 변수
3. 너무 깊은 함수 호출

해결:
1. 재귀 → 반복문
2. 동적 할당 사용
3. 스택 크기 증가

Ⅲ. 기술 비교 분석

10. 장단점

장점단점
구현 간단중간 접근 불가
메모리 관리 쉬움크기 제한
함수 호출에 최적오버플로우 위험

Ⅳ. 실무 적용 방안

5. 스택 활용

용도설명
함수 호출반환 주소 저장
지역 변수함수 내 변수 저장
매개변수함수 인자 전달
인터럽트레지스터 저장
수식 계산후위 표기법

11. 실무에선? (기술사적 판단)

  • 임베디드: 스택 크기 신중히 설정
  • RTOS: 각 태스크마다 스택 할당
  • 보안: 스택 카나리, ASLR로 보호
  • 디버깅: 스택 트레이스로 호출 추적

Ⅴ. 기대 효과 및 결론

효과 영역내용정량적 목표
성능 향상처리 속도·응답 시간 개선기존 대비 20~40% 향상
비용 절감운영비·인프라 비용 절감연간 15~30% 절감
품질/안정성가용성·장애 감소UpTime 99.9% 이상

※ 참고 표준: 해당 기술 관련 NIST / ISO / IEEE / 과기정통부 가이드라인


어린이를 위한 종합 설명

스택를 쉽게 이해해보자!

후입선출(LIFO) 구조의 자료구조. 함수 호출, 지역 변수, 인터럽트 처리에 사용되는 핵심 메모리 영역이다. PUSH/POP 연산으로 데이터를 저장하고 꺼낸다.

왜 필요할까?
  기존 방식의 한계를 넘기 위해

어떻게 동작하나?
  복잡한 문제 → 스택 적용 → 더 빠르고 안전한 결과!

핵심 한 줄:
  스택 = 똑똑하게 문제를 해결하는 방법

비유: 스택은 마치 요리사가 레시피를 따르는 것과 같아. 혼란스러운 재료들을 정해진 순서대로 조합하면 → 맛있는 요리(최적 결과)가 나오지! 🍳