1.1 람다식이란?
- 메서드를 하나의 식으로 표현한 것이다. 함수를 간략하면서도, 명확한 식으로 표현할 수 있게 해준다.
- 함수형 언어의 특징을 가지고 있다.
int[] arr = new int[5];
Arrays.setAll(arr,(i)->(int)(Math.random()*5)+1);
다음의 문장에서 (i)->(int) (Math.random()\*5)+1);
이 람다식이다.
메서드로 하는 일을 표현하자면
int method(){
return (int)(Math.random()*5)+1;
}
이다.
- 모든 메서드는 클래스에 포함되어야 하기 때문에 클래스도 필요하고, 객체도 생성해야 메서드를 호출할 수 있지만, 람다의 등장으로 그럴 필요가 없어졌다.
- 람다는 메서드의 매개변수로 전달되는것도 가능하다.
1.2 람다식 작성하기
람다식은 익명 함수 답게 메서드에서 이름과 반환타입을 제거하고, 매개변수 선언부와 몸통 사이에 ->
를 추가한다
- 반환 값이 있는 메서드의 경우 return 문 대신 식으로 대신 할 수 있다. 식의 연산 결과가 자동적으로 반환 값이 된다.
(int a, int b) -> a>b?a:b
- 람다식에 선언된 매개변수의 타입은 추론이 가능한 경우 생략이 가능하다! 거의 대부분의 경우 추론이 가능하다!!
- 매개변수가 1개뿐인 경우에는 괄호 () 를 생략할 수 있다. 단 매개변수의 타입이 있다면 생략이 불가하다.
a->a*a // OK
int a -> a*a // Error
(String name,int i)->System.out.println(name,i)
- return 문인 경우엔 생략이 불가하다.
1.3 함수형 인터페이스
- 자바에서 모든 메서드는 클래스에 포함되어야 한다. 람다식은 어떤 클래스에 포함되는 것일까?
- 람다식은 익명클래스의 객체와 동등하다.
- 그렇다면 람다식으로 정의된 익명 객체의 메서드를 호출하려면 -> 참조변수가 있어야 한다!
- 참조변수의 타입은? -> 클래스 또는 인터페이스가 가능하다.
- 함수형 인터페이스
new Object(){
int max(int a,int b){
return a>b?a:b;
}
}
여기서 object.max(3,5) 가 호출이 되지 않는다. 왜? Object라는 클래스에는 max라는 메서드가 없기 때문에!
그렇다면 함수형 인터페이스를 사용해서 호출해보자.
MyFuntion f= new MyFuntion(){
public int max(int a,int b){
return a>b?a:b;
}
};
int big = f.max(3,5);
- 여기서는 f라는 함수형 인터페이스에 메서드가 max로 들어와서 사용이 가능하다. 여기서 정의된 max 메서드는 람다식으로 변경이 가능하다!
Myfuntion f = (a,b)->a>b?a:b;
int value = f.max(3,5);
@FunctionalInterface
interface MyFuntion2{
int max(int a,int b);
}
이렇게 함수형 인터페이스와 람다식을 이용해 줄일 수 있다.
'Java' 카테고리의 다른 글
Java 기본 Class (0) | 2024.04.04 |
---|---|
Java 객체지향 3 (0) | 2024.04.04 |
JAVA 예외처리, Thread (0) | 2024.04.04 |
JAVA 객체지향 (0) | 2024.04.02 |
인프런 워밍업 클래스 5일차 과제 (0) | 2024.02.23 |
1.1 람다식이란?
- 메서드를 하나의 식으로 표현한 것이다. 함수를 간략하면서도, 명확한 식으로 표현할 수 있게 해준다.
- 함수형 언어의 특징을 가지고 있다.
int[] arr = new int[5];
Arrays.setAll(arr,(i)->(int)(Math.random()*5)+1);
다음의 문장에서 (i)->(int) (Math.random()\*5)+1);
이 람다식이다.
메서드로 하는 일을 표현하자면
int method(){
return (int)(Math.random()*5)+1;
}
이다.
- 모든 메서드는 클래스에 포함되어야 하기 때문에 클래스도 필요하고, 객체도 생성해야 메서드를 호출할 수 있지만, 람다의 등장으로 그럴 필요가 없어졌다.
- 람다는 메서드의 매개변수로 전달되는것도 가능하다.
1.2 람다식 작성하기
람다식은 익명 함수 답게 메서드에서 이름과 반환타입을 제거하고, 매개변수 선언부와 몸통 사이에 ->
를 추가한다
- 반환 값이 있는 메서드의 경우 return 문 대신 식으로 대신 할 수 있다. 식의 연산 결과가 자동적으로 반환 값이 된다.
(int a, int b) -> a>b?a:b
- 람다식에 선언된 매개변수의 타입은 추론이 가능한 경우 생략이 가능하다! 거의 대부분의 경우 추론이 가능하다!!
- 매개변수가 1개뿐인 경우에는 괄호 () 를 생략할 수 있다. 단 매개변수의 타입이 있다면 생략이 불가하다.
a->a*a // OK
int a -> a*a // Error
(String name,int i)->System.out.println(name,i)
- return 문인 경우엔 생략이 불가하다.
1.3 함수형 인터페이스
- 자바에서 모든 메서드는 클래스에 포함되어야 한다. 람다식은 어떤 클래스에 포함되는 것일까?
- 람다식은 익명클래스의 객체와 동등하다.
- 그렇다면 람다식으로 정의된 익명 객체의 메서드를 호출하려면 -> 참조변수가 있어야 한다!
- 참조변수의 타입은? -> 클래스 또는 인터페이스가 가능하다.
- 함수형 인터페이스
new Object(){
int max(int a,int b){
return a>b?a:b;
}
}
여기서 object.max(3,5) 가 호출이 되지 않는다. 왜? Object라는 클래스에는 max라는 메서드가 없기 때문에!
그렇다면 함수형 인터페이스를 사용해서 호출해보자.
MyFuntion f= new MyFuntion(){
public int max(int a,int b){
return a>b?a:b;
}
};
int big = f.max(3,5);
- 여기서는 f라는 함수형 인터페이스에 메서드가 max로 들어와서 사용이 가능하다. 여기서 정의된 max 메서드는 람다식으로 변경이 가능하다!
Myfuntion f = (a,b)->a>b?a:b;
int value = f.max(3,5);
@FunctionalInterface
interface MyFuntion2{
int max(int a,int b);
}
이렇게 함수형 인터페이스와 람다식을 이용해 줄일 수 있다.
'Java' 카테고리의 다른 글
Java 기본 Class (0) | 2024.04.04 |
---|---|
Java 객체지향 3 (0) | 2024.04.04 |
JAVA 예외처리, Thread (0) | 2024.04.04 |
JAVA 객체지향 (0) | 2024.04.02 |
인프런 워밍업 클래스 5일차 과제 (0) | 2024.02.23 |