제이슨의 개발이야기
코틀린 scope 함수에 대해서 apply , run , with , also , let 본문
안녕하세요
오늘은 코틀린 스코프 함수에 대해서 공부하려고 합니다!
코틀린 범위 지정 함수에는 5개의 함수가 있는대
apply, run , with , also , let 이 있습니다
일단
스코프 함수란
함수형 언어의 특징을 좀 더 편리하게 사용할 수 있도록 제공하는 라이브러리 함수 입니다
1.apply
apply는 인스턴스를 생성한 후 변수에 담기 전에 초기화 과정을 수행할 때 많이 쓰입니다
val adam = Person("Adam").apply {
age = 32
city = "London"
}
println(adam)
2. run
run은 apply처럼 스코프 안에서 참조 연산자를 사용하지 않아도 된다는 점은 같지만 일반 람다 함수 처럼 인스턴스 대신 마지막에 결과값을 반환하는 차이가 있습니다
var d = Point(1,2).apply {
x=10
}
var s = d.run {
x
}
println(s)
// 10출력
3. with
with는 run과 동일한 기능을 가지지만 단지 인스턴스를 참조 연산자 대신 파라미터로 받는다는 차이 뿐입니다
var d = Point(1,2).apply {
x=10
}
var t = with(d){
d.x
}
println(t)
4. let
let은 run과 같은 기능을 갖지만 한가지 차이가 있다면 참조 연산자 없이 인스턴스의 변수와 함수를 사용할 수 있었다면
let은 마치 파라미터로 인스턴스를 넘긴것처럼 it을 통해서 인스턴스를 사용할 수 있습니다
왜 let은 굳이 파라미터를 통해서 인스턴스를 사용하는 귀찮은 과정을 거칠까?
-> 이는 같은 이름의 변수나 함수가 scope 바깥에 중복되어 있는 경우에 혼란을 방지하기 위함
fun main() = with(System.out.bufferedWriter()) {
var x = 10
var d = Point(1,2)
d.let {
println(it.x) // 1출력
}
d.run {
println(x)// 10출력 main에서 생성한 변수 x가 우선 순위가 높음
}
}
5.also
also 는 apply와 같은 기능을 하지만 앞서 let과 마찬가지로 참조 연산자 없이 인스턴스의 변수와 함수를 사용할 수 있었다면
also는 마치 파라미터로 인스턴스를 넘긴것처럼 it을 통해서 인스턴스를 사용할 수 있습니다
fun main() = with(System.out.bufferedWriter()) {
var x = 10
var d = Point(1,2).also {
it.x = 100
}
println(d.x)
}
마지막으로
스코프 함수는 인스턴스의 속성이나 함수를 스코프 내에서 깔끔하게 분리하여 사용할 수 있어 코드의 가독성을 향상 시킬 수 있는 장점이 있습니다
'컴퓨터과학' 카테고리의 다른 글
SOLID 원칙이란? 재대로 공부하자 (0) | 2022.11.11 |
---|---|
의존성 이란? 의존성 주입이란 무엇인가? Dependency Injection (0) | 2022.11.09 |
보일러플레이트 코드(Boilerplate code) 란 무엇인가? (0) | 2021.08.26 |
Git Commit Message 규칙 (0) | 2021.08.17 |
Gson 라이브러리는 무엇일까? 간단한 JSON 형 변환JSON-> Data Model , Model->JSON (0) | 2021.08.11 |