작성
·
376
0
Member 클래스의 memberRole필드는 왜 클래스의 본문에 정의해주나요?
null 초기화때문인가요? 파라미터에서도 기본값으로 null을 줄 수 있지 않나요?
답변 1
0
안녕하세요. juuu o님 질문주셔서 감사합니다.
@Entity
@Table(
uniqueConstraints = [UniqueConstraint(name = "uk_member_login_id", columnNames = ["loginId"])]
)
class Member(
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
var id: Long? = null,
@Column(nullable = false, length = 30, updatable = false)
val loginId: String,
@Column(nullable = false, length = 100)
val password: String,
@Column(nullable = false, length = 10)
val name: String,
@Column(nullable = false)
@Temporal(TemporalType.DATE)
val birthDate: LocalDate,
@Column(nullable = false, length = 5)
@Enumerated(EnumType.STRING)
val gender: Gender,
@Column(nullable = false, length = 30)
val email: String,
) {
@OneToMany(fetch = FetchType.LAZY, mappedBy = "member")
val memberRole: List<MemberRole>? = null
private fun LocalDate.formatDate(): String =
this.format(DateTimeFormatter.ofPattern("yyyyMMdd"))
fun toDto(): MemberDtoResponse =
MemberDtoResponse(id!!, loginId, name, birthDate.formatDate(), gender.desc, email)
}
이 엔티티에서 질문주신 부분은 MemberRole과 조인을 위한 프로퍼티인데요.
@OneToMany(fetch = FetchType.LAZY, mappedBy = "member")
val memberRole: List<MemberRole>? = null
아래의 클래스를 풀어서 적어보면 constructor가 생략이 되어있는 형태입니다.
class Member( ... ) -> class Member constructor( ... )
그래서 중괄호( ... ) 안에는 생성자에 사용될 프로퍼티만 넣어주면 되기에 memberRole은 거기에 있을 필요가 없어서 본문에 선언 했습니다.
다른 예시를 들어보자면
class Person constructor(
name: String,
age: Int,
) {
val name: String = name
val age: Int = age
val gender: String? = null
}
위 소스는 생성자로 name과 age라는 변수를 받아서 본문에 있는 name 프로퍼티와 age 프로퍼티에 넣어주는 소스인데요.
이 소스를 프로퍼티와 생성자를 동시에 사용하는걸로 작성하면 아래의 코드가 됩니다.
class Person(
val name: String,
val age: Int,
) {
val gender: String? = null
}
그래서 역시 중괄호( ... ) 안에는 생성자에 필요한 프로퍼티만 들어간 것을 확인하실 수 있습니다.
질문에 대한 답변이 되셨으면 좋겠습니다. 제가 질문의 의도를 잘못 이해했을 수 있으니 보시고 궁금하신점 있으시면 추가 질문 부탁드립니다.
강의 봐주시고 질문까지 남겨주셔서 다시 한번 감사합니다 :)
감사합니다!