Cohe

14 람다식 본문

개발 언어/JAVA

14 람다식

코헤0121 2024. 3. 25. 17:42
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()
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를 갖고 있다.
	/*
	 * 
	 * 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)

'개발 언어 > 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