사용자가 입력하는 값은 항상 변한다. 예를 들어 사용자가 숫자를 입력하고, 그 숫자를 다시 출력하려면 입력값을 어딘가에 잠깐 저장해두었다가 필요할 때 꺼내 써야 한다.
이때 필요한 것이 데이터를 담는 그릇 같은 존재이고, 대부분의 프로그래밍 언어는 이 문제를 변수(variable) 로 해결한다.
변수는 이름 그대로 “값이 변할 수 있는 대상”이다. 즉, 값을 담아두고 바꿔가면서 재사용하는 저장 공간이다.
변수에 값을 넣고, 읽는 방법
변수의 기본 동작은 두 가지로 딱 나뉜다.
- 값을 넣거나 바꿀 때: = 사용
- 값을 읽을 때: 변수 이름을 그대로 사용
예를 들면 이런 형태다.
- “값 넣기(대입)” → a = 1;
- “값 읽기” → System.out.println(a);
변수 선언이란 무엇인가
변수를 선언하면 컴퓨터는 메모리 어딘가에 값을 저장할 공간을 확보한다. 그리고 그 공간에 접근할 수 있도록 이름을 붙여준다.
즉, 변수 선언은 이런 의미다.
- 메모리 공간을 하나 확보한다
- 그 공간에 접근할 수 있는 이름을 만든다
예시는 다음과 같다.
int a;
int b;
변수는 이렇게 하나씩 선언할 수도 있고,
int a, b;
이렇게 여러 개를 한 번에 선언할 수도 있다.
변수 초기화란 무엇인가
변수를 선언한 뒤, 그 변수에 처음으로 값을 저장하는 것을 초기화(initialization) 라고 한다.
예를 들어 아래는 “선언”과 “초기화”가 분리된 형태다.
int a; // 변수 선언
a = 1; // 변수 초기화
그리고 보통은 선언과 초기화를 한 줄로 같이 쓴다.
int a = 1;
변수는 왜 반드시 초기화해야 하는가
다음 코드는 컴파일 에러가 난다.
int a;
System.out.println(a);
이유는 간단하다.
변수를 선언한 순간 확보한 메모리 공간에는 원래 어떤 값이 들어있었을지 아무도 모른다.
컴퓨터 메모리는 여러 프로그램과 시스템이 계속 사용하는 공간이다.
어떤 메모리 위치에는 이전에 쓰던 값이 남아 있을 수 있다.
초기화 없이 읽어버리면 그 “의미 없는 찌꺼기 값”이 출력될 수도 있다.
이런 위험을 막기 위해 자바는 초기화를 강제한다.
지역변수 vs 클래스 변수/인스턴스 변수
여기서 말하는 “초기화를 안 하면 컴파일 에러”는 지역변수(local variable) 기준이다.
지역변수는 직접 초기화해야 한다.
반면,
- 클래스 변수(static 변수)
- 인스턴스 변수(필드)
이 둘은 자바가 자동 초기화를 해준다. (예: int는 0, 참조형은 null 등)
컴파일 에러는 사실 좋은 에러다
컴파일 에러는 “자바 문법에 맞지 않거나, 자바 규칙을 어겼을 때” 발생한다.
이 에러의 장점은 무엇이냐면,
- 실행하기 전에
- 빨리
- 비교적 명확한 메시지로
문제를 알려준다는 점이다.
즉, 컴파일 에러는 프로그램이 실행되고 나서 터지는 버그보다 훨씬 고치기 쉽고, 개발 입장에서는 오히려 도움이 되는 에러다.
'김영한 > 자바 입문' 카테고리의 다른 글
| 배열의 선언과 생성 (0) | 2026.02.09 |
|---|---|
| Scanner (0) | 2026.02.09 |
| 형변환과 오버플로우 (0) | 2026.02.09 |
| 스코프 (0) | 2026.02.09 |
| 자바란? (0) | 2026.02.08 |