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

+ Recent posts