[Kotlin] 람다 함수 보충 설명, 스코프 함수 설명 & 예제
- Language/Kotlin
- 2021. 2. 3.
728x90
람다함수의 특별한 경우
- 람다함수도 여러 구문의 사용이 가능
val c: (String) -> Unit = { str -> println("$str 람다함수") }
val c: (String) -> Unit = { str ->
println("$str 람다함수")
println("여러 구문을")
println("사용 가능 합니다")}
val calculate:(Int, Int) -> Int = {a,b ->
println(a)
println(b)
//구문의 마지막 a+b을 Int 값으로 반환
a+b
- 파라미터가 없는 람다 함수
-> 실행할 구문들만 나열하면 됨
val a:() -> Unit = { println("패러미터가 없어요") }
- 패러미터가 하나 뿐이라면 it 사용
val c: (String) -> Unit = { println("$it 람다함") }
스코프 함수
함수형 언어의 특징을 좀더 편리하게 사용할 수 있도록 기본 제공 하는 함수
클래스의 인스턴스를 Scope 함수에 전달하면 인스턴스의 속성이나 함수를 좀더 깔끔하게 불러 쓸수 있다.
- apply
인스턴스를 생성한후 변수에 담기전에 초기화 과정을 수행할때 주로 사용
fun main() {
//a.name = "(할인)" + a.name
//a.discount()
//생성되자마자 조작된 인스턴스를 얻을 수 있음 : 코드가 깔끔해짐
var a = Book("코틀린 기초 공부", 10000).apply {
name = "(할인)" + name
discount()
}
}
class Book(var name: String, var price: Int) {
fun discount() {
price -= 2000
}
}
- run
run 스코프 안에서 참조연산자를 사용하지 않아도 된다는 점은 apply와 같지만 일반 람다함수처럼 마지막 구문에 결과값 반환
-> 이미 인스턴스가 만들어진 후에 인스턴스의 함수나 속성을 scope 내에서 사용해야 할 때 유용
fun main() {
var a = Book("코틀린 기초 공부", 10000).apply {
name = "(할인)" + name
discount()
}
//apply에서 수정한 책 이름과 할인된 가격을 확인 가능
a.run {
println("상품명: ${name}, 가격: ${price}원")
}
}
class Book(var name: String, var price: Int) {
fun discount() {
price -= 2000
}
}
- with
run과 동일한 기능을 가지지만 단지 인스턴스를 참조 연산자 대신 파라미터로 받는 다는 차이만 있다.a.run{...}
with(a){...}
- also / let
각각 apply와 run 과 같은 기능을 가지고 있다.
- 처리가 끝나면 인스턴스를 반환
- apply / also
- 처리가 끝나면 최종값을 반환
- run / let
차이점 : apply , run 이 참조 연산자 없이 인스턴스의 변수와 함수를 사용 할 수 있었다면 also와 let은 마치 패러미터로 인스턴스를 넘긴 것 처럼 it을 통해서 인스턴스를 사용할 수 있다는 것 입니다.
이유 : 이는 같은 이름의 변수나 함수가 'scope' 바깥에 중복되어 있는 경우에 혼란을 방지하기 위해
fun main() {
//run 함수가 인스턴스내의 price 보다 main price를 우선시 한다.
// -> run 대체 let 사용
var price = 5000
var a = Book("코틀린 기초 공부", 10000).apply {
name = "(할인)" + name
discount()
}
//apply에서 수정한 책 이름과 할인된 가격을 확인 가능
a.run {
println("상품명: ${name}, 가격: ${price}원")
}
a.let {
println("상품명: ${it.name}, 가격: ${it.price}원")
}
}
class Book(var name: String, var price: Int) {
fun discount() {
price -= 2000
}
}
scope 함수는 인스턴스의 속성이나 함수를 scope 내에서 깔끔하게 분리하여 사용 할 수 있어 코드의 가독성을 향상시킨다
728x90
'Language > Kotlin' 카테고리의 다른 글
[Kotlin] Observer 패턴(옵저버 패턴) 설명 & 예제 (0) | 2021.02.04 |
---|---|
[Kotlin] 싱글턴 패턴 & Object 설명 & 예제 (0) | 2021.02.04 |
[Kotlin] 고차함수, 람다함수 설명 & 예제 (0) | 2021.02.03 |
[Kotlin] 스코프, 접근제한자 설명 & 예제 (0) | 2021.02.02 |
[Kotlin] 코틀린의 기본 프로젝트 구조 설명 & 예제 (0) | 2021.02.02 |