728x90

이 강의는 자바의 프로젝트를 어떻게 만드는지, 또한 빌드를 어떻게 하는지에 대한 강의를 진행하지 않는다.

그러나 자바의 기본적인, 그리고 자바에 필수적인 기능들도 분명 존재하고 이 블로그엔 그 작업에 필요한 포스팅도 함께 제공하고 있다.

그 정보를 확인하고 싶다면 여기를 참조하라. 양이 조금 되고 현재진행형으로 늘어나고 있으므로 페이지내의 찾기(ctrl+f 나 cmd+f)로 찾아보도록하자.


우리는 초기화를 하기위해서 생성자를 사용한다고 했었다.

그러나 초기화를 생성자로만 할 수 있는 것은 아니다.

자바 9장 객체와 클래스-디폴트 초기화 부분을 보자.


아직 초기화에 대해 모두 언급한게 아니므로 총 2가지의 초기화 방법을 볼것이다.

하나는 일반적인 초기화이고 다른 하나는 초기화 블럭이다.


초기화


public class Square {
int x;
int y;
boolean b;
}


저번에 이렇게 두면 각각의 필드들이 0이나 null로 초기화 된다고 하였다.

그러면 0말고 다른걸 초기화하는데 생성자없이 가능할까? 결론부터 말하면 가능하다.


public class Square {
int x = 1;
int y = 2;
boolean b = true;
}


값을 직접적으로 붙혀주는 것이다.

이러면 이 인스턴스를 만들면 자동적으로 위의 값으로 초기화가 된다.

그러나 이방식은 하나의 문제점이 있는데 문법상 한줄짜리 구문으로만 초기화 할 수 있다.

예를 들면 x = 10+5; x += 7; 같은 두줄짜리로는 초기화 할 수가 없다.

이 말에는 초기화에 로직을 사용할 수는 없다. 그럴 경우에 일반적으로 과거에서는 생성자를 사용해야만 했다.

그러나 후에 추가된 새로운 방법이 있다.

바로 초기화 블럭이다.


초기화 블럭


public class Square {
int x;
int y;
boolean b = true;

{
x = Math.abs(-10);
x += 10;
y = 7;
b = !true;
}
}


초기화 블럭은 마무 구문 없이 대괄호를 사용하면된다.

이 구문을 초기화 블럭이라고 부른다.

이는 생성자를 호출하면 생성자가 호출되기 직전에 초기화 블럭이 호출된다.


이제 초기화를 사용할때 로직을 사용할 수 있다.

물론 화면 출력 등도 할 수 있다.


public class Square {
int x;
int y;
boolean b = true;

{
System.out.println("초기화 블럭 호출");
}

public Square() {
System.out.println("생성자 호출");
}
}

public class Main {
public static void main(String[] args) {
Square s = new Square();
}
}


한번 main을 실행해보자. 클래스 생성자가 호출되면서 초기화 구문역시 실행된다.


static 초기화 블럭


자바 12장에서 static을 배웠는데 static변수들 역시 초기화 블럭을 사용할 수 있다.

아래는 그 예제이다.


public class Circle {
static float PI;
int r;

static {
PI = 3.14f;
}
}


static 초기화를 사용하면 맨처음 static을 부르는상황이 오면 자동으로 초기화된다.

static 초기화 블럭을 사용하더라도 일반 초기화블럭을 사용하는것 역시 가능하다.

static은 단 한번만 호출된다는 차이점이 있다.

'Programming > Java' 카테고리의 다른 글

[Java-16]상속(Inheritance)  (0) 2017.10.24
[Java-15]접근 제한자  (0) 2017.10.22
[Java-13]package와 import  (0) 2017.10.21
[Java-12]static  (0) 2017.10.05
[Java-11]오버로딩(feat.디폴트 생성자)  (0) 2017.10.04

+ Recent posts