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 |
댓글