Lambda

hyyyynjn·2021년 3월 13일
1

자바 스터디

목록 보기
3/15
post-thumbnail
  1. Stream, lambda에 대해서 설명하기

람다식

  • 식별자 없이 실행 가능한 함수이다.
    • 다시말해, 함수를 따로 만들지 않고 코드 한줄에 함수를 써서 그것을 호출하는 방식이다.

사용법

  1. (매개변수1, 매개변수2,...) -> {함수몸체}
  2. (매개변수) -> 함수몸체
  3. (매개변수) -> {return 0;}
  • 매개변수 : 함수몸체를 실행하기 위해 필요한 값을 제공하는 역할을 한다.
    • 매개변수 이름은 개발자가 자유롭게 지정할 수 있고, 인자 타입을 명시하지 않아도 된다.

예제1

@FunctionalInterface // 함수가 하나만 존재하는 Interface
interface Say{
    int someting(int a,int b);
}
class Person{
    public void hi(Say line) {
	int number = line.someting(3,4);
	System.out.println("Number is "+number);
    }
}
  • @FunctionalInterface : 구현해야 할 추상 메소드가 하나만 정의된 인터페이스
    • 두 개 이상의 메소드가 선언되면 오류를 발생시킨다.

람다식 없이 사용

Person rin = new Person();
rin.hi(new Say() {
    public int someting(int a, int b) {
	System.out.println("My Name is Coding-Factory");
	System.out.println("Nice to meet you");
	System.out.println("parameter number is "+a+","+b);
	return 7;
    }
});

람다식 사용

Person rin = new Person();
rin.hi((a,b) ->{
	System.out.println("This is Coding-Factory!");
	System.out.println("Tank you Lamda");
	System.out.println("parameter number is "+a+","+b);
    return 7;
});

예제2

interface Compare{
    public int compareTo(int a, int b);
}

public class Ramda2 {

    //람다식 문법 (매개변수 목록)->{실행문}
    public static void exec(Compare com) {
        int k = 10;
	int m = 20;
	int value = com.compareTo(k, m);
	System.out.println(value);
    }
    
    public static void main(String[] args) {
	exec((i,j)->{ // 람다식 활용
	    return i+j;
	});
    }
}

예제3

public class Ramda3 {
    @FunctionalInterface//함수형 인터페이스 체크 어노테이션
    public interface MyNumber{
	  int getMax(int num1, int num2);
    }
    
    public static void main(String[] args) {
	  MyNumber max = (x,y)->(x>=y)? x:y; // 람다식 사용
	  System.out.println(max.getMax(10, 30));
    }
}

Runnable 인스턴스 생성

public class RunnableEx {
    public static void main(String[] args) {
        Runnable runnable = () -> {
            for (int i = 0; i < 30; i++) {
                System.out.println(i);
            }
        };
        Thread thread = new Thread(runnable);
        thread.start();
    }
}

Thread 호출

// 1
Thread thread = new Thread( () -> {
    for (int i = 0; i < 10; i++) {
        System.out.println(i);
    }
});

// 2
new Thread(()->{
      System.out.println("Welcome Heejin blog");
}).start();

장단점

장점

  1. 코드가 간결해진다
  2. 가독성이 향상된다
  3. 함수를 만드는 과정이 줄어든다
  4. 병렬 프로그래밍이 용이하다

단점

  1. 람다를 활용한 무명함수는 재활용이 불가능하다.
  2. 디버깅이 까다롭다
  3. 재귀로 만들기에는 부적합하다.

0개의 댓글