자바 초기화로 검색을 해 보면
생성자와 묶어서 많이 나오는데
초기화는 생성자(Constructor)에서
변수 값 주는게 초기화인가?
이런 생각이 든다
물론 생성자에서 변수에 값 주는것도 초기화는 맞는데
생성자에서 값 주는것만 초기화가 아니다
간단하게 예제를 통해 알아보면
The local variable a may not have been initialized
에러가 뜨는 것이 보이는데
변수를 초기화(initialized)하지 않아서
에러가 뜨는 것이다
int a = 1; 을 해 주면
초기화가 되고 정상적으로 출력이 되는데
여기서 초기화가 무슨 뜻인지 간단하게 알 수 있다
자바에서 초기화(initialization)란
객체를 선언하고 값을 '최초'로 할당하는 것이다
int a = 10; 이렇게 작성한 것은
선언과 동시에 초기화한 것이고
이후에 a = 20; 이렇게 주면 초기화가 아니라
값을 바꾸는 할당(allocation)이 된다
근데 초기화를 왜 해야할까?
스크린샷 보면 클래스 영역에 선언한
멤버 변수 a,b,c는 선언만 하고 초기화 안해도 되는데?
여기서 클래스 영역에 선언한 변수들은
실행 시 초기화를 하지 않아도
int 타입에 String을 넣는다거나
혹은 String 타입에 int를 넣는
참사를 방지하기 위해
컴파일러에서 아래에 출력한
0, null, null 처럼 자동으로 값을 할당해 준다
그러나 메소드 안에서는
자동으로 값 할당이 되지 않기 때문에
에러가 뜨는 것이다
마지막으로 정리해보자면
Java에서 초기화 뜻은?
- 선언한 객체에 최초로 값을 넣어주는 것
자바에서 초기화 하는 이유는?
- 클래스 영역에서 선언할 경우에는
컴파일러가 자동으로 값 할당을 해주나
메소드 영역에서 선언할 경우에는
자동으로 값이 할당되지 않기 때문에
에러가 발생해서 그렇다
예제 코드는 아래의 코드블록을 사용해주면 된다
public class InitializationTest {
int a; // int, String, Boolean 선언
String b;
Boolean c;
public static void main(String[] args) {
InitializationTest it = new InitializationTest(); // 객체화
System.out.println(it.a);
System.out.println(it.b);
System.out.println(it.c);
}
}