-
초기화란?
자바에서 초기화란 0을 만드는 작업이 아니라 변수를 선언하고 값을 저장하는 것을 의미한다.
초기화는 가급적이면 선언과 동시에 해주는 것이 좋다.
멤버 변수는 초기화를 하지 않아도 변수의 타입에 맞는 기본값으로 초기화가 이뤄진다.
하지만 지역 변수는 사용하기 전에 반드시 초기화가 이뤄져야 한다.
초기화의 종류
초기화의 종류는 세 가지가 있다.
1. 명시적 초기화
public class Tset { static int a = 10; // 클래스 변수(스태틱변수)의 명시적 초기화 int b = 20; // 인스턴스 변수의 명시적 초기화 int c = 30; }
변수의 선언과 동시에 변수에 값을 대입하는 것을 말한다.
2. 생성자 이용
public class Test { // 생성자를 이용한 초기화. 생성자 자체가 객체를 초기화하기 위해 만든 것 Test(){ } }
생성자 자체가 인스턴스를 초기화하기 위해 나온 것으로 인스턴스 생성과 동시에 인스턴스를 초기화 시켜준다.
반대로 말하면 인스턴스를 생성할 때까지 필드를 초기화할 수 없다.
3. 초기화 블록 (initialization block)
명시적 초기화의 경우 단순히 변수 값을 입력하는 것 이상이 불가능하다.
생성자를 이용한 초기화는 인스턴스가 생성되지 않으면 초기화가 불가능하다.
결국 필드 즉 변수를 초기화 할 때 복잡한 수식을 써주거나 보기 편하게 만들 때 초기화 블록이 필요하다.
초기화 블록은 중괄호 ( { } )로 둘러쌓인 블록의 형태를 하고 있으며 생성자보다 먼저 호출된다.
static 제어자 여부에 따라 인스턴스 초기화 블록과 클래스 초기화 블록으로 나뉜다.
(1) 인스턴스 초기화 블록
초기화 블록을 적용해준 클래스의 코드
public class Test { int x; int y; { // 초기화 블록 이용 x = 10+5; y = 50; } }
명시적 초기화, 생성자 없이도 멤버 변수에 원하는 숫자를 넣고 출력하게 만든 메인 함수 코드
public class main { public static void main(String[] args) { Test test1 = new Test (); System.out.println(test1.x); // 15 출력 System.out.println(test1.y); // 50 출력 } }
(2) 클래스 초기화 블록
인스턴스 초기화 블록과 같은 형태지만 앞에 static을 붙이면 클래스 초기화 블록이 된다.
클래스 초기화 블록은 클래스가 처음 메모리에 로딩될 때 한 번만 실행된다.
클래스 초기화 블록은 생성자나 인스턴스 초기화 블록으로는 수행할 수 없는 클래스 변수의 초기화를 위해 쓴다.
클래스 초기화 블록이 적용된 코드
package Class_practice; public class Test_02 { int x; // 멤버변수 static int y; // 스태틱 변수 static { // 클래스 초기화 블록 y = 15; } }
메인 함수에서 클래스 초기화 블록에서 초기화된 스태틱 변수가 인쇄되는 코드
package Class_practice; public class Test { public static void main(String[] args) { System.out.println(Test_02.y); // 클래스 변수 인쇄 } }
'백엔드 > 자바' 카테고리의 다른 글
클래스의 super와 super() (1) 2020.07.28 클래스의 상속(inheritance) (0) 2020.07.28 메서드(method)에 대해서 (0) 2020.07.27 필드와 변수(field & Variable) (0) 2020.07.27 제어자(Modifier) (0) 2020.07.27