관리 메뉴

hyeals study

[코틀린] 수신 객체 지정 람다 본문

코틀린

[코틀린] 수신 객체 지정 람다

hyeals 2020. 2. 22. 14:32

[수신 객체 지정 람다]

: 수신 객체를 명시하지 않고 람다의 본문 안에서 다른 객체의 메소드를 호출할 수 있게 하는 것

 

[with 함수]

 

※ with 함수의 유용성을 알아보기 위한 예시

 

1. with 함수를 사용하지 않고 알파벳 만들기

with 함수 사용하지 않은 예시
출력 결과

  • 위의 예시에서 result를 반복사용함.

2. with 함수를 사용해서 알파벳 만들기

with 함수 사용한 예시
출력 결과

  • return with(stringBuilder) 부분: 메소드를 호출하려는 수신 객체 지정
  • this.append(letter) 부분: this를 명시해서 앞에서 지정한 수신 객체의 메소드 호출
  • append("\nNow I know the alphabet!") 부분: this를 생략하고 메소드 호출
  • this.toString() 부분: 람다에서 값을 반환

☞ with 함수는 파라미터가 2개 있는 함수임.

  1. 첫 번째 파라미터: stringBuilder
  2. 두 번째 파라미터: 람다 (람다는 괄호 밖으로 빼내는 관례를 사용했음)
  • 첫 번째 인자로 받은 객체를 두 번째 인자로 받은 람다의 수신 객체로 만듦
  • 인자로 받은 람다 본문에서 this를 사용해서 수신 객체에 접근할 수 있음
  • this 와 .를 사용하지 않고 프로퍼티나 메소드 이름만 사용해도 수신 객체의 멤버에 접근할 수 있음 (위의 코드에서 append("\nNow I know the alphabet!" 부분)
  • 위의 코드에서 this가 사용한 모든 부분은 this를 사용하지 않아도 됨. 
  • with 함수의 반환 값: 람다 코드를 실행한 결과 ( 람다 식의 본문에 있는 마지막 식의 값 )

with 함수의 유용성: 어떤 객체의 이름을 반복하지 않고도 그 객체에 대해 다양한 연산을 수행할 수 있음.


[apply 함수]

: with 함수와 거의 같음. 

 

* with 함수와의 차이: apply 함수는 자신에게 전달된 객체(수신 객체)를 반환함.

 

- with 함수와 마찬가지로 아래의 코드는 알파벳을 만드는 예시임

 

apply 함수를 사용한 예시
출력 결과

  • apply 함수는 확장 함수임.
  • apply 함수의 수신 객체가 전달받은 람다의 수신 객체가 됨
  • 위 코드의 alphabet3 함수에서 apply를 실행한 결과: StringBuilder 객체 → 따라서 이 객체의 toString 메소드를 호출해서 String 객체를 얻을 수 있음.

☞ apply 함수는 객체의 인스턴스를 만듦과 동시에 프로퍼티 중 일부를 초기화해야 하는 경우 유용함.

 

 

 

본 게시물은 "Kotlin IN ACTION"을 참고함.

Comments