티스토리 뷰
람다식
메서드를 하나의 식으로 표현한 것. 메서드의 이름과 리턴 값이 없어지므로 익명 함수라고 한다. 만약 메서드를
사용한다면 클래스를 생성하고 객체를 생성해야 함수를 호출할 수 있다. 그러나 람다식을 사용하면 람다식 자체가
함수가 되기 때문에 편리하다.
int[] arr = new int[5];
Arrays.setAll(arr, (i) -> (int)(Math.random()*5) + 1);
int method() {
return (int)(Math.random()*5) + 1;
}
람다식 사용법
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
람다식(익명 함수)를 호출할 수 있었던 이유
자바에서 모든 메서드는 클래스 내에 포함되어있어야 하는데 람다식은 어디에 포함되는지 의문을 가질 수 있다.
람다식은 익명 클래스의 객체와 동등하다고 볼 수 있다.
(int a, int b) -> a>b ? a : b
class Object {
int max(int a, int b) {
return a>b ? a : b;
}
}
람다식을 호출하기 위한 방법
람다식을 일회성으로 사용하는 것이 아닌 여러번 사용하고 싶다면 참조변수에 람다식이 포함된 익명 객체의 주소를
저장하면 된다. 참조변수를 사용하기 위해서는 참조변수에 클래스나 인터페이스가 할당되어야 한다.
interface MyFunction {
public abstract int max(int a, int b);
}
MyFunction f = new MyFunction() {
public int max(int a, int b) {
return a>b ? a : b;
}
};
Myfunction f2 = (int a, int b) -> a > b ? a : b;
int maxValue = f.max(10,20);
int maxValue2 = f2.max(10,20);
람다식 예제
// 람다 적용 전
List<String> list = Arrays.asList("aaa", "abc", "bbbb", "ddd", "eee");
Collections.sort(list, new Comparator<String> {
public int compare(String s1, String s2) {
return s2.compareTo(s1);
}
});
// 람다 적용 후
Collections.sort(list, (s1, s2) -> s2.compareTo(s1));
람다식 형변환
람다식은 익명 객체이고 익명 객체는 타입이 없기 때문에 대입 연산자 사용 시 형변환이 필요하다. 람다식은
오직 함수형 인터페이스로만 형변환이 가능하고 모든 객체의 부모인 Object 타입으로는 형변환 불가능.
interface Myfunction {
void method();
}
Myfunction f = (Myfunction) ( () -> System.out.pringln("여기"));
'Java' 카테고리의 다른 글
객체지향 (0) | 2022.03.20 |
---|---|
[Java] 컬렉션 프레임워크 (0) | 2022.03.13 |
[Java] 람다식 (2) (0) | 2022.03.12 |
[Java] Iterator와 ListIterator (0) | 2022.02.05 |
[Java] Collection 과 List (0) | 2022.02.05 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- SpringSecurity
- 인덱스
- nginx
- 프로그래머스
- EC2
- SpringGraphQL
- ci/cd
- 파일업로드설정
- Java
- N+1
- Oracle
- Travis CI
- 트랜잭션격리성
- ORA-27125
- TCP
- AWS
- 네이버클라우드
- Til
- JPA
- 람다식
- level0
- ddl-auto
- 기술면접
- 운영체제
- 트랜잭션
- OS
- spring
- db
- graphql
- CodeDeploy
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함