변수 초기화
🌿 자라는 중
int x = 5;와 x = 5; - 똑같이 값을 넣는 코드처럼 보이지만, 시험은 이 둘의 이름이 다르다는 걸 집요하게 묻는다. 언제 넣느냐에 따라 이름이 달라진다.
- 선언 (Declaration): 이름 + 타입만 정함 -
int x; - 초기화 (Initialization): 처음 만들 때 값을 넣음 -
int x = 5; - 대입 (Assignment): 이미 있는 변수에 값을 넣음 -
x = 10; - 리셋 (Reset): 원래 상태로 되돌림 -
x = 5;(초기값 복원)
초기화 ≠ 0으로 만들기. int x = 99;도 초기화다. 구분 기준은 하나 - 선언과 붙어 있으면 초기화, 떨어져 있으면 대입.
초기화를 안 하면: 언어마다 운명이 갈린다
| 언어 | 대상 | 결과 |
|---|---|---|
| C | 지역변수 (함수 안) | 쓰레기값(garbage value) |
| C | 전역 / static 변수 | 0 으로 자동 초기화 |
| Java | 멤버변수 (클래스 안) | 타입별 기본값 자동 |
| Java | 지역변수 (메서드 안) | 컴파일 에러 |
| Python | 모든 변수 | 선언 문법 없음 → 미대입 사용 시 NameError |
쓰레기값은 C 지역변수 한정이다. “C는 무조건 쓰레기값”으로 외우면 틀린다 - 전역과 static은 프로그램 시작 때 0으로 깔린다.
Java 기본값 (멤버변수)
| 자료형 | 기본값 |
|---|---|
int long short byte | 0 |
double float | 0.0 |
char | 널 문자 ((int) 캐스팅하면 0) |
boolean | false |
String · 모든 참조형 | null |
함정은 String - 기본값이 ""(빈 문자열)이 아니라 null이다.
배열 초기화
| 목적 | C | Java | Python |
|---|---|---|---|
| 값 지정 | int a[3]={1,2,3}; | int[] a={1,2,3}; | a=[1,2,3] |
| 크기 생략 | int a[]={1,2,3}; | 불가 (new 필요) | - |
| 전부 0 | int a[5]={0}; | int[] a=new int[5]; | a=[0]*5 |
| 모자라게 지정 | 나머지 자동 0 | - | - |
C에서 모자라게 지정했을 때가 단골 출제 포인트다:
| 선언 | [0] | [1] | [2] | [3] | [4] |
|---|---|---|---|---|---|
int a[5]={3,7}; | 3 | 7 | 0 | 0 | 0 |
int a[5]={0}; | 0 | 0 | 0 | 0 | 0 |
int a[5]; | 쓰레기 | 쓰레기 | 쓰레기 | 쓰레기 | 쓰레기 |
{ }로 한 칸이라도 초기화하면 나머지는 확실히 0. { }가 아예 없으면 전부 쓰레기값.
구조체 초기화 = 멤버 선언 순서
{ } 안의 값은 멤버를 선언한 순서대로 들어간다. 멤버 이름과 무관하다.
struct P { int y; int x; }; // 첫째 y, 둘째 x
struct P p = { 10, 20 }; // y=10, x=20
printf("%d %d", p.x, p.y); // 20 10
struct Node { struct Node* next; unsigned int x; };
struct Node t1 = { 0, 5u }; // next = NULL, x = 5
0은 포인터 자리에 들어가면 NULL이 된다. 5u의 u는 unsigned 접미사일 뿐, 값은 그냥 5 → 접미사 이야기는 C 자료형 참고.
정처기 포인트
- 함정 1: “초기화 = 0으로 만들기” → ✕. 처음 값을 넣는 행위 자체가 초기화.
int x = 99;도 초기화다. - 함정 2: “C는 초기화 안 하면 쓰레기값” → 지역변수만. 전역·static은 0.
- 함정 3: Java
String멤버변수 기본값을""로 내는 선지 →null이 정답. - 함정 4:
int a[5]={3,7};에서a[2]값을 묻는 문제 → 0 (쓰레기값 아님). - 함정 5: 구조체
{ }초기화 값을 멤버 이름 순서가 아니라 선언 순서로 매칭해야 한다.
한 줄: 선언과 붙으면 초기화·떨어지면 대입, C 쓰레기값은 지역변수만, 배열 { }는 부족분 0 채움, 구조체는 선언 순서.