[TIL]Kotiln 기본 문법 : 스코프 함수
✏231122 수요일 TIL(Today I learned) 오늘 배운 것
📖스코프 함수 (Scope Function)
- 영역함수, (범위)지정함수, 수신객체 지정 람다(또는 함수) 라고도 한다.
- 특정 객체에 대한 식이라는 것을 알 수 있어서 가독성에 좋다.
- run, let, apply, also, with 가 스코프 함수 이다.
📖스코프 함수의 차이점

- 1.스코프 함수 호출 시에 수신 객체가 어떻게 전달되는가?
- 1.1 receiver 로 암시적 전달 : .also{...}, .apply {...}, .run {...}, .let{ ...}
: 이 중에서 run은 확장함수가 아니고 단일 람다함수로도 사용 가능하다.(가독성용의 람다함수 블럭이라 잘 사용하지는 않는다.)
- 1.2 parameter로 명시적 전달 : with( ) { }
: with은 확장함수가 없다.
- 2.스코프 함수에 전달된 수신 객체가 다시 수신 객체 람다에 어떤 형식으로 전달될 것인가?
- 2.1 receiver 로 암시적 전달 (this) : apply, run, with
: with은 확장함수가 아니기 때문에 호출 대상이 null일 경우 효율적이지 않을 수 있다.
- 2.2 parameter로 명시적 전달 (it) : also, let
- 3.스코프함수의 최종적인 반환값이 무엇인가?
- 3.1 전달 받은 수신 객체(호출 대상 자체 반환) : apply, also
- 3.2 코드블록의 수행 결과(마지막 실행 코드 반환) : run, let, with
📖각 스코프 함수의 적절한 사용
1 .let{ ...}
- 영역 내에서 해당 컨텍스트 객체를 접근하기 위해 it(변경가능, 생략불가능) 매개변수를 사용한다.
- 코드블록의 실행 결과를 반환값으로 사용한다.
- 보통 non-null함수와 함께 사용하여 null 체크를 간편하게 하기 위해서 사용한다.
2 .run {...}
- 영역 내에서 해당 컨텍스트 객체를 접근하기 위해 this(${}) 직접 사용.
- 코드블록의 실행 결과를 반환값으로 사용한다.
-이미 만들어진 인스턴스의 값, 아니면 이를 원하는 결과값으로 리턴 하는 경우 유용하다.
3 with( ) { }
- 영역 내에서 해당 컨텍스트 객체를 접근하기 위해 this(${}) 직접 사용.
- 코드블록의 명령 실행 결과를 반환값으로 사용한다.
- 생성된 객체의 메소드 여러개를 연속적으로 호출하거나, 속성을 한번에 설정할 때 주로 사용한다.
4 .apply {...}
- 영역 내에서 해당 컨텍스트 객체를 접근하기 위해 this(${}) 직접 사용.
- 호출 대상인 객체(this) 자체를 반환값으로 사용한다.
- 객체를 생성하며 초기화할 때 주로 사용한다.
5 .also{...}
- 영역 내에서 해당 컨텍스트 객체를 접근하기 위해 it(변경가능, 생략불가능) 매개변수를 사용한다.
- 호출 대상인 객체(this) 자체를 반환값으로 사용한다.
- 객체를 참조하는 추가적인 작업이 필요할 때 주로 사용한다.
✏오늘 발생 문제 및 해결
📖새롭게 알게된 것
- 스코프 함수라는 것 자체를 처음봤다. 이것도 코틀린만의 특징 중 하나인 것 같다.
📖오늘의 문제 발생
- 솔직히 기본문법서를 읽는데, 하나도 이해가 안갔다. 오늘의 문제는 스코프 함수 자체가 문제.
- 그리고 예시 코드를 첨부하지 못한 것도 문제점 중에 하나라고 생각한다.
=>다만, 예시로 올라온 코드들이 아직은 쉽게 이해하기 어려워서 보면 더 헷갈려질 것 같기에 실무에서 꼭 사용해보고 추후에 한 눈에 이해 할 수 있는 예시를 직접 만들어 첨부할 수 있었으면 좋겠다.
📖해결