[Java의 정석]Chapter6.객체지향 프로그래밍(38~41)

Hello_Wendy·2022년 4월 21일
0

자바의 정석

목록 보기
47/61
post-thumbnail

Chapter 6. 객체지향 프로그래밍

38. 변수의 초기화

  • 변수의 초기화 : 변수를 선언하고 처음으로 값을 저장하는 것
  • 필수적이기도 하고 선택적이기도 하지만, 가능하면 선언과 동시에 적절한 값으로 초기화 하는 것이 바람직
  • 멤버변수(클래스변수와 인스턴스 변수)는 초기화를 하지 않아도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화가 되므로 초기화하지않고 사용해도 되지만, 지역변수는 사용하기 전에 반드시 초기화 해야함
class InitTest {
	int x; //인스턴스 변수 (선언만 하고 초기화 하지 않음)
    int y = x; //인스턴스 변수 (y초기화 하는데 x사용)
    →인스턴스 변수 x는 초기화 해주지 않아도 자동적으로 int형의 기본값인 0으로 초기화 되므로,
    'int y = x;'와 같이 사용 가능
    x의 값이 0이므로 y역시 0이 저장됨
    
    void method1() {
    	int i; //지역변수 (선언만 하고 초기화 하지 않음)
        int j = i; //에러. j초기화 하는데 i사용. 지역변수를 초기화하지 않고 사용method1()의 지역변수 i는 자동적으로 초기화 되지 않으므로, 
        초기화 되지 않은 상태에서 변수 j를 초기화하는데 사용할 수 없음(컴파일시 에러)
    }
}

🎃 각 타입의 기본값(default value)

자료형기본값
booleanfalse
char`\u0000'
byte, short, int0
long0L
float0.0f
double0.0d 또는 0.0
참조형null

39. 멤버변수의 초기화

🎨 멤버변수의 초기화 순서

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

명시적 초기화(explicit initialization)

  • 변수를 선언과 동시에 초기화 하는 것
  • 가장 기본적이면서 간단한 초기화 방법
  • 여러 초기화 방법 중에서 가장 우선적으로 고려
class Car {
	int door = 4; //기본형(primitive type)변수의 초기화
    Engine e = new Engine(); //참조형(reference type)변수의 초기화
    //...
}

초기화 블럭(initialization block)

  • 초기화 블럭에는 '클래스 초기화 블럭'과 '인스턴스 초기화 블럭' 두가지 종류
  1. 클래스 초기화 블럭 : 클래스 변수의 복잡한 초기화에 사용
    -인스턴스 초기화 블럭 앞에 단순히 static을 붙임
  2. 인스턴스 초기화 블럭 : 인스턴스변수의 복잡한 초기화에 사용
    -단순히 클래스 내에 블럭{ }만들고 그 안에 코드 작성

40. 멤버변수의 초기화 예제1

Ex6_14이 메모리에 로딩될 때, 클래스 초기화 블럭이 가장 먼저 수행되어 'static{}'이 화면에 출력. 그 다음에 main메서드가 수행되어 Ex6_14의 인스턴스가 생성되면서 인스턴스 초기화 블럭이 먼저 수행되고, 끝으로 생성자가 수행

▶ 클래스 초기화 블럭은 처음 메모리에 로딩될 때 한번만 수행
▶ 인스턴스 초기화 블럭은 인스턴스가 생성될 때 마다 수행

41. 멤버변수의 초기화 예제2

명시적 초기화를 통해 배열 arr을 생성하고, 클래스 초기화 블럭을 이용해서 배열의 각 요소들을 random()을 사용해서 임의의 값으로 채우도록 함
▶배열이나 예외처리가 필요한 초기화에서는 명시적 초기화만으로는 복잡한 초기화 작업 불가. 추가적으로 클래스 초기화 블럭을 사용하도록 함

profile
안녕 나의 새로운 세상

0개의 댓글