코틀린에서 다양한 클래스 생성 방법
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)
}
'kotlin' 카테고리의 다른 글
코틀린 : 생성과 사용 멤버 등의 개념 (0) | 2020.10.19 |
---|---|
코틀린 : enum 열거형 상수 (0) | 2020.10.19 |
코틀린 : 인터페이스에서 프로퍼티 사용 (0) | 2020.10.19 |
코틀린 : 인터페이스와 추상화 코딩해보기! (0) | 2020.10.19 |
코틀린 : 추상화 개념 다잡기 (0) | 2020.10.19 |