출처 : Smile Han

개념의미쉽게 말하면
| 생명주기 (Lifetime) | 변수가 메모리에 생성되고 사라질 때까지의 기간 | “언제 만들어지고 언제 없어지는가?” |
| 가시성 (Scope) | 변수를 사용할 수 있는 범위 | “어디에서 접근 가능한가?” |
구분지역변수(Local Variable)전역변수(Global Variable)
| 선언 위치 | 함수 내부 | 함수 외부 |
| 사용 가능 범위 | 선언된 함수 안에서만 사용 | 모든 함수에서 사용 가능 |
| 생성 시점 | 함수 호출 시 생성 | 프로그램 시작 시 생성 |
| 소멸 시점 | 함수 종료 시 제거 | 프로그램 종료 시 제거 |
| 초기값 | 자동 초기화 안 됨 (쓰레기값 가능) | 자동으로 0 초기화 |
| 저장 영역 | 스택(Stack) 메모리 | 데이터(Data) 영역 |
| 접근성 | 제한적 | 전체 프로그램에서 공유 |
| 장점 | 안전하고 관리 쉬움 | 여러 함수에서 공유 가능 |
| 단점 | 함수 밖에서 사용 불가 | 남용 시 코드 복잡 |
| 우선순위 | 같은 이름이면 지역변수가 우선 | 지역변수에 가려질 수 있음 |
| 주 사용 목적 | 임시 계산, 함수 내부 작업 | 공통 데이터 저장 |

코드 영역과 데이터 영역 정리
구분설명
| 코드 영역(Code Area) | 프로그램의 실행 코드(명령어)가 저장되는 메모리 영역 |
| 데이터 영역(Data Area) | 변수나 데이터가 저장되는 메모리 영역 |


기억 클래스 : 자동(auto) 한눈 정리
항목설명
| 의미 | 가장 기본적인 지역변수 |
| 선언 위치 | 함수 또는 블록 내부 |
| 저장 위치 | 스택(Stack) 영역 |
| 생성 시점 | 함수/블록 시작 시 |
| 소멸 시점 | 함수/블록 종료 시 |
| 사용 범위 | 선언된 블록 내부만 |
| 초기값 | 자동 초기화 안 됨 (쓰레기값 가능) |
| 특징 | 가장 많이 사용하는 변수 |
auto의 핵심 특징
특징내용
| 지역변수 | 함수 안에서만 사용 가능 |
| 자동 생성/삭제 | 함수 시작 시 생성, 끝나면 제거 |
| 스택 사용 | 메모리의 Stack 영역 사용 |
| auto 생략 가능 | 보통 auto를 쓰지 않음 |
| 초기화 주의 | 초기화 안 하면 garbage value 발생 가능 |

구분auto 변수지역변수(Local)static 변수전역변수(Global)
| 선언 위치 | 함수 내부 | 함수 내부 | 함수 내부/외부 | 함수 외부 |
| 저장 영역 | Stack | Stack | Data | Data |
| 생성 시점 | 함수 호출 시 | 함수 호출 시 | 프로그램 시작 시 | 프로그램 시작 시 |
| 소멸 시점 | 함수 종료 시 | 함수 종료 시 | 프로그램 종료 시 | 프로그램 종료 시 |
| 값 유지 여부 | ❌ 유지 안 됨 | ❌ 유지 안 됨 | ⭕ 유지됨 | ⭕ 유지됨 |
| 사용 범위(Scope) | 선언된 블록 내부 | 선언된 함수 내부 | 선언된 범위 내부 | 프로그램 전체 |
| 초기값 | 쓰레기값 가능 | 쓰레기값 가능 | 자동 0 초기화 | 자동 0 초기화 |
| 특징 | 가장 기본 변수 | 함수 안에서만 사용 | 이전 값 기억 | 모든 함수가 공유 |
| 주 사용 목적 | 임시 계산 | 함수 내부 작업 | 호출 횟수 저장 등 | 공통 데이터 관리 |
핵심 비교 한 줄
변수 종류핵심 특징
| auto 변수 | 함수 끝나면 사라짐 |
| 지역변수 | 함수 안에서만 사용 |
| static 변수 | 값이 계속 유지됨 |
| 전역변수 | 모든 함수가 함께 사용 |
기호이름주 사용 용도예시
| ( ) | 소괄호 | 함수 호출, 연산 우선순위, 조건식 | printf(), if(a>b) |
| [ ] | 대괄호 | 배열(Array) 사용 | arr[0] |
구분Python 배열(리스트)C언어 배열
| 저장 방식 | 다양한 자료형 저장 가능 | 같은 자료형만 저장 가능 |
| 크기 변경 | 가능 | 불가능 |
| 메모리 관리 | 자동 | 직접 관리 |
| 사용 편의성 | 매우 쉬움 | 상대적으로 복잡 |
| 인덱스 시작 | 0부터 시작 | 0부터 시작 |
| 속도 | 비교적 느림 | 매우 빠름 |
| 메모리 효율 | 낮음 | 높음 |
| 배열 길이 확인 | 쉬움 (len) | 직접 계산 필요 |
| 범위 검사 | 자동 검사 | 직접 관리 |
| 문자열 처리 | 쉬움 | 문자 배열로 처리 |
| 동적 기능 | append, remove 등 제공 | 직접 구현 필요 |


다차원 배열(Multi-dimensional Array)
다차원 배열은:
“배열 안에 배열이 들어있는 형태”
입니다.
가장 많이 사용하는 것은 2차원 배열입니다.
1. 1차원 배열 복습
형태의미
| 1차원 배열 | 한 줄로 저장된 배열 |
예시 느낌:
[10][20][30]
2. 2차원 배열
의미
행(row)과 열(column)로 구성된 배열
표처럼 데이터를 저장합니다.
문자열(String)
항목설명
| 의미 | 여러 문자를 연결한 데이터 |
| 구성 | 문자(Character)의 집합 |
| 저장 형태 | 문자 배열(char 배열) |
| 끝 표시 | 문자열 끝에는 NULL 문자(\0)가 존재 |
| 사용 목적 | 단어, 문장 저장 |
문자열 특징
특징설명
| 문자들의 연속 | 메모리에 순서대로 저장 |
| 마지막에 \0 포함 | 문자열 끝을 구분 |
| 실제로는 배열 | C언어 문자열은 char 배열 |
| 한 글자씩 접근 가능 | 인덱스로 문자 접근 가능 |
NULL 문자 (\0)
항목설명
| 의미 | 문자열의 끝 표시 |
| ASCII 값 | 0 |
| 역할 | 문자열 종료 판단 |
즉 C언어는:
- 어디까지가 문자열인지
- \0를 보고 판단합니다.
문자열 배열(String Array)
의미
여러 개의 문자열을 저장하는 배열
즉:
문자열들의 배열
입니다.
구조 개념
단계의미
| 문자 | 한 글자 |
| 문자열 | 문자들의 묶음 |
| 문자열 배열 | 문자열 여러 개의 묶음 |
문자열 배열 특징
특징설명
| 여러 문자열 저장 가능 | 단어 목록 저장 가능 |
| 2차원 배열 형태 사용 | 행마다 문자열 저장 |
| 각 행이 하나의 문자열 | 각 문자열 끝에 \0 존재 |
문자열 vs 문자열 배열
구분문자열문자열 배열
| 저장 대상 | 하나의 문자열 | 여러 문자열 |
| 구조 | 1차원 char 배열 | 2차원 char 배열 |
| 사용 목적 | 단어/문장 저장 | 여러 단어 저장 |

