hmk run dev
kotlin basic2( 코틀린 기본 문법2 ) 본문
LAMDA ( 개인적으로 코틀린 문법중 제일 어렵다. )
package com.example.kotlin_prac
class sample3 {
}
fun main () {
println(square(12))
println(nameAge("형민", 28))
// 확장함수 사용법
val a = "hmk good!"
val b = "android"
println(a.pizzaIsGreat())
println(b.pizzaIsGreat())
extendsString("hmk", 28)
println(calcGrade(91))
// 람다식을 파라미터로 넘겨보기
val lamda : (Double) -> Boolean = { number : Double ->
number == 4.341
}
println("람다 넘겨보자 : "+invokeLamda(lamda))
println(invokeLamda({it > 3.22})) // 이렇게 표현도 가능
invokeLamda { it > 3.22 } // 함수의 마지막 파라미터가 람다일땐 괄호 생략가능
// 익명 내부 함수
}
//// lamda
// 람다식은 우리가 마지 value 처럼 다룰 수 있는 익명함수!
// 1) 메소드의 파라미터로 넘겨줄 수 가 있다. ) fun maxBt( lamdaFunc )
// 2) 리턴 값으로 사용가능
// 람다의 기본정의
// val lamdaName : Type = {argumentList -> codeBody}
val square = {number : Int -> number*number} // println(square(12)) => 144
val nameAge = {name: String, age: Int ->
"my name is ${name} I'm ${age}"
}
// 확장함수
val pizzaIsGreat : String.() -> String = { // this는 확장함수를 사용하는 인스턴스
this + "Pizza is the best!"
}
fun extendsString (name: String, age : Int) : String {
val introduceMyself : String.(Int) -> String = { // 확장함수사용객체(this).파라미터타입(it) 파라미터가 1개 일땐 it 사용
"I'm ${this} and ${it} years old" // this는 확장함수가 부른 object it은 int
}
return name.introduceMyself(age)
}
// 람다의 Return
val calcGrade : (Int) -> (String) = {
when(it){
in 0..40 -> "fail"
in 41..70 -> "pass"
in 71..100 -> "pood"
else -> "error?"
}
}
// 람다를 표현하는 방법
// 람다를 파라미터로 받는 함수
fun invokeLamda (lamda : (Double) -> Boolean) : Boolean {
return lamda(5.2344)
}
DATA (JAVA LOMBOK 상위버전?)
package com.example.kotlin_prac
//// Data
// pojo class 모델이 되는 클래스 > 메서드가 없고 틀 역할을 하는 클래스 jpa 모델같은? lombok을 이용한?
// 이게 끝...! getter setter @Data 어노테이션 다 필요없다 대박!
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 () {
val ticketA = Ticket( "asiana", "hmk", "2022-02-28", 7 )
val ticketB = TicketNormal("asiana", "hmk", "2022-02-28", 7 )
println(ticketA) // 객체 내용 확인가능
println(ticketB)
}
정적메소드 & object class(singletone pattern)
package com.example.kotlin_prac
// 정적 메소드
// private constructor 다른곳에서 사용불가
class Book private constructor (val id : Int, val name : String) {
companion object BookFactory :IdProvider { // interface 상속문법
override fun getId() :Int { // 인터페이스 상속 함수 구현
return 777
}
val myBook = "new book"
fun create() = Book(0, myBook)
}
}
fun main () {
// private 프로퍼티나 메소드를 읽어 올 수 있게함 자바의 static
val book = Book.create() // BookFactory 생략가능
val bookId = Book.BookFactory.getId()
println("${book.id} ${book.name}")
// object class
val car: Car = CarFactory.makeCar(10)
var car2 : Car = CarFactory.makeCar(200)
var cars : List<Car> = CarFactory.cars
println(car)
println(car2)
println(cars)
}
interface IdProvider {
fun getId () : Int
}
//// object class
// CarFactory라는 객체는 앱실행시 딱 한번만 만들어진다 > 싱글톤 패턴 > 메모리 누수 방지
object CarFactory { // class 대신 object
val cars = mutableListOf<Car>()
fun makeCar (horsePower: Int) : Car {
val car = Car(horsePower)
cars.add(car)
return car
}
}
data class Car (val horsePower : Int)
'android' 카테고리의 다른 글
안드로이드 앱 Constraint Layout (0) | 2022.02.06 |
---|---|
kotlin basic3(간단한 앱 만들기) (0) | 2022.02.06 |
kotlin basic(코틀린 기본 문법) (0) | 2022.02.05 |
앱 관리 (0) | 2022.02.05 |
어플 배포 팁 (0) | 2022.02.05 |
Comments