초기화 블럭

2021. 1. 8. 11:05·자바/기본적인 개념

1. 클래스 초기화 블럭

- 클래스 변수의 복잡한 초기화에 사용된다.

 

- 보통 "static { ... }" 형식으로 사용된다.

 

- 클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될 때 한번만 수행된다.

 

- 앞서 배운 내용이지만, 클래스 초기화이므로 인스턴스 변수를 초기화하지 못한다.

 

 

 

2. 인스턴스 초기화 블럭

- 인스턴스 변수의 복잡한 초기화에 사용된다.

 

- 보통 "{ ... }" 형식으로 사용된다.

 

- 인스턴스 초기화 블럭은 생성자와 같이 인스턴스를 생성할 때 마다 수행된다.

 

- 인스턴스 변수의 초기화는 주로 생성자를 사용하고, 인스턴스 초기화 블럭은 모든 생성자에서 공통으로

수행돼야 하는 코드를 넣는데 사용한다.

 

 

- 아래의 예제를 통해 이해하자.

 

( 위 예제에서 두 생성자는 "this.x++"을 중복되어 사용되고 있다. )

( 이럴 경우 인스턴스 생성자를 만들어서 아래의 코드처럼 수행한다. )

 

( 이처럼 코드의 중복을 제거하는 것은 코드의 신뢰성을 높여주고, 오류의 발생 가능성을 줄여

준다는 장점이 있다. )

 

 

 

 

3. 예제(1) - 초기화 블럭이 실행되는 순서

 

 

 

 

4. 예제(2) - 제품 시리얼 번호 만들어보기.

 

 

 

 

5. 예제(3) - 서로 다른 문서 이름 작성하기.

 

 

 

 

6. 예제(4) - 전체 순서 흐름 파악하기

( 첫 번째로, 클래스 초기화(기본값(1) -> 명시적 초기화(2) -> 클래스 초기화 블럭(3)) )

( 두 번째로, 인스턴스 초기화(기본값(4) -> 명시적 초기화(5) -> 인스턴스 초기화 블럭(6) -> 생성자(7)) )

 

(여기서 주의할 점은 클래스 초기화 과정에서 명시적 초기화를 할 때 iv는 초기화 되지 않는다.)

 

1. cv=0

2. cv=1

3. cv=2

4. cv=2, iv=0

5. cv=2, iv=1

6. cv=2, iv=2

7. cv=2, iv=3

 

( 이때, cv=0 또는 iv=0은 변수 생성 시점이다. )

 

 

 

7. JVM 마다 클래스 로딩 시키는 상황이 다르다.

(1) 클래스가 필요할 때 바로 메모리에 로딩하도록 설계한다.

( 클래스가 필요한 시점은 클래스 맴버를 사용하거나 인스턴스를 생성할 때이다. )

 

(2) 실행 효율을 높이기 위해서 사용될 클래스들을 프로그램이 시작될 때 미리 로딩하도록 설계한다.

'자바 > 기본적인 개념' 카테고리의 다른 글

오버라이딩  (0) 2021.01.10
상속  (0) 2021.01.08
생성자  (0) 2021.01.07
가변 인자(varargs)  (0) 2021.01.07
오버 로딩  (0) 2021.01.07
'자바/기본적인 개념' 카테고리의 다른 글
  • 오버라이딩
  • 상속
  • 생성자
  • 가변 인자(varargs)
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      outputstream
      소켓 프로그래밍
      문자 기반 스트림
      TCP 소켓 프로그래밍
      코딩테스트
      file
      코드트리
      snail
      람다식
      자바 개념
      java.lang패키지
      중간연산
      코딩트리조별과제
      다형성
      알고스팟
      역직렬화
      map()
      Collections Framework
      불안정 정렬
      java.time 패키지
      안드로이드 스튜디오
      유용한 클래스
      ServerSocket
      스트림
      serializable
      제자리 정렬
      Arrays
      선택 정렬
      InputStream
      안정 정렬
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    초기화 블럭
    상단으로

    티스토리툴바