[Java] 배열 초기화 시점 (생성자 vs 필드)
boolean[] visited 배열 초기화 시점
https://www.acmicpc.net/problem/1260 관련
입력값에 따라 크기나 상태를 바꿔야 하면 생성자 초기화,
항상 고정된 값이면 필드에서 바로 초기화가 적합하다.
DFS/BFS 문제처럼 입력으로 그래프 크기가 달라지는 경우는 → 생성자 초기화 방식
1. 생성자에서 초기화
객체를 새로 만들 때 생성자가 실행되면서 배열 초기화가 이루어진다.
즉, 전달 받는 값으로 크기를 동적으로 할당 할 수 있다. 그래서 Scanner로 입력을 받아야 하는 경우처럼
n 값이 입력으로 달라질 때(예: 정점 개수) 많이 쓰는 방식이다.
public class Main {
boolean[] visited; // 아직 null
public Main(int n) {
visited = new boolean[n + 1]; // 생성자 호출 시 배열 크기 결정
}
}
2. 필드에서 바로 초기화
public class Main {
boolean[] visited = new boolean[10]; // 이미 크기 10짜리 배열로 고정
}
- 클래스가 메모리에 로드될 때 초기화가 이루어진다.
- 한 마디로 초기화 시점에 값이 정해져 있어서 크기를 고정할 수 밖에 없다.
- 나중에 외부 입력에 따라 크기를 바꾸는 것은 불가능하다.