[Java] 변수 초기화에 대한 이야기

변수 초기화에 대한 이야기




 

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

 

멤버변수는 초기화를 하지 않아도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화가 이루어지므로 초기화하지 않고 사용해도 되지만 

지역변수는 사용하기 전에 반드시 초기화를 해야한다.

 

 




멤버변수의 초기화 방법


멤버변수를 초기화 하는데에는 3가지 방법이 있다. 

생성자(constructor), 명시적 초기화 ( Explicit initialization), 초기화 블럭(initialization block)

생성자는 앞선 포스트에서 적었기 때문에 패스하고 명시적 초기화, 초기화 블럭에대해 정리하겠습니다.

 



1. 명시적 초기화 (Explicit initialization)


변수를 선언과 동시에 초기화하는 것을 명시적 초기화라고 한다.

 

class  Character

{

          //기본형 변수의 초기화

int age =4; 


//참조형변수의 초기화

Homework e = new Homework();

}

 



2. 초기화 블럭 (initialization block)


' 클래스 초기화 블럭 ' 과 '인스턴스 초기화 블럭 ' 두 가지 종류가 있다.



  클래스 초기화 블럭

  인스턴스 초기화 블럭

 클래스변수의 초기화에 사용

  인스턴스변수의 초기화에 사용

 클래스가 메모리에 처음 로딩될 때 

한번만 수행

 생성자와 같이 인스턴스를 

생성할 때 마다 수행

  인스턴스 초기화 블럭 앞 static을 덧붙이기

클래스 내에 블럭 { } 


생성자 보다 인스턴스 초기화 블럭이 먼저 수행된다.


인스턴스 초기화 블럭은 단순히 클래스 내에 블럭 { }을 만들고 그 안에 작성하면 된다.

클래스 초기화 블럭 인스턴스 초기화 블럭앞에  static을 덧붙이기만 하면 된다.

 

class Character

{

 static{  /* 클래스 초기화블럭 */  }

{  /* 인스턴스 초기화 블럭 */  }

}




스턴스 변수 초기화는 주로 생성자안에서 이루어지기 때문에, 잘 사용되지 않는다.

대신 클래스의 모든 생성자에서 공통적으로 수행되어져야 하는 코드가 있는 경우에는

인스턴스 초기화 블럭에 넣어두면 코드의 중복 줄일 수 있다.

 


 Character()
{
     //중복
     System.out.println("Character 인스턴스가 생성되었습니다.");
     this("GYU", false, 27);
 }
 Character(String _name)
 {
     //중복
    System.out.println("Character 인스턴스가 생성되었습니다.");
     this(_name, false, 27);
 }


이러는 것 보다

 

{ System.out.println("Car 인스턴스가 생성되었습니다.");  } // 인스턴스 블럭
Character()
{
      this("GYU", false, 27);
 }
 Character(String _name)
 {
       this(_name, false, 27);
 }

훨씬 간결해진다.


 

객체지향프로그래밍이 추구하는 궁극적인 목표는 뭐!??

재사용성을 높이고, 중복을 제거하는 것!!

 

 


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

 

 

시기

 

Class - 클래스가 처음 로딩될 때 단 한번 초기화

Instance - 인스턴스가 생성될 때마다 각 인스턴스별로 초기화

 

 

순서

 

Class

1. 클래스 변수 기본값

2. 클래스 명시적 초기화

3. 클래스 초기화 블럭

 

Instance

1. 인스턴스 변수 기본값

2. 인스턴스 변수의 명시적 초기화

3. 인스턴스 초기화 블럭

4. 생성자

 

 

참고.

클래스의 로딩시기는 JVM의 종류에 따라 좀 다를 수 있다. 클래스가 필요할 때 바로 메모리에 로딩하도록 설계가 되어 있는 것도 있고, 실행효율을 높이기 위해서 사용될 클래스들을 프로그램이 시작될 때 미리 로딩하도록 되어 있는 것도 있다.