초기화 블록

(initialization block)



오픈소스등 이런저런 코드들을 분석하다보면 꽤나 참신한 코드들을 볼 수 있습니다.


특히 이 언어 저 언어를 사용하는 저로써는 한가지에만 파지를 않다보니 한가지 언어에 대해서 지식이 얕은 편입니다. ㅠㅠ


이번시간에는 제가 최근 봤던 코드 중 초기화 블록(initialization block)에 대해서 설명을 해 볼까 합니다.

(학부시절에도 배웠던것같은데 졸업한지 오랜지라 가물가물하네요.)



소스


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
    class
*/
public class ClassName {
 
    static {
        //class initialization block
    }
 
    {
        //instance initialization block
    }
 
    public static void main(String[] args) {
        //main source
        System.out.println("안녕 세상아!");
    }
}
cs


소스를 살펴보다보면 한번쯤은 이런 소스를 보신적이 있을겁니다.


Class 내부에 있는 static 블록이나, 그냥 블록만 있는 경우.


저의 경우에는 분명 배운거같은데(학부때라던가), 그냥 봤을땐 굉장히 이질감이 느껴지더라구요.

(java이외 다른 언어도 사용이 가능한지는 파악해봐야겠네요.)


상단에 보이는 형태는 전부 초기화 블록(initialization block)이라고 합니다.


초기화 블록은 복잡한 초기화를 할 때 사용하며, 생성자보다 우선 실행됩니다.

(따라서 main 함수 상단에 초기화 블록을 생성했다면 main함수 실행 이전에 실행됩니다.)



초기화 블록은 static {}(블록) 형태와, {}(블록) 형태로 나눠집니다.



* 클래스 초기화 블록(class initialization block)


static {


}


위와 같은 형식을 클래스 초기화 블록(class initialization block)이라고 하며,


클래스 변수의 초기화에 사용이 되며


클래스가 처음 실행될 때 실행이 됩니다. (이후 인스턴스 생성시에는 클래스 초기화는 실행되지 않습니다.)



* 인스턴스 초기화 블록(instance initialization block)


{


}


위와 같은 형식을 인스턴스 초기화 블록(instance initialization block)이라고 하며,


클래스 초기화처럼 인스턴스 변수의 초기화에 사용이 되며


인스턴스가 생성될 때 마다 실행됩니다.




참고


자바에서 static 블록은 무엇을 의미하나요?

(https://hashcode.co.kr/questions/654/%EC%9E%90%EB%B0%94%EC%97%90%EC%84%9C-static-%EB%B8%94%EB%A1%9D%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%84-%EC%9D%98%EB%AF%B8%ED%95%98%EB%82%98%EC%9A%94)



'컴퓨터 이야기 > Java' 카테고리의 다른 글

[자료구조]Java로 Stack 구현해보기 (List 활용)  (0) 2020.06.18
Open JDK 설치  (0) 2019.01.13
#2 자바 프로그래밍의 기초  (0) 2017.02.15
#1 Hello World! [java]  (0) 2017.02.02
# Java와 Eclipse 설치하기!  (0) 2017.02.01

+ Recent posts