• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

교안과 강의내용의 차이점 및 Member(String name) 생성자 초기화 세팅

23.06.25 01:45 작성 조회수 342

1

우선 강의 에서는 생성자를 아래와 같이 구성하여 진행하였습니다

public Member(String username) {
    this.username = username; // 2번 생성자 호출
}

public Member(String username, int age, Team team) {
        this.username = username;
        this.age = age;
        if (team != null) {
            changeTeam(team);
        }
    }

순차적으로 각각 1번과 2번 생성자로 구분한다고 가정하였을 경우 강의 교안에서는 아래와 같은 코드로 구성되어 있습니다.

 

public Member(String username) {
    this(username, 0); // 2번 생성자 호출
}


public Member(String username, int age) {
    this(username, age, null); // 3번 생성자 호출
}

public Member(String username, int age, Team team) {
    this.username = username;
    this.age = age;
    if (team != null) {
        changeTeam(team);
    }
}

논리적으로 해석해보자면 2번째 생성자는 username과 age만 값이 세팅되므로 team에 대한 값은 null로 세팅하는게 맞다 라고 판단이 되었으나,

1번째 생성자는 username만 초기화되고 age에 대한 값만 0으로 초기화 해주지만 team에 대한 값은 들어오지 않았으니 null로 처리해줘야 하는게 아닌가? 하는 의문이 들었습니다.

 

public Member(String username) {
    this(username, 0, null); // 2번 생성자 호출
}

위와 같이 1번 생성자의 this() 초기화에서는 username만 들어온다면 2번째 생성자와 같이 team에대한 값을 null로 함께 초기화 해야 맞는것이 아닌가 의문이 듭니다.

답변 1

답변을 작성해보세요.

1

codesweaver님의 프로필

codesweaver

2023.06.25

안녕하세요. kate님, 공식 서포터즈 코즈위버입니다.

첫 번째 생성자에서 (userName, 0, null)을 사용한다면 두 번째 생성자를 호출하지 않고 세 번째 생성자로 바로 넘어가게 됩니다. 파라미터의 타입과 갯수에 맞는 생성자를 찾기 때문입니다.

사용자 편의를 위해 다양한 생성자(인터페이스)를 제공하되, 내부에서는 같은 메서드로 코드를 처리하는 방법은 코드 재활용, 이미 검증된 코드를 쓰기에 안정감이 있다는 면에서 좋은 방법이라 생각합니다.

감사합니다.


kate님의 프로필

kate

질문자

2023.06.26

와 제가 간과한부분이 있었군요.


저렇게 생성자를 선언 하는게 맞네요
인스턴스 생성시 1번 생성자 호출시 2번을 호출하면서 3번까지 순차적으로 호출이되니까 자동으로 username이외의 값은 0과 null로 초기화되고
인스턴스 생성시 2번 생성자를 호출하면 3번을 호출하니 username과 age 이외의 team만 null로 처리가 되네요.

감사합니다!