Part3 메소드와 함수) 익명함수2

b4failrise ㅣ 2019. 2. 22. 17:04

add1은 메소드 정의 강의에서 살펴본 대로 메소드가 한 줄일 경우 중괄호를 생략한 형태입니다.
add2는 익명 함수를 상수 add2에 저장하고 있습니다. 
add3은 _를 이용했는데요. 첫 번째 _자리에 첫 번째 매개변수가 대입되고, 두 번째 _자리에 두 번째 매개변수가 대입됩니다.
add4와 같이 표현할 수도 있지만 자주 사용하는 방법은 아닙니다.

_를 이용한 함수의 표기 방식은 익명 함수를 고계 함수(Higher order function)에 매개변수로 전달하는 경우에 유용하게 사용할 수 있습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
object LearnScala {    
    // ① 메소드를 정의하는 방식
    def add1(x:Int, y:Int) = x + y 
    
    // ② 익명함수
    val add2 = (x:Int, y:Int) => x + y 
    val mul1 =(x:Int,y:Int) => x * y
    // ③ 익명함수를 정의하는 다른 방식
    val add3:(Int,Int)=>Int = _ + _ 
    val mul2: (Int,Int)=>Int = _ * _
    // ④ 익명함수를 정의하는 또다른 방식(잘 사용 안함)
    val add4 = (_ + _):(Int,Int)=>Int 
    
    def main(args: Array[String]): Unit = {
        // 모두 두 숫자를 더해주는 역할을 하므로 같은 결과를 출력
        println(s"① ${add1(42,13)}")  
        println(s"② ${add2(42,13)}")  
        println(s"③ ${add3(42,13)}")  
        println(s"④ ${add4(42,13)}")  
        println(s"⑤ ${mul1(3, 5)}")
        println(s"⑥ ${mul2(3, 5)}")
    }
}
cs


출력 ① 55
② 55
③ 55
④ 55
⑤ 15
⑥ 15