-
카테고리
-
세부 분야
백엔드
-
해결 여부
해결됨
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);
}
을 사용한 이유는 가독성 때문인가요 ?
답변을 작성해보세요.
2
David
2021.10.28
안녕하세요. relate16님, 공식 서포터즈 David입니다.
.
생성자의 파라미터로 넘겨줄 team이 없는 점, team 없이도 Member를 생성할 수 있는 생성자가 있는 점 때문에 this(username, 0) 생성자를 호출한 것입니다.
만약 username, age, team을 받는 생성자만 있었다면 그것을 사용했을테지만 그게 아니라 더 적합한 생성자가 있기 때문입니다.
.
감사합니다.
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
2021.10.29
취사선택의 문제입니다.
null을 쓰지 않는 생성자를 호출할 것인가.
아니면 null을 써서 생성자를 호출할 것인가.
저라면 굳이 team에 null을 추가로 넘기지 않고 username, age만 넘겨줘도 생성되는 생성자를 생성할 것 같습니다.
답변 1