람다

서현서현·2023년 8월 6일
0

JAVA

목록 보기
24/27

Lambda

  • 함수적 프로그래밍의 형태로 재사용 가능한 코드블록이다.
  • 기존의 익명내부클래스를 이용하여 간결한 처리가 가능하다.

sort로 예시를 들어보자면

public void sortByAnonymous() {
	Arrays.sort(langs, new Comparator<String>{
    	@Override
        public int compare(String o1,o2){
        	return o1.compareTo(o2);
        }
    });
}

이렇게 익명클래스로 구현하던 comparator를 람다로 간결하게 표현
public void sortByLambda() {
	Arrays.sort(langs, new Comparator<String>{
    	(o1,o2) -> {
        	return o2.compareTo(o1);
    });
}

문법

문법을 몇가지 간단하게 정리해보자
@FunctionalInterface : 컴파일러가 하나의 abstract method만 있음을 체크한다. 두개의 메소드 존재시 오류가 발생! abstract가 2개이상 존재할경우 여전히 익명의 innerClass를 사용한다.

@FunctionalInterface
interface Lambda {
	void lamb();
}

public class Test{
	public static void main(String[] args){
    	Lambda l1 = () -> System.out.println("실행");
        l1.lamb();
    }
}
@FunctionalInterface
interface Lambda {
	void lamb(String str);
}

public class Test{
	public static void main(String[] args){
    	Lambda l1 = (str) -> System.out.println(str);
        Lambda l2 = System.out::println; //이중콜론문법도 ㄱㄴ
        l1.lamb("실행");
    }
}
@FunctionalInterface
interface Lambda {
	String lamb();
}

public class Test{
	public static void main(String[] args){
    	Lambda l1 = () -> {
        	return "data";
        }
        l1.lamb();
    }
}
@FunctionalInterface
interface Lambda {
	String lamb(Stirng str);
}

public class Test{
	public static void main(String[] args){
    	Lambda l1 = (o1) -> {
        	return o1+"data";
        }
        l1.lamb("go ");
    }
}

0개의 댓글