[JAVA] 명시적 초기화(explicit initialization)와 초기화 블럭(initialization block) [변수를 초기화하는 방법]

2022. 9. 7. 02:06·◎ Java/Java☕
728x90
반응형


 

[JAVA] 변수의 초기화란? [변수를 선언하고 처음으로 값을 저장하는 것]

1. 변수의 초기화란? 변수를 선언하고 처음으로 값을 저장하는 것을 '변수의 초기화'라고 한다. 변수의 초기화는 경우에 따라 필수적이기도, 선택이기도 하지만 가능하면 선언과 동시에 적절한

yermi.tistory.com


1. 변수를 초기화하는 방법

변수를 초기화 하는 방법에는 생성자 외에도 명시적 초기화, 초기화 블럭이 있다.

2. 명시적 초기화(explicit initalization)

변수를 선언과 동시에 초기화 하는 것을 명시적 초기화라고 한다.
명시적 초기화는 간단하고 명료하지만 복잡한 초기화에는 적합하지 않다.

 

Class Car {
    int door = 4;            // 기본형 변수의 초기화
    Engine e = new Engine(); // 참조형 변수의 초기화
}

3. 초기화 블럭(initalization block)

초기화 블럭에는 '클래스 초기화 블럭'과 '인스턴스 초기화 블럭'이 있다.
클래스 초기화 블럭 : 클래스변수의 복잡한 초기화에 사용된다.
인스턴스 초기화 블럭 : 인스턴스변수의 복잡한 초기화에 사용된다.

 

인스턴스 초기화 블럭은 클래스 내에 블럭 {}을 만들고 그 안에 코드를 작성하기만 하면 된다.
클래스 초기화 블럭은 인스턴스 초기화 블럭 앞에 static을 덧붙이면 된다.
Class InitBlock {
    static { /* 클래스 초기화 블럭 */ }
    { /* 인스턴스 초기화 블럭 */ }
} // 초기화 블럭 내에서는 메서드처럼 조건문, 반복문, 예외처리구문이 가능하다.

 

클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될 때 한번만 수행되며, 인스턴스 초기화 블럭은 생성자와 같이 인스턴스를 생성할 때 마다 수행된다. 참고로, 생성자 보다 인스턴스 초기화 블럭이 먼저 수행된다.

초기화 블럭은 모든 생성자에서 공통으로 수행되어야 하는 코드에 활용하면 좋다.
// 인스턴스 초기화 블럭
{
    count++;
    serialNo = count;
}

// 생성자
Car() {
    color = "White";
    gearType = "Auto";
}

Car(String color, String gearType) {
    this.color = color;
    this.gearType = gearType;
}

- 클래스 초기화 블럭 사용 예시

 

[JAVA] 비초기화 상수(blank constant) 생성하기 [static final 초기화 시점 바꾸기]

1. 비초기화 상수란? static final로 변수를 전역상수로 사용하고 싶으나, 상황에 따라 입력 값이 달라야 할 경우에 사용한다. ex) 운영체제에 따라 값이 달라야 할 경우 * 상수는 대문자에 스네이크

yermi.tistory.com

 

참고문헌 : 남궁성(2016), Java의 정석, 도우출판


728x90
반응형
'◎ Java/Java☕' 카테고리의 다른 글
  • [JAVA] 상속(inheritance)이란? [상속의 개념, 조상 클래스와 자손 클래스]
  • [JAVA] 멤버변수의 초기화 시기와 순서 [클래스변수와 인스턴스변수의 초기화 순서]
  • [JAVA] 변수의 초기화란? [변수를 선언하고 처음으로 값을 저장하는 것]
  • [JAVA] this()와 this의 차이 [클래스 내에서 자신을 부르는 방법]
