본문 바로가기
App/Android Kotlin

Kotlin(4) - 고급 문법_예시

by SeleniumBindingProtein 2022. 2. 7.
728x90
반응형

1. lamda

package com.example.bmkpractice


//1. lamda
// 람다식은 우리가 마치 value 처럼 다룰 수 있는 익명함수
//1) 메소드의 파라미터로 넘겨줄 수 있음
//ex) fun maxBy(a: Int)
//2) return 값으로 사용할 수 있음

//1-1. 람다의 기본정의
//val lamdaName : Type = {argumentList -> codeBody}

//(1)
val square : (Int) -> (Int) ={number -> number*number}
// 혹은 val squared :(Int) -> Int = {number : Int -> number*number}

//(2)
val nameAge = {name : String, age : Int ->
    "my name is ${name} I'm ${age}"
}

fun main(){
    //(1)
    println(square(12))
    //(2)
    println(nameAge("BMK",29))
    //(3)
    val a = "BMK said"
    val b = "mac said"
    println(a.pizzaIsGreat())
    println(b.pizzaIsGreat())
    //(4)
    println(extendString("ariana",27))
    //(5)
    println(calculateGrade(50))
    println(calculateGrade(970))
    //(6)
    val lamda = {number : Double ->
        number == 4.3213
    }
    println(invokeLamda(lamda))
    println(invokeLamda{it>3.22})  //마지막 파라미터가 람다식일 때, 소괄호 생략 가능 및 중괄호 사용

}

//1-2. 확장함수 -> 있는 클래스를 추가하려고 할 때 사용
//(3)
val pizzaIsGreat : String.() -> String = {
    this + "Pizza is the best!"
}//(4)
fun extendString(name : String, age : Int) : String{
    val introduceMyself : String.(Int) -> String = {"I am ${this} and ${it} years old"}
    return name.introduceMyself(age)
}

//1-3. 람다의 Return
//Int 소괄호 안하면, 에러가 발생함
//(5)
val calculateGrade : (Int) -> String = {
    when(it){
        in 0..40 ->"fail"
        in 41..70 -> "pass"
        in 71..100 -> "perfect"
        else -> "error"
    }
}

//1-4. 람다를 표현하는 2가지 방법
//(6)
fun invokeLamda(lamda : (Double) -> Boolean) : Boolean{
    return lamda(5.2343)
}

//pojo 클래스 : 비어있는 틀 역할을 하는 클래스

<결과값>


2. data Class

package com.example.bmkpractice

//2. data Class
// 변수 선언, constructor 생성, toString(), hashCode(), equals(), copy()
data class Ticket(val companyName : String, val name : String, var date : String, val seatNumber :Int)
class TicketNormal(val companyName : String, val name : String, var date : String, val seatNumber :Int)

fun main(){
    //2
    val ticketA = Ticket("koreanAir", "BMK", "2022-02-01", 14)
    val ticketB = TicketNormal("koreanAir2", "BMK2", "2022-02-01", 13)
    println(ticketA)
    println(ticketB)
}

<결과값>


3. Companion Object

package com.example.bmkpractice

//3. Companion 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(getId(),myBook)
    }
}

interface IdProvider{
    fun getId() : Int
}

fun main(){
    val book = Book.create()
    val bookId = Book.BookFactory.getId()
    println("${book.id} ${book.name}")
}

<결과값>


4. 

package com.example.bmkpractice

//4. Object
//Singleton Pattern : 객체의 인스턴스가 오직 1개만 생성되는 패턴
object CarFactory {
    val cars = mutableListOf<Car>()
    fun makeCar(horsePower : Int) : Car{
        val car = Car(horsePower)
        cars.add(car)
        return car
    }
}

data class Car(val horsePower : Int)

fun main(){
    val car = CarFactory.makeCar(10)
    val car2 = CarFactory.makeCar(200)

    println(car)
    println(car2)
    println(CarFactory.cars.size.toString())
}

728x90
반응형

'App > Android Kotlin' 카테고리의 다른 글

Kotlin(6) - UI  (0) 2022.02.09
Kotlin(5) - 심리테스트 앱 만들기  (0) 2022.02.08
Kotlin(3) - 기본 문법_예시  (0) 2022.02.05
Kotlin(2) - 기본구문  (0) 2022.02.04
Kotlin(1) - 안드로이드 스튜디오 설치 및 환경설정  (0) 2022.02.04

댓글