그저 내가 되었고

☕️Java:: 변수의 초기화 본문

개발/Java

☕️Java:: 변수의 초기화

hyuunii 2023. 6. 7. 22:06

변수의 초기화란?

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

-> 필수적/선택적 케이스 모두 존재. 가능하면 선언과 동시에 초기화하는것이 바람직

 

 

멤버변수(클/인 변수)의 초기화

-> 멤버변수는 초기화 안해도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화가 이루어지므로 굳이 안해도 됨

 

멤버변수의 초기화 방법

1) 명시적 초기화 explicit initialization

2) 생성자 constructor

3) 초기화 블럭 initialization block

    - 인스턴스 초기화 블럭: 인스턴스변수 초기화에 사용

    - 클래스 초기화 블럭: 클래스변수 초기화에 사용

 

 

지역변수의 초기화

-> 지역변수는 사용 전에 반드시 초기화해야 함

 

class Initialization {
	int x;		//iv
    int y = x;		//iv
    
    void method() {
    	int i;		//lv
        int j = i;	//error. 지역변수이므로 초기화 필요
    }
}

 

 

 

명시적 초기화 explicit initialization

-> 변수를 선언과 동시에 초기화하는 것

-> 가장 기본적, 간단한 방법이므로 초기화 방법들 중 가장 우선적으로 고려하기

-> 얘로 초기화하기 복잡한 경우엔 초기화 블럭 initialization block 또는 생성자 사용하기

 

 

초기화 블럭 initialization block

-> 이 안에는 메서드 안과 같이 조건문, 반복문, 예외처리구문 등 자유롭게 사용 가능하므로, 초기화 작업이 복잡하여 명시적 초기화만으로 부족한 경우 사용하면 됨.

-> 종류에는 두 가지가 있음. 클래스 초기화 블럭과 인스턴스 초기화 블럭임.

    - 클래스 초기화 블럭: 클래스변수의 복잡한 초기화에 사용. 인스턴스 초기화 블럭 앞에 static 붙여줌. 클래스가 메모리에 처음 로딩될 때 한 번만 수행됨.

    - 인스턴스 초기화 블럭: 인스턴스변수의 복잡한 초기화에 사용. 클래스 내에 {} 블럭을 만들고 그 안에 코딩. 생성자처럼 인스턴스가 생성될 때마다 수행됨. 인스턴스변수의 초기화는 주로 생성자를 통해 이루어지며, 초기화블럭은 모든 생성자에서 공통적으로 수행되어야 하는 코드를 넣는데 사용된다.

 

Car() {
	count++;					//중
    serialNo = count;					//복
    color = "Red";
    gearType = "Auto";
}

Car (String color, String gearType) {
	count++;					//중
    serialNo = count;					//복
    this.color = color;
    this.gearType = gearType;
}

위의 코드에는 클래스의 모든 생성자에 공통으로 수행되어야 하는 중복 부분이 존재.

아래처럼 인스턴스 블럭 이용해 간결화 가능.

{
	count++;			//인스턴스
    serialNo = count;			//초기화 블럭
}

Car() {
	color = "red";
    gearType = "Auto";
}

Car(String color, String gearType) {
	this.color = color;
    this.gearType = gearType;
}

 

이렇게 코드 중복 제거해서

1) 코드의 신뢰성 높이고

2) 에러 발생 가능성 줄일 수 있음

=> 즉, 재사용성을 높이고 중복을 제거할 수 있음

==> 즉, OOP의 궁극적인 목적 달성에 가까워질 수 있음

 

 

class InitializationExample {
	static {					//클래스 초기화
    	System.out.println("static { }");		//블럭
    }
    
    {							//인스턴스 초기화
    	System.out.println("{ }");			//블럭
    }
    
    public InitializationExample() {
    	System.out.printLn("Constructor")l
    }
    
    public static void main(String args[]) {
    	System.out.println("InitializationExample ie1 = new InitializationExample(); ");
        InitializationExample ie1 = new InitializationExample();
        
        System.out.println("InitializationExample ie2 = new InitializationExample(); ")
        InitializationExample ie2 = new InitializationExample();
	}
}

 

 

 

 

출처:: 자바의 정석 3rd edition 1권 OOP