- 학습 목표 1 : 자바의 클래스/인스턴스 변수 초기화 공부하기
클래스란?
- 객체를 생성하기 위한 설계도
public class Car { String color; int speed; }
인스턴스란?
- 클래스를 기반으로 생성된 객체
Car myCar = new Car();myCar는 Car 클래스의 인스턴스이자 객체이다.
-
멤버 변수
- 클래스 내부에 선언된 변수
인스턴스 변수
,클래스 변수
(static 변수)로 나뉜다.- 인스턴스 변수: 객체마다 별도로 생성되는 변수
- 클래스 변수: 모든 객체가 공유하는 변수
public class Car { // 인스턴스 변수 String model; // 각 객체마다 다른 값을 가질 수 있음 int wheels; // 각 객체마다 다른 값을 가질 수 있음 // 클래스 변수 (static 변수) static int numberOfCars = 0; // 모든 객체가 공유하는 변수 // 생성자 Car(String model, int wheels) { this.model = model; this.wheels = wheels; numberOfCars++; // Car 객체가 생성될 때마다 증가 } // 인스턴스 메서드 void display() { int localVariable = 0; // 지역 변수 System.out.println("Model: " + model); System.out.println("Wheels: " + wheels); } // 클래스 메서드 (static 메서드) static void displayNumberOfCars() { System.out.println("Number of cars: " + numberOfCars); } }
-
기본값
int
,short
,byte
: 0long
: 0Lfloat
: 0.0fdouble
: 0.0d 또는 0.0char
: '\u0000'boolean
: false- 객체 참조 변수: null
-
멤버 변수의 초기화 방법
- 명시적 초기화
변수 선언과 동시에 초기화, 대입연산자(=
) 사용 - 생성자
인스턴스 생성 시 초기화 - 초기화 블록
생성자 호출 전에 실행되는 블록으로, 생성자의 중복을 줄이기 위해 사용된다.
- 클래스 초기화 블록: static {}
- 인스턴스 초기화 블록: {}
(거의 사용x)
- 명시적 초기화
-
클래스 변수(cv) 초기화 순서
-
초기화 시점 : 클래스가 처음 로딩될 때 단 한 번 초기화
-
초기화 순서
- 기본값 모든 클래스 변수는 자동으로 기본값으로 초기화된다.
- 명시적 초기화 클래스 변수를 선언할 때 초기값을 지정할 수 있다.
- 클래스 초기화 블록
클래스가 로딩될 때 실행되며, 클래스 변수를 초기화하는 데 사용된다.
여러 개의 클래스 초기화 블록이 있을 경우, 순서대로 실행된다.
-
소멸 시기 : 프로그램 종료 시
-
-
인스턴스 변수(iv) 초기화 순서
-
초기화 시점 : 인스턴스가 생성될 때마다 초기화
-
초기화 순서
- 기본값
모든 인스턴스 변수는 자동으로 기본값으로 초기화된다. - 명시적 초기화
인스턴스 변수를 선언할 때 초기값을 지정할 수 있다. - 인스턴스 초기화 블록
인스턴스가 생성자가 호출되기 전에 실행되며, 모든 생성자에 공통적으로 적용된다. - 생성자
생성자가 호출되면서 인스턴스 변수를 초기화한다. 생성자는 객체가 생성될 때마다 호출되며, 인스턴스 변수를 초기화하는 데 사용된다.
- 기본값
-
소멸 시기 : 참조하지 않을 시 가비지 컬렉터에 의해 소멸
-
-
코드로 보기
class InitTest { // 명시적 초기화 static int cv = 1; int iv = 1; // 클래스 초기화 블록 static { cv = 2; } // 인스턴스 초기화 블록 { iv = 2; } // 생성자 InitTest() { iv = 3; } }
클래스 초기화 인스턴스 초기화 기본값 명시적 초기화 클래스 초기화 블록 기본값 명시적 초기화 인스턴스 초기화 블록 생성자 cv 0 cv 1 cv 2 cv 2 cv 2 cv 2 cv 2 iv 0 iv 1 iv 2 iv 3 1 2 3 4 5 6 7 - 클래스 초기화
- cv가 메모리(method area)에 생성되고, 기본값 0으로 초기화된다.
- 명시적 초기화(
int cv=1
)에 의해 cv의 값이 1로 초기화된다. - 클래스 초기화 블록(
cv=2
)에 의해 cv의 값이 2로 초기화된다.
- 인스턴스 초기화
- InitTest 클래스의 인스턴스가 생성되면서 iv가 메모리(heap)에 생성되고, 기본값 0으로 초기화된다.
- 명시적 초기화(
int iv=1
)에 의해 iv의 값이 1로 초기화된다. - 인스턴스 초기화 블록(
iv=2
)에 의해 iv의 값이 2로 초기화된다. - 생성자(
iv=3
)에 의해 iv의 값이 3으로 초기화된다.
- 클래스 초기화
- 스크럼 중 완료한 작업:
자바의 클래스/인스턴스 변수 초기화 공부하기
- 자바의 변수 분류와 클래스 내에서 변수들이 어떤 순서로 초기화되는지에 대해 공부했다.
- 자바의 runtime data area와 연결지어 생각해볼 수 있었다.