아래는 코모스튜디오가 직접 만든 무료 앱이에요(한 번만 봐주세요 ^^)
Scope 함수는
-
인스턴스의 속성, 함수를 영역내에서 분리해서 사용 할 수 있다.
-
깔끔하고, 가독성을 높여 준다.
apply / also
-
인스턴스 반환
run(with) /let
-
최종값 반환
apply
-
인스턴스(클래스)를 생성한 후 변수에 담기 전 초기화 과정을 수행 할 때
-
인스턴스 생성 후 .apply{ }
-
스코프 내에서 인스턴스의 .이름 없이 바로 사용 가능
-
즉, 인스턴스 생성 하고, 변수에 변경되거나 초기화 값을 넣은 다음 할당 하게 된다.
class Book(var title: String, var number:Int){}
var a = Book("a", 5).apply{ title = "abcde" + name}
-
인스턴스가 그대로 반환 된다
run
-
apply 와 같으나, 마지막 구문이 반환 된다
-
초기화 이후 해야 할 작업들이 있을 경우 스코프 내에서 할 때
with
-
run 과 동일하나
-
a.run{ } 이 아니고 with{a} 요렇게 쓴다.
-
마지막 식의 결과를 리턴 한다
val s: String = with(StringBuilder("abc")) {
append("def ").append("zzz")
println("value: $this")toString()
}
println(s)
//value: abcdefzzz
//abcdefzzz
also / let
-
apply / run 과 다른 점은 it을 통해 접근 한다는 것.
-
이유는 같은 이름의 변수/함수가 스코프 밖에 있다면 현재 클래스 내의 변수가 더 우선 되기 때문에 also 또는 let을 사용하면 스코프 내의 인스턴스의 값이 우선 적용 된다.
class a (){
var title;
var bbb = b(“타이틀”).apply{
name = 123 + tittle
}
a.run {
println(${title})//b의 타이틀이 아닌 a의 타이틀이 나온다
}
b.let {
println(${it.title})//a의 타이틀이 아닌, b의 타이틀이 나온다}
}
class b(var title){}
let
-
scope 내에서 it을 사용해서 인스턴스에 접근 한다.
a.let{ it.title, it.number}
-
b?.let{}
-
요렇게 널 체크 후 스코프에서 사용하게 할 수도 있다
also
-
it을 통해 접근
let은 내부 결과를 변화 시킬 수 있으나, also 는 변화 시킬 수 없다.
' [안드로이드 공부] > 코틀린' 카테고리의 다른 글
null cannot be cast to non-null type androidx.appcompat.widget.appcompatimagebutton (0) | 2020.08.22 |
---|---|
smart cast to is impossible because is a mutable property that could have been changed by this time (0) | 2020.08.07 |
[MVVM] LiveData와 ViewModel Observer로 연결 (0) | 2020.08.07 |
코틀린 생성자와 위임 (0) | 2020.07.27 |
추상클래스(abstract)와 인터페이스(interface) (0) | 2020.07.27 |
모든 게시물은 코모스튜디오의 소유이며, 무단 복제 수정은 절대 불가입니다. |
퍼가실 경우 댓글과 블로그 주소를 남기고 해당 게시물에 출처를 명확히 밝히세요. |