본문 바로가기

kotlin

코틀린에서 다양한 클래스 생성 방법

코틀린에서 다양한 클래스 생성 방법

1. DTO (Data Transfer Object)

=> 여러 개의 속성을 묶어서 하나의 데이터로 사용할 목적으로 만든 클래스

=> Variable Object 나 Domain Class 라고도 합니다.

=> Data 라는 예약어를 이용해서 생성

=> 반드시 primary constructor를 생성해야 하고 primary constructor의 매개 변수는 val이나 var 로 만들어져야 합니다.

=> abstract, open, seald, inner 같은 예약어를 붙일 수 없습니다.

=> 5개의 메소드가 자동 생성 됨

hashCode() :해시 코드 (데이터를 저장할 때 저장 위치를 결정하는 코드 값) - 이 값이 같으면 동일한 메모리 공간을 사용하는 인스턴스로 간주) 를 리턴

 

equals() : 인스턴스의 값이 같은지 비교하는 메소드

- primary constructor에 생성한 프로퍼티 값만 비교해서 결과를 리턴

 

toString(): 인스턴스를 문자열로 변환해서 리턴해주는 메소드, 프로퍼티 값들을 하나의 문자열로 만들어서 리턴 - 디버깅할 때 유용, 출력하는 메소드에 인스턴스 이름만 대입하면 이 메소드가 자동으로 호출 됩니다.

 

componentN() - 프로퍼티의 값을 가져올 때 프로퍼티의 이름을 사용하지 않고 component1() component2() 이런 식으로 사용 할 수 있음

 

copy() : 인스턴스를 복제해서 다른 인스턴스를 생성하는데 데이터의 일부분만 수정해서 복제하고자 할 때 사용

           데이터를 다르게 하고자 하는 부분만 순서대로 입력해주면 됩니다.

//주생성자에 설정한 프로퍼티가 equals 할 때 비교가 됩니다.
data class User(val id: String, var pw:String) {
    var email : String = ""
}
fun main (args: Array<String>){
    val user1 : User = User("adam", "1234")
    user1.email = "xxx@gmail.com"
    //user1의 내용을 출력
    println(user1)
    println(user1.toString())

    val user2 : User = User("adam", "1234")
    user2.email = "xxx@gmail.com"

    println(user1 == user2)
    println(user1.equals(user2))

    val user3 : User = User("adam", "1234")
    user2.email = "yyy@gmail.com"

    println(user1 == user3) // 내용 비교하며 주생성자의 프로퍼티만 비교
    println(user1.equals(user3))

    // 해시 코드 비교
    println(user1 === user3)

    val user4 : User = user3.copy("yyys")
    println(user4)
    println(user4.email)

}