inflearn logo
강의

Khóa học

Chia sẻ kiến thức

[Người mới bắt đầu] Hãy ngâm mình! Tạo thành viên với Kotlin và Spring Security + JWT

4.1. Giấy phép được cấp khi đăng ký thành viên

memberRole필드 질문이요~

513

jjang9

36 câu hỏi đã được viết

0

Member 클래스의 memberRole필드는 왜 클래스의 본문에 정의해주나요?

null 초기화때문인가요? 파라미터에서도 기본값으로 null을 줄 수 있지 않나요?

kotlin spring-boot jpa spring-security jwt

Câu trả lời 1

0

kimkimgod

안녕하세요. 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
}

그래서 역시 중괄호( ... ) 안에는 생성자에 필요한 프로퍼티만 들어간 것을 확인하실 수 있습니다.

 

질문에 대한 답변이 되셨으면 좋겠습니다. 제가 질문의 의도를 잘못 이해했을 수 있으니 보시고 궁금하신점 있으시면 추가 질문 부탁드립니다.

강의 봐주시고 질문까지 남겨주셔서 다시 한번 감사합니다 :)

 

 

0

jjang9

감사합니다!

@RestControllerAdvice를 사용하지 않은 이유?

0

3

1

service-discovery 프로세스 가동 이유

0

5

1

예전 로드맵과 현재 강의 순서

0

22

1

트래잭션 전파 기본- 에 대한 개념 질문? 이렇게 생각해도 맞나요?

0

23

1

헥사고날 아키텍처와 DDD를 적용할 때, 화면에 강하게 연관된 조회 데이터를 어떻게 다루는 게 좋은지 궁금합니다.

0

51

2

DLQ의 수동 커밋에 대해서 질문있습니다.

0

47

2

validation 추가하기에 대해 질문

0

122

1

로그인 후 Token 발행 시 postman 에러메시지

0

168

1

unique 작성법

0

166

1

4.1 마지막 회원가입 실행되지만 빈화면 뜸

0

248

3

4.1강 마지막 회원가입 실행

0

168

1

2.4강에서 1:18초쯤에 <T>를하고 뭔가 추가하는 작업

0

195

2

class 와 data class

0

192

1

토큰에서 예외 발생시 처리

0

264

1

안녕하세요 선생님 rememberme 질문드립니다..!

0

258

1

Next Lv 강의에 대해서 계획중이신게 있을까요?

0

295

1

테이블 create문

0

202

1

DTO 생성 과정에서 궁금한 점이 있어요!!

0

595

3

2.5강에서 포스트맨 오류와 전에 실습한 내용에 대해 질문 드립니다

0

625

2

TokenProvider의 Key 관련하여 질문이 있습니다.

0

393

1

스프링 시큐리티 예외 RestControllerAdvice로 처리

0

458

1

1 : N 필드 `memberRole` 에 @OneToMany 옵션 cascade 미사용, 컬랙션 null 초기화 에 대한 질문입니다.

0

420

2

loginId는 왜 변경이 안될까요?

0

437

1

Validation 관련해서 질문드립니다.

1

832

2