반응형

[Oracle Java Tutorial을 읽고 순서에 의해 정리한 후 본인의 경험과 이해를 바탕으로 작성된 글임을 밝힌다.]

[Java Tutorial, 자바 프로그래밍 기초 배우기, Java Programming, 자바 튜토리얼]

필드 초기화 (Initializing Fields)

필드를 선언할 때 초기값을 설정할 수 있는 것은 이미 알고 있을 것이다.

      public class TestClass {

           public static int a = 10; //10으로 초기화

           private Boolean b = false; //false로 초기화

      }

단 한 줄에 선언 및 초기화를 할 수 있고 잘 작동한다. 그러나 한 줄 선언과 초기화는 너무 간단해서 제약이 있다. 에러 핸들링이나 for순환문을 이용한 복합 배열 선언 시엔 부적절한 것이다. 인스턴스 변수는 오류 처리나 다른 로직을 사용할 수 있는 생성자에서 초기화될 수 있다. 클래스 변수를 위한 같은 기능을 자바 프로그래밍 언어에서 제공하는데 바로 static 초기화 블록이다.

비록 클래스 시작부분에 필드를 초기화하는 게 일반적이긴 하지만 꼭 그럴 필요는 없다. 그냥 필드가 사용하기 전에만 선언과 초기화를 하면 된다.

static초기화 블록(static Initialization Blocks)

static초기화 블록은 중괄호 { }를 사용한다. 그리고 중괄호 앞에 “static:” 키워드를 두면 된다.

     static {

           초기화 할 코드를 여기에 구현

     }

클래스는 static초기화 구문을 얼마든지 가질 수 있다. 그리고 클래스 어디서든 구현할 수 있다. 런타임 시스템은 static 초기화 블록이 나타나는 순서대로 호출되는 것을 보장한다.

static블록의 대안으로 전용 static메서드를 사용할 수 있다.

     class Test {

           public static Type myVar = initClassVar();

           private static Type initClassVar() {

                ////초기화할 코드를 여기에 구현

          }

      }

이 방식의 장점은 클래스 변수를 다시 초기화하고 싶을 때 재사용할 수 있다는 것이다.

인스턴스 멤버 초기화 (Initializing Instance Members)

보통은 인스턴스 변수는 생성자 안에서 초기화 한다. 생성자에서 초기화하는 방법을 대신할 2가지 방법이 있다. 초기화 블록과 final메서드이다.

 

 

인스턴스 변수를 위한 초기화 블록(Initializer blocks)static초기화 블록과 비슷하다. 물론 static 키워드는 없다.

{

//초기화 할 코드를 넣는다

}

자바 컴파일러는 모든 생성자에 초기화 블록을 복사한다. 따라서 이 처리방법은 생성자들 간에 코드 블록을 공유하기 위해 사용되어진다.

Final 메서드는 서브클래스에서 오버라이드 될 수 없다. 이 부분은 인터페이스와 상속에서 더 자세히 설명하겠다. 아래는 final메서드 예제이다.

      class Test {

           private Type myVar = initInstVar();

          protected final Type initI:nstVar() {

               //초기화 코드 작성

         }

     }

만약 서브클래스가 초기화 메서드를 재사용하기를 원할 때 특히 유용하다. 메서드가 final인 이유는 인스턴스 초기화 중에 비final 메서드 호출하면 문제가 발생할 수 있기 때문이다.

반응형