[05. 코틀린 유용한 기법]
[05-1. 람다 함수와 고차 함수]
[람다 함수] : 익명 함수
-주로 함수를 간단하게 정의할 때 사용
-코틀린에서는 고차함수를 지원함. 고차함수는 매개변수나 반환값에 ‘함수’를 이용함.
-즉, 람다함수는 고차함수를 이해하기 위해 알아야 함.
[람다 함수 선언과 호출] : { 매개변수 -> 함수 본문 }
-{} 중괄호 사용, ( fun 키워드 사용X)
-함수 이름 없기 때문에, 함수명으로는 호출 X
1) 람다함수를 변수에 대입해서 사용
val sum = { no1: Int, no2: Int -> no1 + no2} |
2)람다함수 선언과 동시에 호출해서 사용: 바로 뒤에서 소괄호()로 호출
{no1: Int, no2 : Int -> no1 + no2 } (10, 20) |
3) 람다함수 선언 이후, 따로 호출해서 사용 : 호출 시 소괄호() 호출
람다함수 선언 : val sum = {no1 : Int, no2 : Int -> no1 + no2 } 람다함수 호출 : sum(10, 20) |
[매개변수 없는 람다 함수]
-매개변수 없을 경우 {} 화살표 왼쪽 부분을 비워두면 됨
-( -> )화살표도 생략 가능 O
{ -> println(“function call”) } { println(“function call”) } |
[매개변수 1개인 람다 함수]
-매개변수가 1개일 때는 매개변수 선언하지 않아도 함수로 전달된 값을 쉽게 이용 O
(1) val some = { no: Int -> println(no) } |
(2) val some: (Int) -> Unit = {println( it ) } // <it 키워드로 매개변수 이용> |
-매개변수 1개일 때는 중괄호 안에서 매개변수 선언 생략하고 it키워드로 매개변수 이용 O
-단 람다함수에서 it 이용하려면 해당 매개변수 타입 식별 가능할 수 있어야 함
[람다함수의 반환]
-람다함수도 자신을 호출한 곳에 결괏값을 반환해야 하는데, return문은 사용 X
-람다함수의 반환값은 { }본문의 마지막 실행 결과가 된다.
[함수 타입과 고차함수]
-코틀린에서는 함수를 변수에 대입해서 사용 가능
-변수에 함수를 대입하려면, 변수를 함수 타입으로 선언해야 함
[함수 타입 선언]
-함수 타입 변수 선언: 함수를 선언할 때 나타내는 매개변수와 반환타입 정의한 변수
ex. (Int, Int) -> Int 타입 변수에는 이 함수 타입에 맞는 함수를 대입해야 함
val some: (Int , Int) -> (Int) = {no1: Int, no2 :Int -> no1 + no2 } //함수 타입 //함수 내용 |
[타입 별칭] : typealias 키워드
-typealias 키워드 : 타입 별칭을 선언하는 키워드
-함수 타입, 데이터 타입 모두에 사용 o
-새로운 별칭으로 타입 지정 가능
//새 별칭으로 함수 타입 선언
typealias MyFunType = (Int, Int) -> Boolean
//이제 이 변수에는 해당 타입에 맞는 함수만 대입 가능 O
fun main() {
val someFun: MyFunType = {no1: Int, no2:Int -> no1 > no2}
. . .
}
[매개변수 타입 생략]
-일반적으로 매개변수의 타입 유추 가능하면 타입 선언 생략 O
-‘타입 유추에 따른 타입 생략 기법’은 타입만 유추가능하면 어디든 통한다.
[고차 함수]
-고차함수 : 함수를 매개변수로 전달 or 반환하는 함수를 의미
-고차함수 호출 시 인자로 ‘함수’를 전달하고, 반환 받는 결과 역시 ‘함수’ 이다
fun hofFun(arg: (Int) -> Boolean) : () -> String {
//매개변수 타입, 반환 타입 모두 람다함수 형태이다.
val result = if(arg(10)) {
“valid”
} else {
“invalid”
}
return {“hofFun result : $result ” } //람다함수를 반환
}
fun main() {
val rsult = hotFun( {no -> no > 0 } ) //람다함수를 인자로 넣고 호출
println(result() )
}
[05-2. 널 안정성]
[널 안정성]
-NUll (널) : 객체가 선언되었지만 초기값 할당되지 않아서 주소 갖지 못한 상태
-즉, 변수가 선언되없으나 이용할 수는 없는 상태
-널 객체 이용 시 -> 널 포인트 예외가 발생한다.
-널 안정성 : 널 포인트 예외가 발생하지 않도록 코드 작성하는 것 의미
-코틀린은 널 안정성을 지원한다. 즉, 객체가 널일 때 예외 발생하지 않도록 기법 제공한다.
[널 안정성 연산자]
▷[널 허용 연산자] ? 연산자
-변수 타입에는 널 허용/부허용 구분
-변수 선언 시, 변수 타입 뒤에 ? 연산자 붙이면 널 허용 변수가 된다.
val data2: String? = “kkang” data2 = null |
▷[널 안정성 호출] ?. 연산자
-널 허용으로 선언한 변수의 멤버에 접근 시 반드시 (.? 연산자 사용)
-이 연산자는 변수가 null 아닐 때만 멤버에 접근
val data: String? = “kkang” val length = data?.length |
변수가 null이면 null 반환
▷[엘비스] ?: 연산자
-변수가 널이면 널을 반환하는 연산자
▷[예외 발생] !! 연산자
-객체가 널일 때 예외를 일으키는 연산자
[참고] : Do It 안드로이드 앱 프로그래밍 with 코틀린 |
'App(앱)_관련 공부 모음 > [교재] Andorid App_Kotlin 기반' 카테고리의 다른 글
07. [뷰를 배치하는 레이아웃] (0) | 2022.03.08 |
---|---|
06. [뷰를 이용한 화면 구성] (0) | 2022.03.07 |
04.[ 코틀린 객체지향 프로그래밍] (0) | 2022.03.04 |
03.[코틀린 Kotlin 기본] (0) | 2022.03.04 |
02. [안드로이드 앱 개발 기본 지식] (0) | 2022.03.01 |