오늘의하루

[JAVA 공부 5일차] 객체지향 Part 3 본문

JAVA

[JAVA 공부 5일차] 객체지향 Part 3

오늘의하루_master 2022. 7. 27. 09:20

1. 변수의 초기화

  • 지역 변수는 꼭 사용 전에 수동 초기화해주어야 한다.
  • 인스턴스 변수, 클래스 변수(static 변수)의 경우 자동 초기화가 된다.
    • int, long, short, byte, float, double 타입의 경우 타입에 맞게 0으로 초기화된다.
    • boolean 타입의 경우 false로 초기화된다.
    • char 타입의 경우 '\u0000' (공백 1칸)으로 초기화된다.
    • 참조형 변수는 null로 초기화된다.

1. 명식적 초기화 ( = )

간단한 초기화할 때 많이 사용된다.

class Car{
	int door = 4; // 기본형 변수의 초기화
	Engine e = new Engine(); // 참조형 변수의 초기화
}

2. 초기화 블록

복잡한 초기화를 할 때 많이 사용된다.

인스턴스 초기화 블록 : { }는 잘 사용되지 않는다. 인스턴스의 복잡한 초기화의 경우 생성자를 사용한다.

클래스 초기화 블록 : 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;
		}
	}
}

3. 생성자

인스턴스 변수를 초기화할 때 사용되며 복잡한 초기화에도 사용된다.

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

2. 최종 정리

클래스 변수 초기화 시점은 클래스가 처음 로딩될 때 단 한 번이다.

  • 로딩이란 class파일을 RAM에 올리는 과정을 의미한다.

인스턴스 변수 초기화 시점은 인스턴스가 생성될 때마다 초기화된다.

초기화 순서는 클래스 변수가 먼저 초기화되고 그 이후 인스턴스 변수가 초기화된다.

여러 개의 인스턴스를 만들어도 클래스 변수는 최초 로딩 시에 단 한번 초기화되고 그 이후로는 초기화되지 않는다.

class initTest{
	static int cv = 1;  // 1 명시적 초기화 (간단)
	int iv = 1;  // 2 명시적 초기화 (간단)
    
	static {  // 3 클래스 초기화 블록 ( 클래스 초기화 복잡 )
		cv = 2;
	}
	initTest(){  // 4 생성자( 인스턴스 초기화 복잡 )
		iv = 3;
	}
}

실행 순서

  1. static 변수 cv 0으로 자동 초기화
  2. static 변수 cv에 1로 명식적 초기화(간단)
  3. static 변수 cv에 2로 클래스 초기화 블록 사용 (복잡)
  4. 인스턴스 변수 iv 0으로 자동 초기화
  5. 인스턴스 변수 iv에 1로 명시적 초기화(간단)
  6. 인스턴스 변수 iv에 3으로 생성자 사용(복잡)
  7. 초기화 끝
Comments