Search

변수의 초기화

변수의 초기화

변수를 선언하고 처음으로 값을 저장하는 것
가능한 변수 선언과 동시에 적절한 값으로 초기화 하는 것이 바람직
멤버 변수 → 초기화 없어도 자동으로 변수의 자료형에 맞는 기본값으로 초기화됨.
지역 변수사용 전 반드시 초기화 필요
class InitTest { int x; // 인스턴스 변수. 자동으로 기본값 0으로 초기화 int y = x; // 인스턴스 변수. 자동 초기화된 상태이므로 x 사용 가능 void method1() { int i; // 지역 변수 int j = i; // 에러. 지역변수를 초기화하지 않고 사용 } }
Java

멤버 변수의 초기화 방법

1.
명시적 초기화
2.
생성자
3.
초기화 블럭

명시적 초기화 (Explicit Initialization)

변수를 선언과 동시에 초기화 하는 것
class Car { int door = 4; // 기본형 변수의 초기화 Engine e = new Engine(); // 참조형 변수의 초기화 }
Java

초기화 블럭 (Initialization Block)

class InitBlock { static { /* 클래스 초기화 블럭 */ } { /* 인스턴스 초기화 블럭 */ } // ... }
Java
클래스 초기화 블럭 : 클래스 변수의 복잡한 초기화에 사용
인스턴스 초기화 블럭 앞static 덧붙임
클래스가 메모리에 처음 로딩될 때 한번만 수행
인스턴스 초기화 블럭 : 인스턴스 변수의 복잡한 초기화에 사용
클래스 내에 블럭 { }을 만들고 내용 작성
인스턴스를 생성할 때마다 수행
생성자보다 초기화 블럭이 먼저 수행
모든 생성자에서 공통으로 수행돼야 하는 코드를 넣는데 사용 (인스턴스 변수 초기화는 생성자로)
// 인스턴스 초기화 블럭. 모든 생성자에 공통으로 들어가야 할 문장들 { count++; serialNo = count; } Car() { color = "White"; gearType = "Auto"; } Car(String color, String gearType) { this.color = color; this.gearType = gearType; }
Java

코드의 재사용성을 높이고, 중복 제거하기 위해! → 객체 지향 프로그래밍의 핵심

BlockTest.java
BlockTest2.java

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

클래스 변수 : 클래스가 처음 로딩될 때 단 한번
초기화 순서 : 기본값 → 명시적 초기화 → 클래스 초기화 블럭
인스턴스 변수 : 인스턴스가 생성될 때마다
초기화 순서 : 기본값 → 명시적 초기화 → 인스턴스 초기화 블럭 → 생성자
class InitTest { // 명시적 초기화 static int cv = 1; int iv = 1; static { cv = 2; } // 클래스 초기화 블럭 { iv =2; } // 인스턴스 초기화 블럭 InitTest() { // 생성자 iv = 3; } }
Java
ProductTest.java
DocumentTest.java

참고 자료