User.java
@Entity
public class JavaUser {
@Id
@GeneratedValue(strategy = IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
private Integer age;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
private final List<UserLoanHistory> userLoanHistories = new ArrayList<>();
public JavaUser() {
}
public JavaUser(String name, Integer age) {
if (name.isBlank()) {
throw new IllegalArgumentException("이름은 비어 있을 수 없습니다");
}
this.name = name;
this.age = age;
}
public void updateName(String name) {
this.name = name;
}
public void loanBook(Book book) {
this.userLoanHistories.add(new UserLoanHistory(book.getName(), false,new User(),null));
}
public void returnBook(String bookName) {
UserLoanHistory targetHistory = this.userLoanHistories.stream()
.filter(history -> history.getBookName().equals(bookName))
.findFirst()
.orElseThrow();
targetHistory.doReturn();
}
@NotNull
public String getName() {
return name;
}
@Nullable
public Integer getAge() {
return age;
}
public Long getId() {
return id;
}
}
User.kt
@Entity
class User (
var name: String,
val age: Int ? = null,
@OneToMany(mappedBy = "user", cascade = [CascadeType.ALL], orphanRemoval = true)
val userLoanHistories: MutableList<UserLoanHistory> = mutableListOf(),
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long ? = null,
){
init {
if(name.isBlank())
throw IllegalArgumentException("이름은 비어있을 수 없습니다")
}
fun updateName(name:String){
this.name =name
}
fun loanBook(book: Book){
this.userLoanHistories.add(UserLoanHistory(book.name,false,this))
}
fun returnBook(bookName: String){
this.userLoanHistories.first {
history -> history.bookName == bookName
}.doReturn()
}
}
코틀린의 경우 어노테이션을 다는 필드의 경우 가장 밑에 적는다고 한다.
var는 getter와 setter의 성격을 가지고있고 val은 getter의 성격만 가지고있다.
주목할만한 코드는 val userLoanHistories: MutableList<UserLoanHistory> = mutableListOf() 이다.
var과 val이 있는것처럼 List도 읽기전용과 수정이가능한 List가 있다.
var arrList = listOf("GOD","루피","조로")
println(arrayList[0]) //정상
arrList.add("추가") // 컴파일에러
arrList.remvoe(0) // 컴파일에러
=========================
var arrMutable = mutableListOf()
arrMutable.add("추천","출근","퇴근") //정상
arrMutable.add("콭르린") //정상
arrMutable.remove(0) //정상
println(arrMutable) //정상
코틀린에서는 class를 초기화 하는 방법을 2가지 제공한다.
constructor와 init()
위 코드에서는 init()을 사용하였다.
물론 둘다 사용해도 된다.
init의 경우 매개변수를 받지도 않는다.
constructor의 경우 매개변수를 받을 수 있고 받을시 초기화를 해야한다.
다른 코드는 뭐 대동소이...
'Kotlin' 카테고리의 다른 글
Java Service코드를 Kotlin Service코드로.. (0) | 2024.01.08 |
---|---|
Java Controller를 Kotlin Controller로 (1) | 2024.01.08 |
JAVA DTO를 Kotlin DTO로.. (0) | 2024.01.08 |