YJ의 새벽
JAVA ( 람다식 ) 본문
- 람다식??
함수는 일반적 용어, 메서드는 객체지향개념.
함수는 클래스에 독립적, 메서드는 클래스에 종속.
근본은 같다.
--익명(이름이없는) 함수
--함수 (메서드) 를 간단한 식 으로 표현하는 방법.
--반환값이 있을때, return 문 생략가능. ( ; 세미콜론 ) 안붙인다.
--람다식은 익명 함수가 아니라 익명 객체이다 !
public class Example2 {
public static void main(String[] args) {
// Object obj = (a , b) -> a > b ? a : b ; //람다식 , 익명객체.
Object obj = new Object() {
int max ( int a , int b ) { // <--람다식을 풀어서 쓴다면
return a > b ? a : b ;
}
};
int value = obj.max(3 , 5); // Object 에는 max() 가 없다. 오류.
//사용하려면, 함수형 인터페이스 필요.
}
}
- 함수형 인터페이스 ?
--단 하나의 추상 메서드만 선언된 인터페이스.
@FunctionalInterFace
--함수형 인터페이스 타입의 참조변수로, 람다식을 참조할 수 있다.
public class Example2 {
public static void main(String[] args) {
// Object obj = (a , b) -> a > b ? a : b ; //람다식 , 익명객체.
// MyFunction f = new MyFunction() {
// public int max ( int a , int b ) { // <--람다식을 풀어서 쓴다면
// return a > b ? a : b ;
// }
// };
MyFunction f = (a , b) -> a > b ? a : b ; // 람다식.익명객체
//람다식다루기위한 참조변수 타입은
//함수형 인터페이스.
int value = f.max(3 , 5); // 사용하려면, 함수형 인터페이스 필요.
System.out.println(value); //5
}
}
@FunctionalInterface // 단하나의 추상메서드를 가지고있는지 확인해줌.
interface MyFunction {
public abstract int max(int a, int b) ; //추상메서드를 이용하여
// 람다식(max) 를 불러옴.
}
EX ))) 여러 람다식 사용방법.
@FunctionalInterface
interface MyFunction {
void run(); // == public abstract void run()
}
public class Example2 {
static void execute(MyFunction f) { //매개변수타입이 MyFunction인 메서드
f.run();
}
static MyFunction getMyFunction() { //반환타입이 MyFunction인 메서드
//MyFunction f = () -> System.out.println("f3.run()");
//return f; 한줄로줄이면
return () -> System.out.println("f3.run()");
}
public static void main(String[] args) {
MyFunction f1 = () -> System.out.println("f1.run()"); //람다식으로 run구현
MyFunction f2 = new MyFunction() { //익명클래스로 run구현
public void run() { //public 반드시 붙이기.
System.out.println("f2.run()");
}
};
MyFunction f3 = getMyFunction();
f1.run(); //"f1.run"
f2.run(); //"f2.run"
f3.run(); //"f3.run"
execute(f1); // "f1.run"
execute( () -> System.out.println("run()") ); // "run()"
}
}
'SelfStudy > JAVA' 카테고리의 다른 글
JAVA ( 메서드참조 ) (0) | 2023.02.09 |
---|---|
JAVA ( 함수형인터페이스 ) (0) | 2023.02.09 |
JAVA ( 쓰레드의 동기화 ) (0) | 2023.02.08 |
JAVA (쓰레드의 메서드) (0) | 2023.02.07 |
JAVA ( 데몬 쓰레드 ) (0) | 2023.02.07 |
Comments