ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바의 정석 Ex7_1 (클래스 초기화, 인스턴스 초기화)
    Java/자바의정석 2023. 2. 20. 14:24
    반응형
    package Chap07;
    
    class Tv {
        static
        {
            System.out.println("클래스 초기화");
        }
    
        {
            System.out.println("{인스턴스 }"); //인스턴스 초기화
        }
        
        boolean power; // 전원상태(on/off)
        int channel;   // 채널
    
        void power()       {   power = !power; }
        void channelUp()   {   ++channel;      }
        void channelDown() {   --channel;      }
    }
    
    class SmartTv extends Tv {
        boolean caption;
        void displayCaption(String text) {
            if (caption) {  
                System.out.println(text);
            }
        }
    }
    
    class Ex7_1 {
        public static void main(String args[]) {
            SmartTv stv = new SmartTv();
            stv.channel = 10;        
            stv.channelUp();      
            System.out.println(stv.channel);
            stv.displayCaption("Hello, World");
            stv.caption = true;    
            stv.displayCaption("Hello, World");
        }
    }

     

    ===================실행결과=========================

    클래스 초기화
    {인스턴스 }
    11
    Hello, World

     

    위의 코드를 실행한다면 보기와같은 실행결과가 도출되어나온다.

    클래스초기화, {인스턴스}는 호출한적이 없는데 어떻게 실행이 되었는가...?

     

     

    1.  초기화 블럭 (initialization block)

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

     

    인스턴스 초기화 블럭의 경우는 클래스 내부에 중괄호 {}를 입력한 뒤 중괄호 내부에 코드를 작성하는 경우이다.

    클래스 초기화 블럭의 경우는 인스턴스 초기화 블럭 앞에 static을 붙여준다면 클래스 초기화블럭이 된다.

     

    class Tv {
        static
        {
            System.out.println("클래스 초기화");
        }
    
        {
            System.out.println("{인스턴스 }"); //인스턴스 초기화
        }

     

    여기서 클래스 초기화 블럭은 클래스가 메모리에 처음 로딩될  한번만 수행되어진다.

    반면에 인스턴스 초기화 블럭은 생성자와 같이 인스턴스를 생성할 때 매번 수행된다.

    (인스턴스를 여러번 생성한다면 여러번 수행되어진다.)

    위의 코드에서는 

    SmartTv stv = new SmartTv();

    와 같이 stv참조변수로 SmartTV() 생성자를 이용하여 객체주소를 할당받은 경우  

    인스턴스 초기화 블럭이 실행되어진다.

     

    SmartTv stv1 = new SmartTv();

    stv1을 통해 다른 객체주소를 가진 참조변수를 선언한다면  '{인스턴스}' 해당부분이 다시 실행되어진다.

     

     

    반응형

    댓글

Designed by Tistory.