setter에 관한 이야기
var 프로퍼티가 public으로 열려있어 setter를 쓸 수 있지만 setter 대신 좋은 이름의 함수(=updateName)을 사용하는 것이 훨씬 clean하다. 하지만 name에 대한 setter는 public이기 때문에 유저 이름 업데이트 기능에서 sette r를 사용할'수도' 있다. (=updateName=setName) 따라서 setter만 private하게 만드는 것이 좋다.
첫 번째 방법(backing property 사용)
내부에서는 _name(언더바name)을 사용해서 이름 값을 바꿀 수 있고 외부에서는 불변이 (val) name에 접근해서 Get할 수 있다.
두 번째 방법(custom setter 이용하기)
위 두 방법 모두 property가 많아질수록 번거롭다. 따라서 setter를 열어는 두지만 사용하지 않는 방법을 선호 -> 팀 컨벤션을 잘 맞추면 된다.
생성자 안의 프로퍼티. 클래스 body 안의 프로퍼티
꼭 primary constructor 안에 모든 프로퍼티를 넣어야 할까?
body에 만들어도 잘 동작한다.
추천
- 모든 프로퍼티를 생성자에 넣거나
- 프로퍼티를 생성자 혹은 클래스 body 안에 구분해서 넣을 때 명확한 기준이 있거나
JPA와 data class
Entity는 data class를 피하는 것이 좋다.
- equals, hashCode, toString 모두 JPA Entity와는 100% 어울리지 않는 메서드
위의 경우에서
- User의 quals가 UserLoanHistory의 equals를 부른다.
- UserLoanHisoty의 equals가 User의 quals를 부른다.
TIP
Entity가 생성되는 로직을 찾고 싶으면 constructor 지시어를 명시적(임의로)으로 작성하고 추적하자!
단순 Book으로 눌러봤을 때는 모든 class가 나오고 constructor를 임의로 작성하고 내부를 눌러보면 딱 '생성'한 부분만 추적가능하다.
'Back-end > Spring+Kotlin' 카테고리의 다른 글
[Spring -> Kotlin] 리팩토링 (0) | 2022.12.11 |
---|---|
[Java -> Kotlin] Junit5 Test로 코드 짜기 (0) | 2022.11.18 |