💻 Study/Java
[Java] 객체지향개념5_변수의 초기화
와자!
2023. 1. 30. 17:34
728x90
728x90
이 게시글은 남궁성의 정석코딩 - 자바의 정석 기초편(2020최신)을 보고 공부한 내용을 정리한 게시글입니다.
틀린 내용이 있을 수 있습니다.
✔ 변수의 초기화
- 클래스 변수와 인스턴스 변수는 자동으로 초기화된다. (주로 0으로 초기화 되며, boolean타입일 땐 false로 된다.)
- 지역 변수는 반드시 사용 전에 수동으로 초기화 해야 한다.
class Test{
int x;
int y = x;
void testMethod(){
int i = 5;
int j = i;
System.out.println(j);
}
}
public class Main {
public static void main(String[] args) {
Test t = new Test();
System.out.println(t.x); // 0
System.out.println(t.y); // 0
t.testMethod(); // 5
}
}
변수 x, y는 따로 값을 대입하지 않았는데도 출력 시 0으로 나온다.
변수 j는 i의 값이 없을 경우 에러가 발생한다.
변수 i의 값에 5를 대입하자 변수 j의 값을 출력 시 5로 나온다.
◾ 클래스 변수와 인스턴스 변수의 초기화
- 클래스 변수는 클래스가 메모리에 처음 로딩될 때 단 한 번 초기화된다.
- 인스턴스 변수는 객체가 생성될 때 마다 초기화된다.
클래스 변수와 인스턴스 변수의 초기화는 3가지로 분류할 수 있다.
1. 자동초기화
→ 변수 타입에 따라 0, null, false 중 하나로 자동 초기화 된다.
2. 간단초기화
→ 대입연산자(=)를 사용하여 변수에 값을 대입해 초기화 한다. 명시적 초기화라고도 한다.
3. 복잡초기화
→ 작성해야 할 내용이 많을 경우 사용하며, 초기화 블럭이나 생성자를 사용하여 초기화한다.
◾ 복잡초기화
class Test{
static{}; // 클래스 변수 초기화블럭
{}; // 인스턴스 변수 초기화블럭
Test{}; // 인스턴스 변수 생성자
}
복잡초기화는 초기화 블럭과 생성자로 나눌 수 있는데,
초기화 블럭은 중괄호 안에 여러 문장을 넣어 초기화 할 수 있다.
클래스 변수는 중괄호 앞에 static을 붙여야한다.
인스턴스 변수느 초기화 블럭보다는 생성자로 초기화하는 경우가 많다.
생성자 초기화는 클래스 안에 생성자를 만들어 초기화한다.
인스턴스 변수만 초기화할 수 있다.
class StaticBlockTest{
static int[] arr = new int[10]; // 간단 초기화
static{ // 클래스 변수 복잡 초기화
for(int i=0; i<arr.length; i++){
arr[i] = (int)(Math.random()*10) + 1;
}
}
}
배열 arr은 클래스 변수이다.
배열 arr은 처음에는 10개의 영역을 할당받으며 초기화됐다. (간단 초기화)
이어서 arr 각 요소에 난수를 할당받으며 초기화됐다. (복잡 초기화)
배열 arr은 처음 메모리에 할당될 때 10개의 요소를 가지며, 각 요소에는 난수가 할당되어 있다.
728x90
728x90