ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 변수의 초기화와 멤버변수의 초기화
    공부/Java 2024. 1. 8. 22:41

    변수의 초기화와 멤버변수의 초기화

     

    변수의 초기화

    변수를 선언하고 처음으로 값을 저장하는 것

     

    멤버변수는 초기화를 하지 않아도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화된다.

    각 타입의 기본값(default value) 자세히

     

    각 타입의 기본값(default value)

    각 타입의 기본값 (default value) 자료형 기본값 boolean false char '\u0000' byte, short, int 0 long 0L float 0.0f double 0.0d 또는 0.0 참조형 null

    a-newdream.tistory.com

    하지만 지역변수는 사용 전 반드시 초기화를 해야한다.

     

    예시

    class InitTest {
    	int x;
    	int y = x;
        
        void method1() {
        	int i;
            int j = i;
    	}
    }

     

    위 코드에서 x, y는 인스턴스 변수이고, i, j는 지역변수다.

    인스턴스 변수 x는 초기화를 하지 않아도 자동적으로 int형의 기본값인 0으로 초기화되므로, int y = x;가 가능하다.

    method1()의 지역변수 i는 자동적으로 초기화되지 않는다.

    초기화되지 않은 상태로 변수 j를 초기화 하는데 사용하려 하면, 컴파일에서 에러가 발생한다.

     

    멤버변수(클래스 변수와 인스턴스 변수)와 배열의 초기화는 선택이지만, 지역변수의 초기화는 필수이다.

     

     

    멤버변수의 초기화

    멤버변수는 각 타입의 기본값으로 자동 초기화 된다.

    그 다음 명시적 초기화, 초기화 블럭, 생성자의 순서로 초기화가 된다.

    또한 클래스 변수(cv)가 인스턴스 변수(iv)보다 먼저 초기화 된다.

    초기화 순서
    1. 클래스 변수(cv) 초기화 → 인스턴스 변수(iv) 초기화
    2. 자동 초기화 → 명시적 초기화(간단) → 초기화 블럭, 생성자(복잡)

     

    명시적 초기화 (explicit intialization)

    변수를 선언과 동시에 초기화하는 것

    대입연산자(=)를 사용한다.

    가장 기본적이면서 간단한 초기화 방법이다.

     

    예시

    class Car {
    	int door = 4;
    	Engine e = new Engine();
    }

     

    위 코드에서 door는 기본형 변수의 초기화, e는 참조형 변수의 초기화다.

    현재 e는 자리만 있고, 값은 없는 상태다(null)

    객체를 만들어 넣어줘야 명시적 초기화가 최종적으로 완료된다고 할 수 있다.

     

     

    초기화 블럭 (initialization block)

    클래스 변수 초기화 시점 : 클래스가 처음 로딩될 때 한 번

    인스턴스 변수 초기화 시점 : 인스턴스가 생성될 때 마다

     

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

     

    초기화 블럭을 작성하려면, 인스턴스 초기화 블럭은 단순히 클래스 내에 블럭{}을 만들고 그 안에 코드를 작성하면 된다.

    클래스 초기화 블럭은 인스턴스 초기화 블럭 앞에 static을 붙이기만 하면 된다.

    '공부 > Java' 카테고리의 다른 글

    싱글톤(Singleton)  (0) 2024.01.12
    각 타입의 기본값(default value)  (0) 2024.01.08
    객체 자신을 가리키는 참조변수 this  (4) 2024.01.04
    생성자 this()  (4) 2024.01.04
    오버로딩 (overloading)  (0) 2023.12.29
Designed by Tistory.