생성자메서드와 초기화
생성자메서드와 초기화
Q. 클래스 필드에 변수 초기화를 해도 되지 않나?
class Myset {
ArrayList<Integer> list = new ArrayList<>(); // <- 이 부분
Myset() {
}
Myset(int[] arr) {
for (int item : arr) {
this.list.add(item);
}
}
}
class Myset {
ArrayList<Integer> list; // <- 변수만 선언하고
Myset() {
this.list = new ArrayList<>(); // <- 각 생성자에서 초기화 하는 모습
}
Myset(int[] arr) {
this.list = new ArrayList<>(); // <- 각 생성자에서 초기화 하는 모습
for (int item : arr) {
this.list.add(item);
}
}
}
A. 가능하지만, 일반적인 방법은 아니다.
class Myset {
// 클래스 필드에서는 변수의 공간을 만드는 것으로도 역할이 충분하다.
int a;
String b;
ArrayList<Integer> list;
Myset() {
}
// 변수에 실제 값을 할당할 때는(초기화 할때는)
// 1) 생성자의 매개변수로 하거나,
Myset(int a, String b, int[] arr) {
this.a = a;
this.b = b;
this.list = new ArrayList<>();
for (int item : arr) {
this.list.add(item);
}
}
// 2) 변수접근을 private로 한 후 getter,setter메서드를 통해서 할당하는 것이 보다 일반적이다.
}
- 에러를 컨트롤 할 때도 필요하다고 하는데, 이 부분은 추가공부가 필요함.
추가 학습내용
-
클래스의 생성자 메서드가 호출될 때는, 해당 클래스의 변수도 선언된다.
위의 경우, main 메서드에서
Myset myset = new Myset();
을 하게 되면Myset
이라는 클래스에 접근하며 필드에 있는int a; String b; ArrayList<Integer> list;
가 선언된다.
참고자료
- https://stackoverflow.com/questions/1994218/should-i-instantiate-instance-variables-on-declaration-or-in-the-constructor
마지막 수정일시: 2022-05-24 12:08
댓글남기기