[Java] 변수의 초기화

Minuuu·2023년 2월 2일
0

Java

목록 보기
15/18

들어가기 전

Java 기초가 부족하다면 이런 경험 해봤을 것이다

  • 변수를 선언하고 초기화를 안해도 에러가 안나는데 어쩔 땐 초기화를 안하면
    에러가 발생한다.
  • 변수가 생기는 시점이 언제지..?, 변수 초기화는 어떻게 하는게 좋지..?
    이 글을 읽고 초기화에 대한 이해와 규칙을 익히면 좋겠다.

1. 변수의 초기화

멤버 변수는 초기화 하지않아도 자동적으로 변수의 자료형에 맞는 기본값으로 초기화
지역 변수는 사용하기 전에 반드시 초기화 해야 한다

class InitTest{
	int x;	   // 인스턴스 변수
    int y = x; // 인스턴스 변수
    void method(){
    	int i; // 지역 변수
        int j = i; // 에러. 지역변수를 초기화 하지 않고 사용
    }
}
  • 인스턴스 변수 x는 초기화 하지 않아도자동적으로 int의 기본값인 0으로 초기화
  • 지역변수 i는 초기화되지 않으므로 에러가 발생한다

멤버 변수의 초기화 방법

1. 명시적 초기화

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

class Car{
	int door = 4; // 기본형 변수 초기화
    Engine e = new Engine();  // 참조형 변수 초기화
}

가장 간단하고 명료한 방법

2. 초기화 블럭

class Init{
	static{// 클래스 초기화 블럭}
    {// 인스턴스 초기화 블럭}
}

클래스 초기화 블럭

  • 클래스 변수의 초기화에 사용
  • 클래스가 메모리에 로딩 될 때 한번만 수행

인스턴스 초기화 블럭

  • 인스턴스 변수의 초기화에 사용
  • 인스턴스를 생성할 때마다 수행
  • 주로 생성자를 사용
  • 중복을 제거해주는 장점 -> 객체지향프로그래밍의 목표
Car(){
	count++;
    num = count;
    color = "white"
}
Car(String color){
	count++;
    num = count; // 기본생성자와 생성자간의 중복 발생
    this.color = color;
}

위와 같은 코드를 인스턴스 초기화 블럭을 사용하여

{
	count++;
    num = count;
}
Car(){
	color = "white";
}
Car(String color){
	this.color = color;
}

이처럼 코드의 중복을 제거하고 오류의 발생 가능성을 줄여줄 수 있다


3. 멤버변수의 초기화 시기와 순서

클래스변수의 초기화 시점/순서

  • 클래스가 처음 로딩될 때 단 한번 초기화
  • 기본값 -> 명시적초기화 -> 클래스 초기화 블럭

인스턴스변수의 초기화 시점/순서

  • 인스턴스가 생성될 때마다 각 인스턴스 별로 초기화
  • 기본값 -> 명시적초기화 -> 인스턴스 초기화 블럭 -> 생성자

프로그램 실행도중 클래스에 대한 정보가 요구될 때, 클래스는 메모리에 로딩된다
해당 클래스가 이미 메모리에 로딩되어 있다면, 또 다시 로딩하지 않고, 초기화 하지 않는다


후기

인스턴스 변수 int i = 20의 경우,
그동안 나는 i값에 바로 20이 들어가는줄 알았지만 기본값 0이 들어가고 20으로 초기화 되는 것을 알게되었다.
이렇게 기본적인 것을 다시 짚어볼 수 있는 시간이어서 좋은 시간이었다 :)

참고서적

Java의 정석(남궁성)

profile
꾸준히 한걸음씩 나아가려고 하는 학부생입니다 😄

0개의 댓글