오늘 ONEUL
오늘의 개발
오늘 ONEUL
전체 방문자
오늘
어제
  • 오늘의 개발 (248)
    • 📝 TIL (121)
    • 💡 Projects (6)
      • 드로잉 게임 [눈치 코치 캐치!] (4)
      • 익명고민상담소 [대나무숲] (2)
    • 🌎 Web (47)
      • Spring (3)
      • Java (14)
      • JavaScript (16)
      • CSS (10)
      • HTML (4)
    • 📚 Database (7)
    • 👾 Trouble Shooting (3)
    • 📊 Algorithm&SQL (39)
    • 😺 Git (1)
    • 📖 Books (7)
      • 자바 객체 지향의 원리와 이해 (7)
    • 📁 ETC (2)
    • 되돌아보기 (15)

블로그 메뉴

  • 😺 Github
  • 🍀 NAVER Blog

인기 글

최근 댓글

최근 글

태그

  • 자바
  • 자바스크립트
  • 항해99
  • Java
  • Til
  • JavaScript
  • 알고리즘
  • 프로그래머스
  • Algorithm
  • MySQL

티스토리

hELLO · Designed By 정상우.
오늘 ONEUL

오늘의 개발

[Books] Java에 초기화 블록이 있다는 사실 아셨나요?
📖 Books/자바 객체 지향의 원리와 이해

[Books] Java에 초기화 블록이 있다는 사실 아셨나요?

2023. 2. 28. 23:59

 

초기화블록? 그게 뭔데? 🤦‍♀️

초기화 블록(initialization block)이란?
클래스 필드의 초기화만을 담당하는 중괄호{}로 둘러싸인 블록을 의미한다.
  • 클래스 변수, 인스턴스 변수의 초기화가 복잡하거나 공통된 부분이 많을 경우 초기화 블록을 사용하면 코드를 간결하게 할 수 있다.
  • 초기화 블록은 생성자보다 먼저 호출되며, static 키워드의 유무에 따라 다음과 같이 구분한다.
    • Static Block(클래스 초기화 블록)
    • Instance Block(인스턴스 초기화 블록)

 

 

Static Block(클래스 초기화 블록)

  • 클래스가 처음으로 메모리에 로딩될 때 단 한 번만 실행
  • 생성자나 인스턴스 초기화 블록으로는 수행할 수 없는 클래스 변수의 초기화를 수행
class InitBlock {

    static int classVar; // 클래스 변수
    int instanceVar;     // 인스턴스 변수

    static { // 클래스 초기화 블록을 이용한 초기화
        classVar = 10;
    }

}

public class Member {

    public static void main(String[] args) {
        System.out.println(InitBlock.classVar); // 클래스 변수에 접근
    }

}

 

 

Instance Block(인스턴스 초기화 블록)

  • 단순히 중괄호{} 만을 사용하여 정의
  • 생성자와 마찬가지로 인스턴스가 생성될 때마다 실행
  • 그러나 생성자보다 먼저 실행!

 

 

생성자 vs 인스턴스 초기화 블록

  • 사실 차이는 거의 없다..!
  • 따라서 인스턴스 블록은 잘 사용되지 않는다.

 

 

그럼 도대체 언제 사용하나요?

여러 개의 생성자가 있으면 모든 생성자에서 공통으로 수행되어야 할 코드를 인스턴스 초기화 블록에 포함하여 코드의 중복을 막을 수 있다.

class Car {

    private String modelName;
    private int modelYear;
    private String color;
    private int maxSpeed;
    private int currentSpeed;

    { // 인스턴스 초기화 블록
        this.currentSpeed = 0;
    }

    Car() {}

    Car(String modelName, int modelYear, String color, int maxSpeed) {
        this.modelName = modelName;
        this.modelYear = modelYear;
        this.color = color;
        this.maxSpeed = maxSpeed;
    }

    public int getSpeed() {
        return currentSpeed;
    }

}

public class Member {

    public static void main(String[] args) {
        Car myCar = new Car();                // 인스턴스 생성
        System.out.println(myCar.getSpeed()); // 인스턴스 메소드의 호출
    }

}

 

 

 

 

※ 이 내용은 책 [스프링 입문을 위한 자바 객체 지향의 원리와 이해]를 보고 정리한 내용입니다.

 

저작자표시 비영리 변경금지

'📖 Books > 자바 객체 지향의 원리와 이해' 카테고리의 다른 글

[Books] 어댑터요? 돼지코 같은건가? 🐷  (0) 2023.03.06
[Books] 하나의 객체는 하나의 책임만 가져야 한다?  (0) 2023.03.03
[Books] 클래스와 객체의 관계가 붕어빵과 붕어빵 틀이 아니라고?!  (0) 2023.02.27
[Books] 전역변수 사용을 왜 지양해야 할까?  (0) 2023.02.25
[Books] 자바는 어떻게 개발자에 대한 사랑을 실천했을까?  (2) 2023.02.24
    오늘 ONEUL
    오늘 ONEUL
    Backend Engineer ㅣ 어제보다 나은 오늘, 재밌는 건 오늘부터!

    티스토리툴바