본문 바로가기
NSLog(@"%@", dailyLog)

[Android, Kotlin] 데이터 클래스와 기타 클래스

by 틴디 2020. 8. 9.
728x90
반응형

Do it! 코틀린 프로그래밍 책을 참고 및 인용 하여 작성 되었습니다. 책에 없는 주관적 내용이 있을 수 있습니다

 

DTO를 사용하는 이유 

DTO는 일종의 표준과 같은 약속 -> 전송하거나 받고자 하는 어떤 요소든 데이터를 쉽게 다룰 수 있음

 

뷰란 

mvc모델에서 뷰란 사용자와 상호작용을 수행함

 

모델이란

mvc모델에서 모델이란 데이터의 표현을 위해 생성

 

데이터 클래스의 선언

코틀린에서는 데이터 클래스를 제공함

 

- 주생성자는 최소한 하나의 매개변수

- 주생성자의 모든 매개변수는 val, var

- abstract, open, sealead, inner 키워드 사용 불가

 

데이터 클래스가 자동 생성하는 메서드

data class Customer(var name: String, var email: String) {
    var job: String = "Unknwon"

    constructor(name: String, email: String, _job: String) : this(name, email) {
        job = _job
    }
}

fun main() {
    val people1 = Customer("jinmi","wow@naver.com")
    val people2 = Customer("jinmi", "wow@naver.com")

    println(people1 === people2)
    println(people1 == people2)
    println(people1.equals(people2))
}
false
true
true

equals는 내용을 비교하는 것이므로 == 연산과 같은 일을 수행하며, 객체를 비교하는 === 연산과는 다른 결과가 나옴

 

디스트럭처링

de + structuring, 객체가 가지고 있는 포로퍼티가 개별 변수로 표현될 수 있음

data class Customer(var name: String, var email: String) {
    var job: String = "Unknwon"

    constructor(name: String, email: String, _job: String) : this(name, email) {
        job = _job
    }
}

fun main() {
    val people1 = Customer("jinmi","wow@naver.com")

    val (_, peopleEmail) = people1
    print(peopleEmail)
}

디스트럭처링시 원하는 변수명으로 객체의 프로퍼티 값을 가지고 올 수 있으며 이때 프로퍼티 이름과 새로 지정하는 변수의 명이 같을 필요는 없다. 하지만 자리에 따라 값을 가지고 오는데 디스트럭처링 부분에서 변수가 하나라면 이름만 가져오고 위와 같이 두 개이면 첫번째 변수에 이름, 두번째 이름의 이메일 값이 온다. 만일 원하지 않는 값이 있는 경우 언더 스코어로 할당하지 않을 수 있다.

 

내부 클래스를 사용하는 이유

- 독립적인 클래스로 정의하기 모호한 겨우

- 특정한 클래스의 내부에서만 사용하고 외부에서 접근할 필요가 없을때

 

728x90
반응형

댓글