| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- BACK-END
- 알고리즘
- 디자인 패턴
- spring
- 미니정리
- JavaScript
- oracle
- 프런트엔드
- 자바
- 코드 테스트
- 정리
- 데이터베이스
- 스프링
- 코드테스트
- node.js
- 서버
- jpa
- 스프링부트
- 쿼리
- web
- 프론트엔드
- 프로그래머스
- 자바스크립트
- java
- MySQL
- SQL
- jsp
- Next.js
- 오라클
- 백엔드
- Today
- Total
참치코더의 꿈 메모장
Java// 람다식 본문
람다식
람다식은 간단히 말해서 객체지향언어인 java를 절차 지향언어인 함수(익명함수)처럼 메서드를 사용하는 것이다.
|
1
2
3
|
int max(int a, int b){
return a>b ? a : b;
}
|
cs |
위와 같은 일반적인 max 메서드가 있다고 가정한다면 이러한 메서드를
|
1
|
(int a, int b) -> a>b? a:b
|
cs |
이러한 형식으로 바꾸는 것이다. 반환타입과 메서드이름을 삭제하고 매개변수와 메서드 안에 있던 내용만 사용해서 적으면 된다.
위와 같이 반환값이 있는 경우에는 return 문 대신에 식으로 대신할수 있는데 식의 연산결과가 자동적으로 반환값이 된다.
또한 선언된 매개변수가 1개 일때는 매개변수를 감싸고 있는 괄호를 없애서 사용이 가능하다.
함수형 인터페이스
람다식은 익명함수 이기 때문에 이러한 익명 함수의 메서드를 호출하기 위해서는 참조변수가 존재하여야 한다.
타입 X = 람다식;
여기서 타입을 인터페이스나 메서드를 사용할수 있는데 인터페이스를 선언을 해서 이러한 인터페이스를 람다식을 이용해서
완성시킬수가 있다. 이것을 함수형 인터페이스라고 한다.
|
1
2
3
4
5
6
7
8
9
10
|
interface MyFunction {
public abstract int max(int a, int b);
}
class Ex {
public static void main(String[] args){
MyFunction f = (int a, int b) -> a > b ? a : b;
}
}
|
cs |
함수형 인터페이스를 생성하고(메서드는 한개만 존재해야 한다 static 제외) 뭐 main클래스나 내가 새로 생성한 클래스에서 추상메서드를 구현하면 된다. 구현할때는 기존에 메서드로 만드는 방법이 있지만 위에처럼 람다식으로 출력도 가능하다.
람다식의 타입과 형변환
함수형 인터페이스로 람다식을 참조할 수 있을 뿐이고 람다식과 인터페이스의 타입이 다를 수가 있다.
람다식 자체가 익명함수이고 타입을 정해서 만드는것이 아니기 때문에 어떤 값이 들어가 있는지를 모르기 때문이다.
따라서 뭔가 값이 애매하다고 느낄때나 양변의 타입을 일치시키기 위해서 형변환을 해야한다.
|
1
2
3
4
5
6
7
|
MyFunction f = (MyFunction)( () -> { } );
/*
람다식은 오직 함수형 인터페이스로만 형변환이 가능하다
다른값을 사용하다고 싶다면 함수형 인터페이스로 형변환 한다음
다른값으로 형변환하면된다.
*/
Object obj = (Object)(MyFunction)( () -> { } );
|
cs |
'JAVA' 카테고리의 다른 글
| 2021/07/09 JAVA - 과제 - 숫자 야구 게임 (0) | 2021.07.09 |
|---|---|
| 20210708 JAVA 과제 - '탄수화물 중독' 자가 진단 하기 (0) | 2021.07.08 |
| 210706 java - 변수, 기본 타입 (0) | 2021.07.06 |
| Java// java.util.function 패키지 (0) | 2020.04.22 |
| JAVA// Calendar & DATE (0) | 2020.02.16 |