• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

Member에서 타고 들어가는 생성자에 관한 질문

21.10.28 10:15 작성 조회수 127

0

@Entity
@Getter @Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString(of = {"id", "username", "age"})
public class Member {
@Id @GeneratedValue
private Long id;

private String username;
private int age;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "TEAM_ID")
private Team team;

public Member(String username) {
this(username, 0);
}

public Member(String username, int age) {
this(username, age, null);
}

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

에서 

public Member(String username) {

    this(username, 0); 

}

을 보면,

 

public Member(String username) {

    this(username, 0,  null); 

}

이 아니라

 

public Member(String username) {

    this(username, 0); 

}

을 사용한 이유는 가독성 때문인가요 ? 

 

 

답변 1

답변을 작성해보세요.

2

David님의 프로필

David

2021.10.28

안녕하세요. relate16님, 공식 서포터즈 David입니다.

.
생성자의 파라미터로 넘겨줄 team이 없는 점, team 없이도 Member를 생성할 수 있는 생성자가 있는 점 때문에 this(username, 0) 생성자를 호출한 것입니다.

만약 username, age, team을 받는 생성자만 있었다면 그것을 사용했을테지만 그게 아니라 더 적합한 생성자가 있기 때문입니다.
.
감사합니다.

relate16님의 프로필

relate16

질문자

2021.10.29

음... 좀 잘 이해가 안돼서 질문 더드려요 ㅠㅠ 

    public Member(String username) {
this(username, 0);
}

이렇게 하면 

    public Member(String username, int age) {
this(username, age, null);
}

여기도 타야되고 

여기를 타게 되면 또 

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

여기까지 타야돼서 2번을 거쳐야 되는 건데,

 

어차피 결과적으로

변수로 username을 넘기고 고정으로 age는 0, team을 null로 넘길 거라면

public Member(String username) {

    this(username, 0,  null); 

}

이렇게 해서

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

한 번에 여기로 올 수 있게 하면 더 좋은 게 아닌가 싶은 생각인데 

음.. 뭘 잘못알고 있을까요 ? :[

David님의 프로필

David

2021.10.29

취사선택의 문제입니다.

null을 쓰지 않는 생성자를 호출할 것인가.

아니면 null을 써서 생성자를 호출할 것인가.

저라면 굳이 team에 null을 추가로 넘기지 않고 username, age만 넘겨줘도 생성되는 생성자를 생성할 것 같습니다.

relate16님의 프로필

relate16

질문자

2021.10.29

아 , 답변 감사합니다 ! :]