inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Trong thực tế! Phát triển ứng dụng quản lý thư viện với Kotlin và Spring Boot (tái cấu trúc dự án Java)

Bài học 13. Thay đổi hệ thống phân cấp miền thành Kotlin - UserLoanHistory.java, User.java

강사님 안녕하십니까 코틀린 var 선언에 대해서 질문이 있습니다.

424

작성자 없음

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

1

var 를 선언하게 되면 setter 를 사용한 것 처럼 외부에서도 클래스 내부 필드에 접근하게 되어 캡슐화가 되지 않아서 setter 를 막아주고 싶습니다. 만약 그렇게 하고싶다면 모든 필드에 private set 을 선언해야할 것 같은데 중복코드의 느낌도 있고, 코틀린의 간결함이랑 멀어진다는 생각이 들었습니다. 보통 실무에서는 도메인, jpa 엔티티를 분리하는 방법이 아닌 set 을 막으려면 어떻게 처리를 하는지 궁금합니다.

java spring kotlin spring-boot 리팩토링

Câu trả lời 2

1

dding9

유튜브 영상을 봤어가지고 질문 지우려했는데 벌써 답변을 주셨군요 감사합니다..! 역시 트레이드 오프를 잘 해야 하네요. 잘 선택해서 하겠습니다. 감사합니다!

0

lannstark

안녕하세요 명구님! 정말 좋은 질문 감사드립니다! 😊

바로 이 내용이 다음 회차인 14강에서 나오는데요! 말씀해주신 것처럼 @Entity 클래스에서 setter를 막으려면 몇 가지 문법적인 요소를 사용해 번거로운 작업을 해주어야 합니다. 🥲

 

실무에서는 크게 2가지 접근 방식이 있는 것 같습니다.

  • 문법적으로 번거롭더라도 setter를 확실히 막아주자!

  • 그냥 setter를 열어는 두고 사용하지는 말자!

    • 코틀린의 문법적 간결함을 활용하지만, setter 를 사용할 수도 있다는 불안감(?)을 안고 가는 접근입니다.

    • 매우 개인적으로는 setter 가 열려 있어도 사용하지 않는 편이라 이 방법을 선호하고 있습니다 🙂

 

어떤 방법이건 정답은 없는 것 같습니다.

  • Kotlin ORM인 Exposed (https://github.com/JetBrains/Exposed) 를 JPA 대신 사용하는 것도 애매하고요!

  • 바이트 코드 조작 기술을 사용해 setter를 제거해주는 플러그인을 직접 만들기도 많~이 애매하죠..

 

결국 번거롭더라도 setter를 확실히 막거나, setter를 열어두고 쓰지 않거나 하는 방법으로 팀 간의 컨벤션을 잘 정해야 하는 것 같습니다.

답변이 도움이 되었으면 좋겠습니다. 감사합니다!! 🙏🙏

안녕하세요 혹시 프론트 코드 제공받을 수 있을까요?

0

68

2

실행이 안되네요

0

66

2

프론트 영역 보는법

0

51

2

companion object

0

78

2

Custom 레프직토리 형식

0

57

2

Querydsl 도입

0

67

2

fetch join DISTINCT 중복제거

1

83

2

표준 예외와 커스텀 예외 사용 전략 질문

0

86

3

이 질문이 왜 없는지 이해가 안 되지만 문제 인식 및 해결 방법 남깁니다.

1

177

2

테스트를 위한 코드

1

105

2

프로젝트 실행 에러

0

151

2

PDF 문서에 오타가 있어서 알려드립니다.

1

102

1

enum질문

1

86

1

테스트 후 AfterEach 함수에서 나오는 쿼리

0

136

2

테스트 fixture

1

210

2

./gradlew test 실행시 인식할수 없다고 뜹니다.

0

141

1

test 코드 실행시 경고가 발생합니다.

0

140

1

13강 User Kotlin 변환중

2

170

3

'추가 - 코프링과 플러그인' 강의 7:46 allopen 관련 질문

2

174

1

-

0

141

2

4:28 build.gradle 수정 시 kotlin-reflect관련 implementation 추가 해야할까요?

0

312

3

junit import 불가

0

273

3

테스트 코드와 관련하여 질문이 있습니다.

1

218

1

hibernate가 select를 두번 하는 이유

0

240

1