본문 바로가기
Programming/Kotlin

[Kotlin] Kotlin 기본 강의 (3) - Lambda

by 코딩의성지 2019. 10. 30.

안녕ㅎㅎ 오늘은 Kotlin 기본 강의 세번 째 시간이다.

Kotiln 기본 강의에 대한 글을 마무리하고 나면, 유튜브로 강의 내용을 한번 올려볼까 생각하고 있다.

 

자 오늘은 Lambda라는 기능을 공부해볼 예정이다. 

 

Lambda란?

 

Kotlin에서는 함수의 Parameter로 함수를 받아올 수 있다. 이때 이 Lambda라는 문법을 사용한다. 이렇게 Parameter 를 넘겨주면 함수내에서 Parameter로 넘어온 함수를 호출해서 사용할 수 있는 것이다.

 

아래와 같은 방식으로 사용하면 된다.

1
2
3
fun 함수명 ( 파라미터함수 : () -> 반환타입 ) {
   // 파라미터함수() 활용
 

처음 보는 형태라 .. 어렵게 느껴지실 수 있지만 쓰다보면 편해지지 (?) 않을까 생각한다.

 

저렇게만 해놓으면 무슨말인지 모를 수가 있다. 예제를 보자.

 

1
2
3
4
5
6
7
8
9
10
11
2
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
fun main (args : Array<String>) {
   lambdaFunction1 (
      parameterFunction1 = { a: Int ->
          println("파라미터함수의 파라미터로 들어온 값 : ${a}");
      }
    )
 
   lambdaFunction2 (
        parameterFunction2 = {
            println("파라미터함수가 호출 됨");
        }
    )
 
   lambdaFunction3 (
        parameterFunction3 = { a:Int, b:Int->
            "${a} + ${b} = ${a+b}"
            "${a} - ${b} = ${a-b}"
            "${a} x ${b} = ${a*b}"// 위에거는 무시하고 최종적으로 이값이 나옴.
 
        }
    )
}
 
// 1.파라미터함수에 파라미터 값이 있고 리턴 값은 없는 경우
fun lambdaFunction1 (parameterFunction1: (Int) -> Unit) {
    parameterFunction1(1);
}
 
// 2.파라미터함수에 파라미터 값이 없고 리턴 값도 없는 경우
fun lambdaFunction2 (parameterFunction2 : () -> Unit) {
    parameterFunction2();
}
 
// 3. 파라미터함수에 파라미터 값과 리턴값이 모두다 있는 경우
fun lambdaFunction3 (parameterFunction3 : (Int, Int) -> String) {
    var result = parameterFunction3(53);
    println(result);
}
 

차근 차근 보자.  lamdaFunction1, lamdaFunction2, lamdaFunction3 함수 구현부를 보면 

각각 parameterFunction1, parameterFunction2, parameterFunction3 이 각 함수의 파라미터로 들어가 있고,

또 이 함수들을 보면 ( ) 안에는 파라미터가  -> 옆에는 리턴 값이 들어가 있는 것을 볼 수 있다.

 

그리고 이 함수를 호출하는 main 함수를 보면 {  } 안에서 파라미터함수의 로직이 구현되어 있는 걸 볼 수 있다.

 

말이 좀 어렵나? 예제를 두세번 보다보면 이해가 될 것이다. ㅎㅎㅎ

 

 

 

lambda 의 장점?

 

람다를 공부하다보니... java에서 사용하던 익명 클래스랑 비슷한게 아닐까 생각이 들었다. 우리가 자바 8 이전에 사용하던 익명클래스의 예제를 한번 보자. ( 자바 8 이후부터는 자바에서도 람다식 표현을 제공한다.)

 

1
2
3
4
5
6
7
// java 의 익명 클래스로 리스너 구현하기.
btn.setOnClickListener(new onClickListener() {
    @Override
    public void onClick(View view) {
        // 버튼 클릭시 동작할 기능 구현.
    }
});
 
 

 

위의 코드를 Kotlin 의 lambda로 구현하면, 아래와 같다.

 

1
2
3
4
// kotlin 의 lambda 로 리스너 구현하기.
btn.setOnClickListener{ 
    // 버튼 클릭시 동작할 기능 구현.
 }
 

 

간결해졌다. 많은 장점이 있겠지만 ( 공부한지 진짜 얼마 안되서 잘모르겠다. 공부하다가 장점이 더 발견되면 포스팅해드릴것을 약속드린다.) 간결함 ! 이게 큰 장점이 아닐까 생각한다.

 

자 아무튼 오늘은 Lamda를 공부해보았다. Kotlin 왕이 될때까지 모두들 화이팅하자! 그럼 오늘도 열코~~

 

반응형

댓글