관리 메뉴

HAMA 블로그

스칼라 강좌 (35) lambda 익숙해지기 본문

Scala

스칼라 강좌 (35) lambda 익숙해지기

[하마] 이승현 (wowlsh93@gmail.com) 2017. 2. 17. 17:30



lambda

스칼라에서의 lambda 식은 다음과 같다. 

( x : Int ) => Int 

이것은 Int 형을 받아서 String 을 리턴하는 함수에 대한 람다식이다.


object lambdaTest extends App {

def test = (x:Int) => x + 1

log (test(3).toString())

}

위의 test 메소드는 다음과 같다.

def test (x: Int):Int = {
x + 1
}


다음 코드를 살펴보자.  함수의 매개변수로 람다식이 사용되었다. 

object lambdaTest extends App {

def test (f: Int => String) {
log(f(3))
}

def logging (x: Int ):String = {
x.toString()
}

test(logging)

}

 - test 함수는 Int 를 매개변수로 갖고 String 을 리턴해주는 어떤 함수를 매개변수로 받는다.
-  test 함수에 들어갈 매개변수인  logging 함수는 보는 바와 같이 Int 형을 매개변수로 갖고 String 을 리턴해주는 함수이다.


다음 코드는 좀 더 복잡하게 꼬아 놓았다.
apply 메소드는 매개변수로 함수를 받는데 그 함수의 모양이 String 을 받아서 String 을 리턴해주는것이 아니라 String 을 받아서 다시 함수를 리턴해 준다. 그 함수는 String 을 받아서  String 을 리턴해주는 함수이다.
사실 글로써 설명하니깐 더 헥깔릴거라 본다. ;;

따라서 람다식의 모양이 x => y => x + y 이 되었다.
설명하자면 x 를 매개변수로 받아서 y => x + y 라는 함수를 리턴한다는 것이다. 


object Test {
type HandlerProps = String => String
def apply(f : String => HandlerProps): Unit = {
val g = f("HELLO")
log(g("world"))
}
}


object lambdaTest extends App {

Test{
x => y => x + y
}
} 결과 : HELLOworld

실제 프로젝트에서는 이런 함수합성에 관한 코드를 많이 보게 될 것이기 때문에 익숙해져야한다.

Comments