728x90
[2강. 코틀린 고급 문법]
1. 람다함수
[람다함수]
val a : (Int, Int) -> Int = {x:Int, y:Int -> x + y} 함수 타입 변수 = 타입에 일치하는 람다식 저장 <타입별칭 : typealias 선언 키워드> typealias MyType = (Int, Int) -> Boolean val a : MyType = {no1: Int, no2: Int -> no1 > no2 } |
//1. Lamda 람다 함수 : 익명 함수
//람다식 그 자체를 값(value) 처럼 다룰 수 있는 함수
//코틀린에서는 고차함수 개념 존재
//고차함수 : 람다식(함수) 형태를 값 처럼 매개변수, 반환 타입에 적용해놓은 함수
//람다의 기본 정의
//val lamdaName : Type = {argumentList -> codeBody}
val square : (Int) -> (Int) = {number : Int -> number + number}
//이 타입에 맞춰서 람다함수 대입 가능
val nameAge : (String, Int) -> String = {name :String, age : Int ->
"My name is ${name} I'm ${age}"
}
fun main(){
println(square(12))
println(nameAge("joyce", 99))
val lamda:(Double) -> Boolean = {number : Double ->
number == 4.3213
}
}
//확장 함수(= 고차함수 ) 함수타입으로 변수 선언하면 해당 변수 타입에 맞는 람다식을 대입함
val pizzaIsGreat : String.() -> String = {
this + "Pizza is the best "}
//매개변수가 1개인 람다함수의 경우 'it 키워드'가 알아서 매개변수 이용함
fun extendString(name:String, age:Int) :String {
val introduceMyself : String.(Int) -> String = {"I am ${it} years old"}
}
//람다의 리턴 - 람다는 {} 마지막 실행문을 자동 리턴값으로 반환
val calculateGrade :(Int)-> String = {
when(it) {
in 0..40 -> "fail"
in 41..70 -> "pass"
in 71..100 -> "perfect"
else -> "Error"
}
}
//람다를 표현하는 여러가지 방법
fun invokeLamda(lamda :(Double) -> Boolean) : Boolean{
return lamda(5.2343)
2. 데이터 클래스
//2. 데이터 클래스 Data Class : 자주 사용하는 데이터를 객체로 묶음
data class Ticket(val companyName:String, val name :String, var date : String, var seatNumber : Int)
//data클래스로 만든 데이터들에 대해서 toString(), hashConde(), equals(), copy() 를 자동 갖고 있음
fun main() {
val ticketA = Ticket("KoreanAir", "joyceHong", "2020-02-05", 14)
3. 컴패니언 클래스
( = static 정적 멤버 사용을 위함). 클래스를 객체 생성 없이 이름으로 바로 접근하고자 함.
//3. 컴패니언 클래스 : 정적 변수, 객체 사용하기 위함
class Book private constructor(val id :Int, val name : String) {
companion object BookFactory:IdProvider{ //companion object{} 안에 선언한 내부 멤버에 대해 클래스 이름으로 접근 가능
override fun getId(): Int {
TODO("Not yet implemented")
return 444
}
val myBook = "new book"
fun create() = Book(0, "animal farm")
}
interface IdProvider {
fun getId() : Int
}
fun main() {
val book:Book = Book.create()
val bookId = Book.BookFactory.getId()
println("${book.id} ${book.name}")
}
}
4. 오브젝트 클래스 : object class
//4. object 오브젝트 클래스 : 익명 클래스
object CarFactory {
val cars:MutableList<Car> = 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:Car = CarFactory.makeCar(10)
val car2: Car = CarFactory.makeCar(11)
}
[참고] : Joyce - 코틀린 3강으로 끝내기 |
728x90
'App(앱)_관련 공부 모음 > [문법]_Kotlin(코틀린)' 카테고리의 다른 글
Android를 위한 Kotlin 문법 [최종편] (0) | 2022.05.07 |
---|---|
Android를 위한 Kotlin 문법 [심화편] (0) | 2022.05.07 |
Android를 위한 Kotlin 문법 [기본편 2] (0) | 2022.05.07 |
Android 를 위한 Kotlin문법 [기본편 1] (0) | 2022.05.07 |
1강. [코틀린 기본 문법] - 코틀린 3강으로 끝내기 (0) | 2022.03.05 |