본문 바로가기
Kotlin

Java Entity코드를 Kotlin Entity로..

by jisung-kim 2024. 1. 9.

 

 

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