이 강의는 자바의 프로젝트를 어떻게 만드는지, 또한 빌드를 어떻게 하는지에 대한 강의를 진행하지 않는다.
그러나 자바의 기본적인, 그리고 자바에 필수적인 기능들도 분명 존재하고 이 블로그엔 그 작업에 필요한 포스팅도 함께 제공하고 있다.
그 정보를 확인하고 싶다면 여기를 참조하라. 양이 조금 되고 현재진행형으로 늘어나고 있으므로 페이지내의 찾기(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 |