Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
Tags
- 부모 생성자
- 국비지원
- super 생성자
- 상속
- Calendar Class
- 예외던지기
- 독학
- Java
- userDefineException
- do~while문
- Date Class
- 프로그래머스
- 비전공자
- 캐스팅연산자
- 추상화
- 알고리즘
- 생성자
- 예외처리
- 코딩
- AoutoBoxing
- 클래스의구조
- exception
- 취준생
- for문
- 개발
- 자바
- 사용자 정의 예외처리
- 개발자
- 가위바위보프로그램
- 백앤드
Archives
- Today
- Total
유난스런 개발 기록
[JAVA] Day-16 _ 초기화 블럭 (initialization block) 본문
day-16
초기화 블럭 (initialization block)
초기화 블럭 (initialization block) 이란?
- "클래스 초기화 블럭" 과 "인스턴스 초기화 블럭" 두 가지가 있다.
- 인스턴스 초기화 블럭은 클래스 안에 {} 을 넣어주면 된다. 주로 공통으로 실행할 코드를 넣어준다.
- 클래스 초기화 블럭은 static {} 을 해주면 된다. 주로 환경설정시에 사용한다.
- 코드의 재사용성을 높여주고 중복을 제거하여 유지 및 보수에 용이하다는 장점이 있다.
초기화의 시점
- 클래스 변수 : 클래스가 처음 로딩 될 때 한번만
- 인스턴스 변수 : 인스턴스가 생성될 때마다
부모 클래스
package my.day16.c.block;
public class Parent {
public Parent() {
System.out.println(">> 부모클래스인 Parent 클래스의 기본생성자가 호출됨 <<");
}
}
자식 클래스
package my.day16.c.block;
public class Child extends Parent {
String name = "홍길동"; // 맴버변수 초기화 (안스턴스 변수)
static int count; // 멤버변수의 초기화 (static 변수)
static {
// static 초기화 블럭은 인스턴스(객체)를 생성하기 전에 먼저 호출되어지며
// !! 중요한 것은 오로지 1번만 호출된다는 것이다. !!
// 주로 static 초기화 블럭은 환경설정시 사용된다.
System.out.println("*** Child 클래스의 'static 초기화 블럭' 호출됨 ***");
count++;
// name = "똘똘이"; // 오류!!
// static 초기화 블럭에서 오로지 static 변수만 들어올 수 있고,
// 인스턴스 변수는 들어올 수 없다.!!!
}
{
System.out.println("### Child 클래스의 instance(인스턴스) 초기화 블럭 호출됨. ###");
name = "서강준";
}
// == 생성자 == //
public Child() {
super();
System.out.println("=== 자식클래스인 Child 클래스의 기본생성자 호출됨 ===");
name = "한지민";
}
}
메인 클래스
package my.day16.c.block;
public class MainBlock {
public static void main(String[] args) {
Child child_1 = new Child();
/*
*** Child 클래스의 'static 초기화 블럭' 호출됨 ***
>> 부모클래스인 Parent 클래스의 기본생성자가 호출됨 <<
### Child 클래스의 instance(인스턴스) 초기화 블럭 호출됨. ###
=== 자식클래스인 Child 클래스의 기본생성자 호출됨 ===
*/
System.out.println("child_1.name => " + child_1.name);
// child_1.name => 한지민
System.out.println("Child.count => " + Child.count);
// Child.count => 1
System.out.println("\n=========================\n");
Child child_2 = new Child();
/*
>> 부모클래스인 Parent 클래스의 기본생성자가 호출됨 <<
### Child 클래스의 instance(인스턴스) 초기화 블럭 호출됨. ###
=== 자식클래스인 Child 클래스의 기본생성자 호출됨 ===
*/
child_2.name = "전지현";
System.out.println("child_2.name => " + child_2.name);
// child_1.name => 전지현
System.out.println("Child.count => " + Child.count);
// Child.count => 1
}
}
클래스 초기화 블록과 인스턴스 초기화 블록 각각의 개념은 알겠으나
실제 실습에서 코드를 보면 헷갈리는 부분들이 있다.
특히나 하나의 클래스로만 코드를 짠 예시를 보면 쉽게 이해가 되지만
위의 예시와 같은 여러개의 클래스를 이용한 코드를 보면 초기화 과정이 명확하게 이해되지 않는다.
주말 동안에 다시 개념 정리를 한 후에
직접 코드를 쳐보며 그 원리를 이해할 시간이 필요할 거 같다.
'개념정리 > JAVA' 카테고리의 다른 글
[JAVA] Day-16 _ final 키워드 (0) | 2023.02.06 |
---|---|
[JAVA] Day-16 _ 접근 제어자 (access modifier) (0) | 2023.02.06 |
[JAVA] Day-16 _ super() 생성자 (super constructor) (0) | 2023.02.01 |
[JAVA] Day-15 _ 다형성 (Polymorphism) & 추상 클래스 (Abstract Class) (0) | 2023.01.29 |
[JAVA] Day-14 _ 상속성 (Inheritance) (0) | 2023.01.29 |