[Java]람다식, Lambda Expression

수경·2023년 8월 17일
0

람다식

  • 함수형 프로그래밍에서 도입
  • 자바에서 람다식 : 컬렉션 조작(= 스트림)
  • 자바의 메소드를 간결하게 표현한 것이다.
  • 람다식은 매개변수를 가지는 코드블럭이다.(==메소드)
  • 자바의 람다식은 인터페이스를 사용해서 만든다.(자바만의 특징)
  • 익명 객체의 (구현된) 추상 메소드를 인터페이스 변수에 저장한다.

람다식 사용하는 방법

  • 인터페이스 변수에 람다식을 저장
  • ex) MyInterface m1 = () -> {};
  • (매개변수) -> {메소드 실행코드}
  • a. (매개변수) : 메소드의 매개변수 리스트와 동일
  • b. ->: 화살표(Arrow), 코드블럭 호출역할
  • c. {실행코드}: 메소드의 구현부와 동일

예제 코드

public class Ex72_Lambda {
	public static void main(String[] args) {
    
		//익명클래스에서 구현한 메소드
		NoParameterNoReturn pr1 = new NoParameterNoReturn() {
			@Override
			public void call() {
				System.out.println("pr1");
			}
		};
		pr1.call();
        
        //람다식에서 구현한 메소드
		NoParameterNoReturn pr2 = () -> {
			System.out.println("pr2");
		};
		pr2.call();
		
		//***블럭 생략 가능(실행문 한줄일 경우)
		NoParameterNoReturn pr3 = () -> System.out.println("pr3");
		pr3.call();
        
		ParameterNoReturn pr4 = (int num) -> System.out.println(num);
		pr4.call(1);
		pr4.call(10);
        
		
		//***매개변수의 자료형 생략 가능 > 클래스를 보고 추측이 가능하기 때문에
		ParameterNoReturn pr5 = (num) -> System.out.println(num);
		pr5.call(20);
		
		//***매개변수의 소괄호 생략 가능
		ParameterNoReturn pr6 = num -> System.out.println(num);		//가장 간소화한 람다식 형태
		
        
		//***매개변수의 소괄호는 매개변수가 1개일때만 생략할 수 있다.
		MultiParameterNoReturn pr7 = (name, age) -> System.out.printf("이름: %s, 나이: %d\n", name, age);
		pr7.call("홍길동", 25);
		
		
		NoParameterReturn pr9 = () -> {
			return 100;
		};
		System.out.println(pr9.call());
		
		//중괄호 생략 시 return 까지 생략하여 가능하다.
		NoParameterReturn pr10 = () -> 100;
		System.out.println(pr10.call());
		
		ParameterReturn pr11 = name -> name.length();
		System.out.println(pr11.call("홍길동"));
	}
}    
        
interface NoParameterNoReturn {
	void call();
}

interface ParameterNoReturn {
	void call(int num);
}

interface MultiParameterNoReturn {
	void call(String name, int age);
}

interface NoParameterReturn {
	int call();
}

interface ParameterReturn {
	int call(String name);
}    

pr1
pr2
pr3
1
10
20
이름: 홍길동, 나이: 25
100
100
3

람다식으로 하는 정렬 코드

public class Ex72_Lambda {
	public static void main(String[] args) {
    	
        //기본 버전
    	nums.sort(new Comparator<Integer>() {
			@Override
			public int compare(Integer o1, Integer o2) {
				return o1-o2;
			}
		});
		
		//간소화1 (오름차순)
		nums.sort((Integer o1, Integer o2)-> {
			return o1-o2;
		});
		
		//간소화2 (내림차순) : 자료형&return 생략
		nums.sort((o1, o2) -> o2-o1);
		
		System.out.println(nums);
    
    }
}
profile
웹백엔드개발자를 꿈꾸는

1개의 댓글

comment-user-thumbnail
2023년 8월 18일

많은 도움이 되었습니다, 감사합니다.

답글 달기