변수 선언과 초기화

2026. 2. 8. 23:46·김영한/자바 입문

 

사용자가 입력하는 값은 항상 변한다. 예를 들어 사용자가 숫자를 입력하고, 그 숫자를 다시 출력하려면 입력값을 어딘가에 잠깐 저장해두었다가 필요할 때 꺼내 써야 한다.
이때 필요한 것이 데이터를 담는 그릇 같은 존재이고, 대부분의 프로그래밍 언어는 이 문제를 변수(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
'김영한/자바 입문' 카테고리의 다른 글
  • Scanner
  • 형변환과 오버플로우
  • 스코프
  • 자바란?
sqaxe1
sqaxe1
woojoo-devlog 님의 블로그 입니다.
  • sqaxe1
    Woojoo's Devlog
    sqaxe1
  • 전체
    오늘
    어제
    • 분류 전체보기 (148)
      • Backend (9)
        • Servlet (7)
        • Spring (2)
      • Frontend (1)
      • CS (0)
      • Book (33)
        • 자바 웹 프로그래밍 Next Step (30)
        • 테스트 주도 개발: 고품질 쾌속개발을 위한 TDD.. (1)
        • 성공과 실패를 결정하는 1%의 네트워크 원리 (2)
      • Engineering (0)
        • Testing (0)
      • Infra (6)
        • AWS (6)
      • Java (4)
      • Network (1)
      • 김영한 (28)
        • 자바 입문 (8)
        • 실전 자바 - 기본편 (6)
        • 실전 자바 - 중급편 (10)
        • 실전 자바 - 고급편 (4)
      • Web (39)
        • Web Basics (39)
      • Project (24)
        • NeoSquare (0)
        • Memo Evolution (24)
      • 정보처리기사 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java
    개발서적
    aws
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
sqaxe1
변수 선언과 초기화
상단으로

티스토리툴바