예르미(yermi)
예르미(yermi)
끊임없이 제 자신을 계발하는 개발자입니다👨🏻‍💻
  • 예르미(yermi)
    예르미의 코딩노트
    예르미(yermi)
  • 전체
    오늘
    어제
    • 분류 전체보기 (1053)
      • ◎ Java (133)
        • Java☕ (93)
        • JSP📋 (26)
        • Applet🧳 (6)
        • Interview👨🏻‍🏫 (8)
      • ◎ JavaScript (48)
        • JavaScript🦎 (25)
        • jQuery🌊 (8)
        • React🌐 (2)
        • Vue.js🔰 (6)
        • Node.js🫒 (3)
        • Google App Script🐑 (4)
      • ◎ HTML5+CSS3 (17)
        • HTML5📝 (8)
        • CSS3🎨 (9)
      • ──────────── (0)
      • ▣ Framework (67)
        • Spring🍃 (36)
        • Spring Boot🍀 (12)
        • Bootstrap💜 (3)
        • Selenium🌕 (6)
        • MyBatis🐣 (10)
      • ▣ Tools (47)
        • API🎯 (18)
        • Library🎲 (15)
        • JitPack🚀 (3)
        • Jenkins👨🏻 (7)
        • Thymeleaf🌿 (4)
      • ▣ Server (30)
        • Apache Tomcat🐱 (14)
        • Apache HTTP Server🛡️ (1)
        • Nginx🧶 (7)
        • OracleXE💿 (4)
        • VisualSVN📡 (4)
      • ▣ Infra & DevOps (36)
        • LGTM Stack🔭 (5)
        • Kafka🐦‍🔥 (3)
        • Kubernetes🚢 (10)
        • KubeCon Japan 2026⚓ (18)
      • ▣ OS : 운영체제 (18)
        • cmd : 명령프롬프트💻 (10)
        • Linux🐧 (8)
      • ▣ SQL : Database (56)
        • Oracle SQL🏮 (26)
        • PL SQL💾 (9)
        • MySQL🐬 (6)
        • MariaDB🦦 (6)
        • H2 Database🔠 (3)
        • SQL 실전문제🐌 (6)
      • ────────── (0)
      • ◈ Human Project (86)
        • Mini : Library Service📚 (15)
        • 화면 설계 [HTML]🐯 (10)
        • 서버 프로그램 구현🦁 (15)
        • Team : 여수어때🛫 (19)
        • Custom : Student🏫 (9)
        • Custom : Board📖 (18)
      • ◈ Yermi Project (57)
        • 조사모아(Josa-moa)📬 (5)
        • Riddle-Game🧩 (6)
        • 맛있을 지도🍚 (2)
        • 어디 가! 박대리!🙋🏻‍♂️ (5)
        • 조크베어🐻‍❄️ (4)
        • Looks Like Thirty🦉 (2)
        • Toy Project💎 (12)
        • 오픈소스 파헤치기🪐 (5)
        • 오늘가챠🃏 (16)
      • ◈ Refactoring (15)
        • Mini : Library Service📚 (8)
        • 서버 프로그램 구현🦁 (1)
        • Team : 여수어때🛫 (0)
        • 쿼리 튜닝일지🔧 (6)
      • ◈ Coding Test (80)
        • 백준(BOJ)👨🏻‍💻 (71)
        • 프로그래머스😎 (2)
        • 코드트리🌳 (7)
      • ◈ Study (130)
        • 기초튼튼 개발지식🥔 (25)
        • HTTP 웹 지식💡 (4)
        • 클린코드(Clean Code)🩺 (1)
        • 디자인패턴(GoF)🥞 (12)
        • 알고리즘(Algorithm)🎡 (14)
        • 다이어그램(Diagram)📈 (4)
        • 파이썬(Python)🐍 (16)
        • 에러노트(Error Note)🧱 (35)
        • 웹 보안(Web Security)🔐 (11)
        • 인공지능 AI🛸 (8)
      • ◈ 공부모임 (60)
        • 혼공학습단⏰ (18)
        • 코드트리 챌린지👊🏻 (2)
        • 개발도서 100독👟 (8)
        • 나는 리뷰어다🌾 (20)
        • 국가기술자격 서포터즈🌻 (12)
      • ◈ 자격증 공부 (48)
        • 정보처리기사🔱 (16)
        • 정보처리산업기사🔅 (9)
        • 정보보안기사⚜️ (11)
        • 컴퓨터활용능력 1급📼 (12)
      • ─────────── (0)
      • ◐ 기타 (124)
        • 알아두면 좋은 팁(tip)✨ (46)
        • 개발자의 일상🎈 (55)
        • 개발도서 서평🔍 (10)
        • 개발관련 세미나🎤 (2)
        • 블로그 꾸미기🎀 (9)
        • 사도신경 프로젝트🎚️ (2)
  • 인기 글

  • 최근 댓글

  • 반응형
    250x250
  • 태그

    자바스크립트
    프로그래밍
    Java
    백준
    Oracle
    꿀팁
    Error Note
    javascript
    코딩 테스트
    jsp
    spring
    백준 티어
    CSS
    spring boot
    코딩
    SQL
    Database
    Project
    BOJ
    일상
  • hELLO· Designed By정상우.v4.10.3
예르미(yermi)
[JAVA] 명시적 초기화(explicit initialization)와 초기화 블럭(initialization block) [변수를 초기화하는 방법]
상단으로

티스토리툴바