멤버변수와 지역변수 중, 변수 선언을 하고 초기화가 자동으로 이루어지는 것은?
멤버변수이다. 지역변수는 자동적으로 초기화되지 않기 때문에, 꼭 초기화를 하고 사용해야한다.
참고로 멤버변수의 각 타입별 기본값은 아래와 같다.
자료형 | 기본값 |
boolean | false |
char | '\u0000' |
byte short int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d 또는 0.0 |
참조변수 | null |
멤버변수의 초기화 방법에는
1. 명시적 초기화
int i = 0; 과 같이 선언과 동시에 초기화 하는 것을 명시적 초기화라고 한다.
2. 초기화 블럭
클래스 변수를 초기화하고싶을 때엔 클래스 초기화 블럭을, 인스턴스 변수를 초기화하고 싶을 때엔
인스턴스 초기화 블럭을 사용한다. 단지 {}안에 초기화 내용을 써주면 된다. 클래스 초기화 블럭은
{ 앞에 static을 붙인다.
명시적 초기화로는 못하는 for문이나 if문을 이용한 복잡한 초기화가 가능해진다.
3. 생성자
생성자는 인스턴스 초기화 메소드로 이해할 수 있으므로, 인스턴스 변수를 초기화할 때
생성자를 사용한다.
그런데 앞서 인스턴스 초기화 블럭을 배웠다. ***그렇다면 왜?? 생성자로 할 수 있는 인스턴스 변수 초기화를
초기화 블럭을 사용해서 할까? ***
➡️ 생성자는 오버로딩할 수 있다. 한 클래스 내에 여러개의 생성자가 있을 수 있단 뜻이다.
모든 생성자 내에 같은 코드가 있다면, '재사용성을 높이고 중복을 제거한다'라는 객체지향 프로그래밍의
목표에 어긋난다. 인스턴스 초기화 블럭과 생성자는 모두 인스턴스가 만들어질 때마다 실행되므로,
생성자 내부의 중복된 코드를 인스턴스 초기화 블럭에 넣는다면 코드의 중복을 피할 수 있는 것이다.
멤버 변수의 초기화 시점
클래스 변수: 클래스에 대한 정보가 요구될 때, 클래스가 로딩되며 단 한번 초기화된다.
인스턴스 변수: 인스턴스가 만들어질 때마다 초기화된다.
멤버 변수의 초기화 순서
클래스 변수: 기본값 -> 명시적 초기화 -> 클래스 초기화 블럭
인스턴스 변수: 기본값 -> 명시적 초기화 -> 인스턴스 초기화 블럭 -> 생성자
'JAVA' 카테고리의 다른 글
super와 super() (0) | 2022.08.11 |
---|---|
객체지향 프로그래밍 - 포함관계 (0) | 2022.08.07 |
객체지향 프로그래밍 - 상속 (0) | 2022.08.04 |
생성자(Constructor), this (0) | 2022.08.02 |
스태틱 메소드와 인스턴스 메소드 (0) | 2022.08.02 |
메소드 - 기본형/참조형 매개변수 (0) | 2022.08.02 |