객체 생성 관련 질문
254
작성자 없음
작성한 질문수 0
영한님 안녕하세요.
객체 생성과 관련한 내용으로 궁금한 점이 있어 작성하였습니다.
객체 생성시 크게 생성자, 빌더, 정적 메소드 3가지 방식으로 알고 있습니다.
영한님은 실무에서는 주로 어떤 방식을 선호하는지 궁금합니다.
정적 메서드와 빌더를 같이 사용하는건 어떤지 영한님 생각이 궁금합니다.
예시)
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@NamedEntityGraph(
name = "Member.roles",
attributeNodes = @NamedAttributeNode(value = "roles", subgraph = "Member.roles.role"),
subgraphs = @NamedSubgraph(name = "Member.roles.role", attributeNodes = @NamedAttributeNode("role")))
public class Member extends EntityDate {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "member_id")
private Long id;
@Column(nullable = false, length = 30, unique = true)
private String email;
private String password;
@Column(nullable = false, length = 20)
private String username;
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private SocialType socialType;
@OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<MemberRole> roles;
@Builder
public Member(String email, String password, String username, SocialType socialType, List<Role> roles) {
this.email = email;
this.password = password;
this.username = username;
this.socialType = socialType;
this.roles = roles.stream()
.map(r -> new MemberRole(this, r))
.collect(toSet());
}
}@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class MemberDto {
private Long id;
private String email;
private String username;
private SocialType socialType;
private Set<RoleType> roles;
@Builder
public MemberDto(Long id, String email, String username, SocialType socialType, Set<RoleType> roles) {
this.id = id;
this.email = email;
this.username = username;
this.socialType = socialType;
this.roles = roles;
}
public static MemberDto toDto(Member member) {
return MemberDto.builder()
.id(member.getId())
.email(member.getEmail())
.username(member.getUsername())
.socialType(member.getSocialType())
.roles(member.getRoles().stream()
.map(r -> r.getRole().getRoleType())
.collect(Collectors.toSet()))
.build();
}
}@Getter
@EqualsAndHashCode
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class SignUpRequest {
@Email(message = "이메일 형식을 맞춰주세요.")
@NotBlank(message = "이메일을 입력해주세요.")
private String email;
@NotBlank(message = "비밀번호를 입력해주세요.")
@Pattern(regexp = "^(?=.*[A-Za-z])(?=.*\\d)(?=.*[@$!%*#?&])[A-Za-z\\d@$!%*#?&]{8,}$",
message = "비밀번호는 최소 8자리아면서 1개 이상의 알파벳, 숫자, 특수문자를 포함해야합니다.")
private String password;
@NotBlank(message = "사용자 이름을 입력해주세요.")
@Size(min = 2, message = "사용자 이름이 너무 짧습니다.")
@Pattern(regexp = "^[A-Za-z가-힣]+$",
message = "사용자 이름은 한글 또는 알파벳만 입력해주세요.")
private String username;
@Builder
public SignUpRequest(String email, String password, String username) {
this.email = email;
this.password = password;
this.username = username;
}
public Member toEntity(Role role, SocialType socialType, PasswordEncoder passwordEncoder) {
return Member.builder()
.email(email)
.password(passwordEncoder.encode(password))
.username(username)
.socialType(socialType)
.roles(List.of(role))
.build();
}
}
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
강의 수강생이신 yongc_2님께서 객체 생성 방식에 대해 궁금증을 가지고 계신 것으로 보입니다. 김영한 강사님께서 실무에서 객체 생성 방식에 대한 선호도 및 정적 메서드와 빌더를 함께 사용하는 것에 대한 의견을 여쭤보셨군요.
질문에 대한 세부 사항을 고려하여 김영한 강사님의 답변이 유용할 것으로 판단되는 관련 질문의 답변 URL을 찾아보았습니다.
아래의 링크는 비슷한 맥락으로 객체 생성 방식에 대해 설명되어 있으니 참고하시면 좋겠습니다.
위 링크들을 확인하시고, 여전히 질문이 남아 있다면 추가적인 질문을 게시판에 남겨주시면 강사님이 답변해주실 것입니다.
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
69
1
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
107
3
MemberRepository 구현체
0
57
1
pdf 표현 질문드립니다.
0
62
1
로그가 남지 않는 문제.
0
81
1
테스트 라이브러리가 강의는 junit4가 맞나요??
0
70
2
pdf 파일과 차이점이 있는 것같은데 문제 없나요?
0
72
2
@PrePersist, @PreUpdate 호출 시점 질문드립니다.
0
91
2
Sort 인터페이스는 잘 사용 안하나요?
0
52
1
스캔대상 질문드립니다.
0
46
1
하이버네이트6에서의 최적화에 이은 질문
0
85
1
save() vs saveAndFlush DB 통신 횟수
0
53
1
순수 JPA 리포지토리 코드 수정부분
0
86
2
bulk연산 후 flush하는 이유를 모르겠어요
0
152
3
bulk insert 질문입니다.
0
178
2
교만했던 것 같아요.
0
147
1
RESTful 강의는 안하시는 건지 궁금합니다.
0
147
2
동적 테이블에 대한 질문
0
86
1
영속성 전이와 연관관계
0
130
2
강의 10:25 질문
0
74
1
단건 update 질문
0
95
2
엔티티 와 도메인의 경계
0
127
1
UsernameOnlyDto 타입 type mismatch 오류
0
119
1
Projection 개념과 데이터 전달과정에 대해 질문 있습니다.
0
136
1





