인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

relate16님의 프로필 이미지
relate16

작성한 질문수

실전! Querydsl

예제 도메인 모델과 동작확인

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

해결된 질문

작성

·

185

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

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

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

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

relate16님의 프로필 이미지
relate16
질문자

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

    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);
}
}

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

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

취사선택의 문제입니다.

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

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

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

relate16님의 프로필 이미지
relate16
질문자

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

relate16님의 프로필 이미지
relate16

작성한 질문수

질문하기