본문 바로가기
JAVA/JAVA복습(멘토씨리즈 자바)

[JAVA복습] 17. 람다식

by ssunooo 2024. 7. 29.

 

 

1. 핵심 정리

 

람다식이란?

JDK 1.8부터 자바에서 지원하는 함수형 프로그래밍을 람다식(Lambda expression)이라고 함

람다식은 함수의 이름이 없는 익명 함수(anonymous funtion)를 만들기 위한 표현식

 

람다식은 '익명 함수' 답게 메서드의 이름과 반환 타입을 제거하고 화살표 기호(→)를 사용해 구현

 

메서드를 람다식으로 표현하면 다음과 같음

메서드 람다식
int sum(int a,int b) {
     return a+b;
}
(int a,int b) → {return a+b};
(int a,int b) → a+b;
(a,b) → a+b;
int sum(int a,int b) {
     int result=a+b;
     return result;
}
(int a,int b) → {return a+b};
(int a,b) → {return a+b};
String getName(String str); (String str) → {return str};
(str) → str;
str → str;

- 메서드의 구문이 return만 존재하는 경우에는 중괄호와 return을 생략 가능

- 메서드의 파라미터가 1개인 경우에는 파라미터의 소괄호를 생략 가능

 

람다식 선언

람다식을 사용하기 위해서는 함수형 인터페이스를 선언

함수형 인터페이스는 익명 함수와 매개변수만으로 구현되기 때문에 하나의 메서드만을 가져야 함

 

@FunctionalInterface 애노테이션

함수형 인터페이스 선언 시 @FunctionalInterface 애노테이션을 사용하면 메서드를 두 개 이상

선언하는 개발자의 실수를 방지 가능

 


 

2. 응용 문제

 

Q1. 다음 중 람다식에 대한 설명으로 틀린 것은 무엇입니까?

  1. 람다식은 함수형 인터페이스의 익명 구현 객체를 생성합니다.
  2. 매개 변수가 없을 경우 () → {...} 형태로 작성합니다.
  3. (x,y) → {return x+y;} 는 (x,y) → x+y로 변경할 수 있습니다.
  4.  @FunctionalInterface가 기술된 인터페이스만 람다식으로 표현할 수 있습니다.

A1. 4

 


 

Q2. 다음 중 람다식 표현으로 잘못된 것을 고르세요.

  1. (int a,int b) → {return a+b;};
  2. (s) → System.out.println(s);
  3. str → System.out.println(str);
  4. num01,num02 → Ststem.println(num01+num2);

A2. 4

 


 

Q3. 다음 코드는 컴파일 에러가 발생합니다. 그 이유는 무엇이며, 어떻게 해결해야 할까요?


package section17;

import java.math.BigDecimal;
import java.math.RoundingMode;

interface Calc {
	double round(int point);
}

public class LamdaExample {
	public static void main(String[] args) {
		double val=34.1254886;
		// BigDecimal을 이용한 소수점 자릿수 반올림
		Calc cal=(point) → {
			val=new BigDecimal(val).setScale(point,RoundingMode.HALF_UP).doubleValue();
			return val1;
		};
		System.out.println("소수점 둘째 자리 반올림 : "+cal.round(2));}
	}
}

A3.


package section17;

import java.math.BigDecimal;
import java.math.RoundingMode;

interface Calc {
	double round(int point);
}

public class LamdaExample {
	public static void main(String[] args) {
		final double val=34.1254886;
		// BigDecimal을 이용한 소수점 자릿수 반올림
		Calc cal=(point) -> {
			double val1=new BigDecimal(val).setScale(point,RoundingMode.HALF_UP).doubleValue();
			return val1;
		};
		System.out.println("소수점 둘째 자리 반올림 : "+cal.round(2));
	}
}

 

 

2024.07.29