Cohe
14 람다식 본문
728x90
반응형
람다식
- 고전적인 방식인 객체지향적인 프로그램 방식이 아닌 함수적 프로그래밍을 위한 기법에 사용
- 람다는 익명 함수를 위한 방식입니다.
- 람다는 객체지향적인 방식보다 간결하게 표현할 수 있다는 장점이 있다.
- 다만 처음에는 익숙하지 않아 혼란스러울 수 있다.
- 람다식은 함수적인터페이스를 자료형으로 사용
- 함수적 인터페이스란? 추상 메서드가 한개만 존재하는 인터페이스를 의미
- 람다식의 표현 :
- (타입 매개변수) - > { 실행문들}
- 매개변수가 없는 경우 : () - > {} 식 표현이 됨
- 매개변수가 한개인 경우 : 매개변수 → {}
- 람다식은 함수적 인터페이스를 사용하여 (추상 메서드 딱 하나만 있는 것 ) 인터페이스 변수 = 람다식; 같은 구조로 처리가 된다.
- @FunctionalInterface //해당 인터페이스가 함수적 인터페이스임을 알려줌
- 람다식에 사용되는 this
- 람다식은 내부 클래스의 익명객체로 인식하며, 내부에 this는 람다 객체 그 자신을 의미
- 즉, 내부 클래스와 같이 람다 표현식 내에서 지역 변수 접근시 지역변수는 상수화 해야 함
- 자바의 표준 API에서 한개의 추상 메서드를 가진 인터페이스들은 모두 람다식으로 사용할 수있다.
- 람다에 사용되는 함수적 인터페이스를 java.util.function 패키지에 설정해서 사용하고 있다.
- 인터페이스 조율 크게 5가지
- cunsumer : 매개 변수 0, 리턴x
package G_java;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.DoubleConsumer;
import java.util.function.ObjIntConsumer;
public class G02_ConsumerEx {
//Consumer<T> = 추상 메서드 void accept(T t)
//BiCunsumer<T,U> = 추상 메서드 : void accept(T t, U u)
//xxxConsumer - 각 데이터 타입에 따른 Consumer(IntConsumer, longConsumer, doubleConsumer)
//ObjxxxConsumer - T객체와 기본데이터 타입의 매개변수를 받는 Consumer...
public static void main(String[] args) {
//Consumer 인터페이스
Consumer<String> c1 = name -> System.out.println("제이름은 "+name+"입니다.");
c1.accept("null");
BiConsumer<String,Integer> c2 = (name, age) -> {
System.out.printf("제이름은 %s입니다. 나이는 %d입니다", name, age);
};
c2.accept("홍길동", 20);
DoubleConsumer c3= (score) ->{
System.out.printf("제 점수는요 %d 입니다.",score);
};
c3.accept(98.6);
ObjIntConsumer<String> c4 = (lecture, i) ->{
System.out.printf("제 %s의 점수는 %d 점 입니다.",lecture,i);
};
c4.accept("자바프로그래밍", 90);
}
}
-
- Supplier : 매개 변수 x, 리턴0
- Supllier<T> T get()
- BooleanSupplier boolean getAsBoolean()
- DoubleSupplier double getAsDouble()
- IntSupplier int getAsInt()
- LongSupplier long getAsLong()
- Supplier : 매개 변수 x, 리턴0
package G_java;
import java.util.function.DoubleSupplier;
import java.util.function.IntSupplier;
import java.util.function.Supplier;
public class G03_supplierEx {
public static void main(String[] args) {
Supplier<String> s1 = ()->{
return "홍길동";
};
System.out.println(s1.get());
s1 = ()-> "이순신";
System.out.println(s1.get());
IntSupplier s2 = ()->{
int num = (int)(Math.random()*6)+1;
return num;
};
System.out.println(s2.getAsInt());
DoubleSupplier s3 = () -> Math.PI;
System.out.println("원주율 값 : "+s3.getAsDouble());
Supplier<Integer> s5 = ()->{
return 1;
};
System.out.println(s5.get());
}
}
-
- Function : 매개 변수 0, 리턴0
- apply를 갖고 있다.
- Function : 매개 변수 0, 리턴0
/*
*
* Funtion 인터페이스는 매개변수와 리턴값이 모두 있는 추상 메서드 apply를 가지고 있음.
* Function인터페이스는 주로 매개변수로 받은 값을 리턴값으로 매핑하여 사용.
*
*
* 인터페이스 메서드
* Function<T,R> R apply(T t)
* BiFunction<T,U,R> R apply(T t, U u)
* xxxFuntion<R> R apply(xxx x)
* xxxToxxxFunction yyy applyAs(yyy)(xxx x) ex) double applyAsDouble(int x)
* ToxxxBiFunction xxx applyAsxxx(T t, U u)
* ToxxxFunction xxx applyAsxxx(T t )
*
*/
-
- Operator : 매개 변수 0, 리턴0 (연산 결과)
- 연산하는 것
- predicate : 매개 변수 0, 리턴0 (boolean)
- Operator : 매개 변수 0, 리턴0 (연산 결과)
728x90
반응형
'개발 언어 > JAVA' 카테고리의 다른 글
16. ParallelStream, Thread (0) | 2024.03.27 |
---|---|
15. Operator, Stream (0) | 2024.03.27 |
13 객체 정렬을 위한 객체 간 크기 비교, 제너릭 , File 입출력 (0) | 2024.03.21 |
12 JAVA API (0) | 2024.03.20 |
11 Exception (0) | 2024.03.19 |