페이지

2015. 1. 9.

[JAVA] Day5.변수의 초기화

6.1 변수의 초기화

 - 변수를 선언하고 처음으로 값을 저장하는 것
 - 멤버변수(인스턴스변수, 클래스변수)와 배열은 각 타입의 기본값으로 자동 초기화 되므로 초기화를 생략할 수 있다.
 - 지역변수는 사용전에 꼭!! 초기화를 해주어야 한다.



6.2 멤버변수의 초기화


멤버변수(인스턴스변수, 클래스변수)의 초기화 방법

1. 명시적 초기화 (예 : int a = 10;)
2. 생성자 (예 : Car(){})
3. 초기화 블록(클래스 초기화 블록, 인스턴스 초기화 블록) (예 : static{} 또는 {})

같이 3개를 모두 썼을때 명시적초기화, 초기화 블록, 생성자 순으로 실행되기 때문에 마지막인 생성자에 있는 내용만 쓰임

1. 명시적 초기화 : int a = 10; 클래스 변수를 초기화 할 때 주로 사용
2. 초기화 블록 : static {} 잘 사용 안 함(모르는 사람도 많음...)
3. 생성자 : 인스턴스 변수를 초기화 할 때 주로 사용




6.3 초기화 블록(initialization block)

초기화 블록에서 가능한 모든것들은 생성자로 가능하다
따라서 사용빈도가 낮다.... 레알 진짜 아무도 안씀....
잊어도 무방함...



클래스 초기화 블록

 - 클래스변수의 복잡한 초기화에 사용되며 클래스가 로딩될 때 실행 된다.

class Main
{
    static int x=100;
    static
    {//클래스 초기화 블록
        x=200;
        System.out.println("초기화블록!");
        //잘 사용하지 않는다. 초기부터 int x = 200;하면 되기 때문에...
    }
    public static void main(String[] args)
    {
        System.out.println(x);
    }
}




인스턴스 초기화 블록

 - 생성자에서 공통적으로 수행되는 작업에 사용되며 인스턴스가 생성될 때 마다(생성자보다 먼저) 실행된다.

class Main
{
    static
    {
        System.out.println("인스턴스 초기화 블록");
    }
    Main()
    {
        System.out.println("생성자");
    }
    public static void main(String[] args)
    {
        Main m1 = new Main();
        Main m2 = new Main();
        //레알 아무도 안쓴다.....
    }
}






API를 보고 constuctors를 보고 생성자를 어떤것을 제공하는지 확인하여 사용한다.








6.4 멤버변수(클래스변수, 인스턴스변수)의 초기화 시기와 순서


클래스변수 초기화 시전

 - 클래스가 처음 로딩될 때 단 한번

인스턴스 변수 초기화 시점

 - 인스턴스가 생성될 때 마다







초기화 예제

class Product
{
    static int count = 0;    //생성된 인스턴스의 수를 저장하기 위한 변수
    int serialNo;        //인스턴스 고유의 번호
    {//초기화 블록!!
    //생성자로 충분히 대체 가능...
    //실제로 시리얼 넘버 만들때 이렇게 함...
        ++count;
        serialNo = count;
    }
}
class ProductTest
{
    public static void main(String[] args)
    {
        Product p1 = new Product();
        Product p2 = new Product();
        Product p3 = new Product();

        System.out.println("p1의 제품번호(serialNo) : " + p1.serialNo);
        System.out.println("p2의 제품번호(serialNo) : " + p2.serialNo);
        System.out.println("p3의 제품번호(serialNo) : " + p3.serialNo);
        System.out.println("제품의 수는 모두 "+ Product.count +"개 입니다.");
    }
}