변수의 초기화 - 정의

  • 변수를 선언하고 처음으로 값을 저장하는 것

  • 가능하면 선언과 동시에 적절한 값으로 초기화하는 것이 바람직

  • 변수에 따라 필수여부가 다름

    • 멤버변수 : 초기화를 하지 않아도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화

    • 지역변수 : 사용하기 전에 반드시 초기화해야 함. 초기화 하지 않으면 컴파일시 에러 발생

  • 같은 타입의 변수는 콤마’,’를 사용해서 함께 선언하거나 초기화 할 수 있음

    • 타입이 다를 경우는 안 됨



각 타입의 기본 값

자료형 기본값
boolean false
char ‘\u0000’
byte, short, int 0
long 0L
float 0.0f
double 0.0d 또는 0.0
참조형 변수 null



멤버변수의 초기화 종류

  • 명시적 초기화(explicit initalization)

  • 생성자(constructor)

  • 초기화 블럭(initialization block)



명시적 초기화

  • 변수를 선언과 동시에 초기화

  • 가장 기본적이면서도 간단한 초기화 방법

  • 기본형(primitive type) 변수의 초기화

    • 타입 변수명 = 값;
  • 참조형(reference type) 변수의 초기화

    • 클래스명(타입) 변수명 = new 클래스명(타입)();

    • 클래스명(타입) 변수명 = new 클래스명(타입)(argument…);



초기화 블럭

  • 종류

    • 클래스 초기화 블럭 : 클래스 변수의 복잡한 초기화에 사용

    • 인스턴스 초기화 블럭 : 인스턴스 변수의 복잡한 초기화에 사용

  • 사용방법

    • 클래스 초기화 블럭 : 인스턴스 초기화 블럭 앞에 단순히 static을 붙이면 됨

    • 인스턴스 초기화 블럭 : 클래스 내부에 블럭 { }을 만들고 그 안에 코드를 작성하면 됨

  • 특징

    • 초기화 블럭 내에는 메서드 내에서와 같이 조건문, 반복문, 예외처리 구문 등을 자유롭게 사용할 수 있음

    • 초기화 작업이 복잡하여 명시적 초기화만으로는 부족한 경우 사용

  • 수행

    • 클래스 초기화 블럭 : 클래스가 메모리에 처음 로딩될 때 한 번만 수행됨
      클래스가 처음 로딩될 때 클래스변수들이 자동적으로 메모리에 만들어지고, 곧바로 클래스 초기화블럭이 클래스 변수들을 초기화

    • 인스턴스 초기화 블럭 : 생성자와 같이 인스턴스를 생성할 때마다 수행됨
      생성자보다 인스턴스 초기화 블럭이 먼저 수행됨

  • 인스턴스 초기화 블럭

    • 모든 생성자에서 공통적으로 수행되어야 하는 코드를 넣을 때 사용

    • 인스턴스 변수의 복잡한 초기화는 주로 생성자를 사용하는데, 이 부분이 중복될 때 통합

  • 코드의 중복을 제거하면

    • 코드의 신뢰성이 높아짐

    • 오류 발생가능성이 낮아짐



멤버변수의 초기화 시기와 순서

  • 초기화 시점

    • 클래스변수 : 클래스가 처음 로딩될 때 1번

    • 인스턴스변수 : 인스턴스가 생성될 때마다 각 인스턴스별로 초기화

  • 초기화 순서

    • 클래스변수 : 기본값 → 명시적초기화 → 클래스 초기화 블럭

    • 인스턴스변수 : 기본값 → 명시적초기화 → 인스턴스 초기화 블럭 → 생성자