💻 Study/Java

[Java] 객체지향개념5_변수의 초기화

와자! 2023. 1. 30. 17:34
728x90
728x90
이 게시글은 남궁성의 정석코딩 - 자바의 정석 기초편(2020최신)을 보고 공부한 내용을 정리한 게시글입니다.
틀린 내용이 있을 수 있습니다. 

 

 

✔ 변수의 초기화

- 클래스 변수와 인스턴스 변수는 자동으로 초기화된다. (주로 0으로 초기화 되며, boolean타입일 땐 false로 된다.)

- 지역 변수는 반드시 사용 전에 수동으로 초기화 해야 한다.

class Test{
  int x;
  int y = x;

  void testMethod(){
    int i = 5;
    int j = i;
    System.out.println(j);
  }
}

public class Main {
  public static void main(String[] args) {
    Test t = new Test();
    
    System.out.println(t.x); // 0
    System.out.println(t.y); // 0
    t.testMethod(); // 5
  }
}
변수 x, y는 따로 값을 대입하지 않았는데도 출력 시 0으로 나온다.
변수 j는 i의 값이 없을 경우 에러가 발생한다.
변수 i의 값에 5를 대입하자 변수 j의 값을 출력 시 5로 나온다.

 


 

 클래스 변수와 인스턴스 변수의 초기화

- 클래스 변수는 클래스가 메모리에 처음 로딩될 때 단 한 번 초기화된다.

- 인스턴스 변수는 객체가 생성될 때 마다 초기화된다.

 

 

클래스 변수와 인스턴스 변수의 초기화는 3가지로 분류할 수 있다.

 

1. 자동초기화

→ 변수 타입에 따라 0, null, false 중 하나로 자동 초기화 된다.

 

2. 간단초기화

→ 대입연산자(=)를 사용하여 변수에 값을 대입해 초기화 한다. 명시적 초기화라고도 한다.

 

3. 복잡초기화

→ 작성해야 할 내용이 많을 경우 사용하며, 초기화 블럭이나 생성자를 사용하여 초기화한다.

 

 


 

 복잡초기화

class Test{
  static{}; // 클래스 변수 초기화블럭
  
  {}; // 인스턴스 변수 초기화블럭
  
  Test{}; // 인스턴스 변수 생성자 
}

복잡초기화는 초기화 블럭생성자로 나눌 수 있는데,

 

초기화 블럭은 중괄호 안에 여러 문장을 넣어 초기화 할 수 있다.

클래스 변수는 중괄호 앞에 static을 붙여야한다.

인스턴스 변수느 초기화 블럭보다는 생성자로 초기화하는 경우가 많다.

 

생성자 초기화는 클래스 안에 생성자를 만들어 초기화한다.

인스턴스 변수만 초기화할 수 있다.

 

 

class StaticBlockTest{
  static int[] arr = new int[10]; // 간단 초기화
  
  static{ // 클래스 변수 복잡 초기화
    for(int i=0; i<arr.length; i++){
      arr[i] = (int)(Math.random()*10) + 1;
    }
  }
}
배열 arr은 클래스 변수이다.
배열 arr은 처음에는 10개의 영역을 할당받으며 초기화됐다. (간단 초기화)
이어서 arr 각 요소에 난수를 할당받으며 초기화됐다. (복잡 초기화)
배열 arr은 처음 메모리에 할당될 때 10개의 요소를 가지며, 각 요소에는 난수가 할당되어 있다.

 

728x90
728x90