ksouth9

람다식(Lambda expression)(1) 본문

Java

람다식(Lambda expression)(1)

ksouth9 2022. 4. 11. 23:22

람다식


람다식은 간단히 말해서 메서드를 하나의 '식(expression)'으로 표현한 것이다.

  • 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해준다.
  • 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, 람다식을 '익명함수'이라고도 한다.

사용방법

람다식은 '익명함수'답게 메서드에서 이름과 반환타입을 제거하고 매개변수 선언부와 몸통 {} 사이에 '->'를 추가한다.

(타입 매개변수, ...) -> {
	문장들
}

'->' 기호는 매개 변수를 이용해서 중괄호 {}를 실행한다는 뜻으로 해석하면 된다.

 

예시

(iint a, int b) -> {
	return a > b ? a : b;
}

반환값이 있는 메서드의 경우, return문 대신 '식(expression)'으로 대신 할 수 있다. 식의 연산결과가 자동적으로 반환값이 된다. 이때는 '문장(statement)'이 아닌 '식'이므로 끝에 ';'을 붙이지 않는다.

(int a, int b) -> a > b ? a : b

람다식에 선언된 매개변수의 타입은 추론이 가능한 경우는 생략이 가능하다. 람다식에 반환타입이 없는 이유도 항상 추론이 가능하기 때문이다.

(a, b) - > a > b ? a : b

선언된 매개변수가 하나뿐인 경우에는 괄호()를 생략할 수 있다. 단 매개변수의 타입이 있으면 괄호()를 생략할 수 없다.

a -> a * a // OK
int a -> a * a // 에러

마찬가지로 괄호{} 안의 문장이 하나일 때는 괄호{}를 생략할 수 있다. 이 때 문장의 끝에 ';'을 붙이지 않아야 한다.

(String name, int i) ->
	System.out.println(name+"="+i)

그러나 괄호{}안의 문장이 return문일 경우 괄호{}를 생략할 수 없다.

 

예시

메서드 람다식
int max(int a, int b) {
        return a > b ? a: b;
}
(int a, int b) -> {return a > b ? a : b;}
(int a, int b) - > a > b ? a : b
(a, b) -> a > b ? a : b
void printVar(String name, int i) {
        System.out.println(name+"="+i);
}
(String name, int i) -> {
        System.out.println(name+"=+i)
}
(name, i) -> {
        System.out.println(name+"="+i)
}
(name, i) ->
        System.out.println(name+"="+i)
메서드 람다식
int square(int x){
        return x * x;
}
(int x) - > {return x * x};
(x) -> x * x
x -> x * x
int roll() {
        return (int) (Math.random()*6);
}
() -> {return (int)(Math.random()*(6);}
() -> (int)(Math.random() 6)
int sumArr (int [] arr) {
        int sum = 0;
        for(int i : arr)
            sum += i;
        return sum;
}
(int [] arr) ->{
        int sum = 0;
        for(int i: arr)
            sum +=i;
        return sum;
}

 

'Java' 카테고리의 다른 글

입출력 I/O(1)  (0) 2022.04.17
람다식(Lambda expression)(2)  (0) 2022.04.16
java.util.StringTokenizer 클래스  (0) 2022.04.06
java.util.Scanner 클래스  (0) 2022.04.05
정규식(Ragular Expression) - java.util.regex 패키지  (0) 2022.04.05