1 분 소요

생성자메서드와 초기화

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메서드를 통해서 할당하는 것이 보다 일반적이다.
}
  • 에러를 컨트롤 할 때도 필요하다고 하는데, 이 부분은 추가공부가 필요함.

추가 학습내용

  1. 클래스의 생성자 메서드가 호출될 때는, 해당 클래스의 변수도 선언된다.

    위의 경우, 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

카테고리:

업데이트:

댓글남기기