일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- File입출력
- Connection
- 변수
- JSP
- 인터페이스
- array
- java
- for문
- 에러
- 예외
- try-catch
- 다형성
- 람다식
- 객체지향
- Interface
- 커넥션 풀
- 예외처리
- I/O
- 입출력
- 내장 객체 영역
- StringBuffer클래스
- StringBuffer
- 메서드
- 제어자
- 상속
- 배열
- 객체
- ToString
- 접근제어자
- DB
Archives
- Today
- Total
ksouth9
람다식(Lambda expression)(1) 본문
람다식
람다식은 간단히 말해서 메서드를 하나의 '식(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 |