Android

[Android] 코틀린 3강으로 끝내기 (03)

배현진 2022. 1. 30. 00:03

▷ 강의명

코틀린 3강으로 끝내기(feat. 안드로이드 개발) _ inflean

 

▷ 진도 목표

  • 1. 기본 문법
  • 2. 고급 문법
  • 3. 안드로이드 앱 만들어보기

▶ 오늘의 학습

2. 고급 문법

 2.2 Data class

    data를 담는 그릇이 되는 class

    - pojo class : 그 안에서 메소드가 작동하는 것이 아닌, 비어있는 틀 역할을 하는 class

      -> java에서는 이런 클래스들을 위해 일일이 코드를 작성해줘야 했지만

           kotlin에서는 data class를 사용함으로써 그런 귀찮음을 생략할 수 있다.

 

=> 코드 예시 _ data class

data class Ticket(val companyName : String, val name : String, var data : String, var searNumber : Int)

class Ticket(val companyName : String, val name : String, var data : String, var searNumber : Int)


fun main() {
    val ticketA = Ticket(companyName : "koreanAir", name : "joyceHong", data : "2020-02-16", seatNumber : 14)
    val ticketB = TicketNormal(companyName : "koreanAir", name : "joyceHong", data : "2020-02-16", seatNumber : 14)
    
    println(ticketA)     // Ticket(companyName = koreanAir, name = joyceHong, data = 2020-02-16, seatNumber = 14)
    println(ticketB)     // ...(주소)
}

* data class를 사용하면 toStirng(), hashCode(), equals(), copy() 등이 자동으로 사용할 수 있도록 생성된다.

* 연관된 데이터 클래스를 하나에 모아 만들 수 있어서 관리하기 편하다. (java로는 불가능하다)

 

 

 2.3 Companion Object

    java의 static을 대신해 사용하는 것으로, 정적인 메소드나 정적인 변수를 선언할 때 사용한다.

 

=> 코드 예시 _ companoin object

class Book private constructor(val id : Int, val name : String) {
    companion object BookFactory : IdProvider {
    
        override fun getId() : Int {
            return 444
        }
        
        val myBook = "new book"
        
        fun create() : Book = Book(id : 0, myBook)
    }
}

interface IdProvider{
    fun getId() : Int
}

fun main() {
    val book = Book.Companion.create()    // 이 코드를 써줘야 fun create()가 제대로 생성된다.
                                          // Companion은 생략 가능하다.
    val bookId = Book.BookFactory.getId()
    
    println("${bood.id} ${book.name}")     // 444 new book
}

 

 

 2.4 Object

 

=> 코드 예시 _ Object

object CarFactory {
    val cars = mutableListOf<Car>()
    fun makeCar(horsePower : Int) : Car {
        val car = Car(horsePower)
        cars.add(car)
        return car
    }
}

data class Car(var horsePower : Int)

fun main() {
    val car = CarFactory.makeCar(10)
    val car2 = CarFactory.makeCar(200)
    
    println(car)     // 10
    println(car2)     // 200
    println(CarFactory.cars.size.toString())     // 2
}