Java 변수의 초기값

PearLineZero
|2024. 11. 18. 16:27

가끔 코딩테스트를 하다보면 자바 변수에 초기값을 설정해줘야 하는데 설정을 안 해주는 실수를 한다.

어떤 변수에 초기화를 해줘야하는지 헷갈리고 개념도 잘 모르는거 같아서 기초를 확실하게 잡고 가게 글을 작성..!

 

 

로컬 변수의 초기화

로컬 변수(local variable)는 명시적으로 초기화하지 않으면 사용할 수 없습니다. 컴파일러가 자동으로 값을 초기화하지 않기 때문이라고 합니다.

 

 int result를 초기화하지 않고 사용하려고 하면 컴파일 오류가 발생합니다.

public class Main {
    public static void main(String[] args) {
        int result; // 초기화하지 않음
        System.out.println(result); // 컴파일 오류: 초기화되지 않은 변수 사용
    }
}

 

왜 그런가요? 🧐

로컬 변수는 메서드 내부에서 생성되며, 초기화되지 않은 상태로 사용할 경우 예상치 못한 동작을 방지하기 위해 컴파일러가 이를 엄격히 제한을 하기 때문입니다.

 

 

 

멤버 변수의 초기화

클래스 멤버 변수(field)는 자동으로 초기화됩니다.

  • int, long 등의 숫자 타입 → 기본값 : 0
  • boolean → 기본값 : false
  • 참조형(Object) → 기본값:  null
public class Main {
    int result; // 멤버 변수

    public static void main(String[] args) {
        Main main = new Main();
        System.out.println(main.result); // 출력: 0
    }
}

 

왜 그런가요?🧐

멤버 변수는 객체가 생성될 때 JVM에 의해 자동으로 초기화가 되는데, 이는 메모리의 일관성을 보장하고 프로그래머가 초기화를 잊었을 때 발생할 수 있는 오류를 방지한다고 합니다.

 

 

 

초기값을 명시적으로 설정하는 이유

로컬 변수의 경우 초기값을 설정하지 않으면 컴파일 오류가 발생하기 때문에, 명시적으로 초기값을 설정해야 합니다.

초기값을 명시하면 코드의 의도를 명확히 드러낼 수 있고, 로직에서 실수를 줄이는 데 도움이 된다고 합니다.

 

예제: 초기값을 명시적으로 설정

public class Main {
    public static void main(String[] args) {
        int result = 0; // 초기값 명시
        System.out.println(result); // 출력: 0
    }
}

 

 

 

멤버 변수와의 차이

 

변수 종류 초기화 필요 여부 초기값
로컬 변수 필요 없음 (명시적으로 설정해야 함)
멤버 변수 불필요 숫자 타입: 0, boolean: false, 참조형: null

 

 

정리하자면 

  • 로컬 변수는 초기값을 자동으로 설정해 주지 않으므로, 사용 전에 반드시 초기화!
  • 멤버 변수는 초기값이 자동으로 설정되므로 초기화하지 않아도 사용 가능!

 

 

자바는 로컬 변수에 대해 명시적으로 초기값을 설정하도록 강제하여 프로그래밍 오류를 줄이려는 철학을 가지고 있습니다.

멤버 변수는 JVM이 자동으로 초기화하므로 기본값이 설정됩니다. 하지만 명시적으로 초기화하는 습관을 들이면 코드의 가독성과 안전성이 향상된다고 합니다.