hyeals study
[코틀린] 수신 객체 지정 람다 본문
[수신 객체 지정 람다]
: 수신 객체를 명시하지 않고 람다의 본문 안에서 다른 객체의 메소드를 호출할 수 있게 하는 것
[with 함수]
※ with 함수의 유용성을 알아보기 위한 예시
1. with 함수를 사용하지 않고 알파벳 만들기
- 위의 예시에서 result를 반복사용함.
2. with 함수를 사용해서 알파벳 만들기
- return with(stringBuilder) 부분: 메소드를 호출하려는 수신 객체 지정
- this.append(letter) 부분: this를 명시해서 앞에서 지정한 수신 객체의 메소드 호출
- append("\nNow I know the alphabet!") 부분: this를 생략하고 메소드 호출
- this.toString() 부분: 람다에서 값을 반환
☞ with 함수는 파라미터가 2개 있는 함수임.
- 첫 번째 파라미터: stringBuilder
- 두 번째 파라미터: 람다 (람다는 괄호 밖으로 빼내는 관례를 사용했음)
- 첫 번째 인자로 받은 객체를 두 번째 인자로 받은 람다의 수신 객체로 만듦
- 인자로 받은 람다 본문에서 this를 사용해서 수신 객체에 접근할 수 있음
- this 와 .를 사용하지 않고 프로퍼티나 메소드 이름만 사용해도 수신 객체의 멤버에 접근할 수 있음 (위의 코드에서 append("\nNow I know the alphabet!" 부분)
- 위의 코드에서 this가 사용한 모든 부분은 this를 사용하지 않아도 됨.
- with 함수의 반환 값: 람다 코드를 실행한 결과 ( 람다 식의 본문에 있는 마지막 식의 값 )
※ with 함수의 유용성: 어떤 객체의 이름을 반복하지 않고도 그 객체에 대해 다양한 연산을 수행할 수 있음.
[apply 함수]
: with 함수와 거의 같음.
* with 함수와의 차이: apply 함수는 자신에게 전달된 객체(수신 객체)를 반환함.
- with 함수와 마찬가지로 아래의 코드는 알파벳을 만드는 예시임
- apply 함수는 확장 함수임.
- apply 함수의 수신 객체가 전달받은 람다의 수신 객체가 됨
- 위 코드의 alphabet3 함수에서 apply를 실행한 결과: StringBuilder 객체 → 따라서 이 객체의 toString 메소드를 호출해서 String 객체를 얻을 수 있음.
☞ apply 함수는 객체의 인스턴스를 만듦과 동시에 프로퍼티 중 일부를 초기화해야 하는 경우 유용함.
본 게시물은 "Kotlin IN ACTION"을 참고함.
'코틀린' 카테고리의 다른 글
[코틀린] 타입 시스템 (2) - 원시 타입 (0) | 2020.02.25 |
---|---|
[코틀린] 타입 시스템 (1) - 널 가능성 (0) | 2020.02.23 |
[코틀린] 람다식 & 멤버 참조 (0) | 2020.02.21 |
[코틀린] object 키워드 (0) | 2020.02.19 |
[코틀린] 컴파일러가 생성한 메소드 (0) | 2020.02.19 |
Comments