변수의 초기화

이승준·2021년 7월 16일
1

Java Study

목록 보기
5/12

변수의 초기화


  • 변수를 선언하고 처음으로  값을 저장하는 것을 변수의 초기화라고 한다.
  • 변수 초기화는 경우에 따라서 필수적이기도 하고 선택적이기도 한다.
  • 멤버 변수 : 초기화 하지 않아도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화. 따라서 따로 초기화를 안해도 사용이 가능.
  • 지역 변수 :  지역변수는 초기화가 자동적으로 되지 않으므로, 사용하기 전에는 반드시 초기화를 해야함.
class InitTest {
    int x;    //기본 정수값 0으로 초기화
    int y = x;  //y는 x의 값인 0으로 초기화가 가능.
    
    void method(){
        int i;
        int j = i; // ERROR!, 지역변수인 i를 초기화 하지 않고 사용됨.
    }
}
  • 각 타입의 기본값
자료형기본값
booleanfalse
char'\u0000'
byte,short,int0
long0L
float0.0f
double0.0d 또는 0.0
참조형 변수null
  • 멤버 변수의 초기화로는 지역 변수와 달리 여러 가지 방법이 있습니다.
    - 명시적 초기화
    - 생성자
    - 초기화 블럭

명시적 초기화(explicit initalization)


  • 변수를 선언과 동시에 초기화하는 것을 명시적 초기화라고 한다.
  • 가장 기본적이면서도 간단한 초기화 방법.
  • 복잡하고 구체적인 초기화에는 힘듬.
class Car{
    int door = 4;                //기본형(primaitive type)변수 초기화
    Engine engine = new Engine();//참조형(reference type)변수 초기화
}

초기화 블럭(initalization block)


  • 초기화 블럭을 이용해서, 복잡하고 구체적으로 변수를 초기화.
  • 초기화 블럭 내에서는 메서드 내에서와 같이 조건문, 반복문, 예외처리구문 등을 자유롭게 사용이 가능.
  • 초기화 블럭은 클래스 초기화 블럭, 인스턴스 초기화 블럭 으로 두 가지로 나뉨.
    • 클래스 초기화 블럭

      • 클래스 변수의 복잡한 초기화에 사용.
      • 클래스가 메모리에 적재될 때 한번만 실행.
      • 클래스 변수의 초기화 순서 : 기본값 -> 명시적 초기화 -> 클래스 초기화 블럭
    • 인스턴스 초기화 블럭

      • 인스턴스 변수의 복잡한 초기화에 사용.
      • 인스턴스 생성 할 때마다 수행.
      • 생성자 보다 먼저 실행 된다.
      • 보통 인스턴스 변수의 초기화는 생성자에서 주로 사용하지만, 모든 생성자에서 공통적으로 인스턴스를 초기화 할 때 중복 제거와 오류 발생성을 감소 시켜주기 위해 인스턴스 초기화 블럭에서 초기화.
      • 인스턴스 변수의 초기화 순서 : 기본값 -> 명시적 초기화 -> 인스턴스 초기화 블럭 -> 생성자
class Car {
    static int id;
    int serialNo;
    int door;
    String color;
    
    static {
        id = 0;
    }  //클래스 초기화 블럭
     
    Car() {
        id++;
        serialNo = id;
        door = 4;    
        color = "white";
    }
    Car(String color) {
        id++;
        serialNo = id;
        door = 4;
        this.color = color;
    }
    
}

위 코드에서 Car(), Car(String color) 생성자에서 공통적으로 같은 방식으로 인스턴스 변수를 초기화하는 것을 볼 수 있을 것이다. 이 코드를 아래와 같이 수정 할 수 있다.

class Car { 
    static int id; 
    int serialNo; 
    int door; 
    String color; 
     
    static { 
        id = 0; 
    } 
    {
        id++; 
        serialNo = id;  
        door = 4;
    } //인스턴스 초기화 블럭
      
    Car() { 
        color = "white"; 
    } 
    Car(String color) { 
        this.color = color; 
    } 
     
}
profile
끊임없이 생각하는 주니어 웹 개발자입니다.

0개의 댓글