2024. 2. 19. 23:59ㆍ[Way to PM] 백 엔드
1. 람다식에 대한 설명으로 틀린것은?
- 람다식은 함수형 인터페이스의 익명 구현 객체를 생성한다.
- 매개 변수가 없을 경우 ( ) → { … } 형태로 작성한다.
- (x, y) → { return x + y; }는 (x, y) → x + y;로 바꿀 수 있다.
- @FunctionalInterface가 기술된 인터페이스만 람다식으로 표현이 가능하다.
review
1. 람다식은 함수형 인터페이스(단 하나의 추상메서드를 가지고 있는 인터페이스)의 구현체를 간결히 표현할 수 있는 문법이다. 이를 통해 익명 구현 객체를 생성하여, 클래스를 별도로 생성하지 않고 인터페이스의 구현을 제공할 수 있다.
2. 매개변수가 없을 경우 ()로 표현하며, {수행문}을 통해 매개변수없이 수행문을 실행한다. 가령 예를들면, () -> {System.out.println("hello world");}를 수행하면 "hello world"를 출력하는 람다식이 된다. 하지만 여러줄이면 중괄호로 포함해야한다.
3. 수행문이 한 줄이고 값을 반환하든, 반환하지 않든 중괄호를 생략하여 표현할 수 있다.
4. @FunctionalInterface 어노테이션은 인터페이스내 추상메서드를 한 개로 제한할 수 있다.(두 개 선언시 오류발생) 하지만 선언하지 않아도 인터페이스 내 추상메서드가 한 개이면 함수형 인터페이스로 기능한다.
2. 메소드 참조에 대한 설명으로 틀린 것은?
- 메소드 참조는 함수적 인터페이스의 익명 구현 객체를 생성한다.
- 인스턴스 메소드는 “참조변수::메소드”로 기술한다.
- 정적 메소드는 “클래스::메소드”로 기술한다.
- 생성자 참조인 “클래스::new”는 매개 변수가 없는 디폴트 생성자만 호출한다.
review
1. 익명 구현 객체 생성을 통해 메서드를 사용 가능케하고 표현식을 간결하게 만들 수 있다.
2. 인스턴스 메서드 참조는 특정 객체의 메서드를 참조할 때 사용된다. 가령 예를 들면 예를 들어, String 객체의 toLowerCase 메소드 참조는 strInstance::toLowerCase와 같이 표현할 수 있
3. 정적 메소드 참조는 클래스의 정적 메소드를 참조할 때 사용되며, 클래스이름::메소드이름 형식으로 표현된다. 예를 들어, Math 클래스의 abs 메소드 참조는 Math::abs와 같이 표현할 수 있다.
4. 사용되는 함수형 인터페이스의 추상 메서드 시그니처(매개 변수의 타입과 수, 반환 타입)에 따라, 해당 시그니처와 일치하는 생성자를 참조할 수 있다. 예를 들어, Function<String, MyClass> 인터페이스는 String을 매개 변수로 받는 MyClass의 생성자를 참조할 수 있다.
3. 잘못 작성한 람다식은?
- a → a + 3
- a, b → a * b
- x → System.out.println(x/5)
- (x, y) → Math.max(x, y)
review
2. 매개변수가 두 개인 경우, 괄호로 포함해야 한다. (a, b) -> a*b
4. 다음 코드는 컴파일 에러가 발생합니다. 그 이유는?
public class LambdaExample {
public static int method(int x, int y) {
IntSupplier supplier = () -> {
x *= 10;
int result = x + y;
return result;
};
int result = supplier.getAsInt();
return result;
}
public static void main(String[] args) {
System.out.println(method(3, 5));
}
}
review
람다식 내에선 변수의 변화가 있으면 안되나(람다식 내부의 매개변수는 final로 취급하기/받기 때문), x*=10에 의해 변수 값이 변하고 있다. 이를 해결하기 위해
int newX = x * 10; // x의 값을 변경하는 대신 새 변수에 할당
int result = newX + y;
이처럼 x값을 변화시키지 않고 변수에 할당해 해결가능하다.
'[Way to PM] 백 엔드' 카테고리의 다른 글
[Way to PM] 백 엔드 - Spring Boot 호환성 해결 (0) | 2024.02.28 |
---|---|
[Way to PM] 백엔드(자바) - Collection(List, Set, Map)의 특성 (0) | 2024.02.21 |
[Way to PM] 백엔드(자바) - 다형성과 생성자 함수 (0) | 2024.02.13 |
[Way to PM] 백엔드(자바) - 컬렉션, 문자열, 배열의 길이(크기) 구하기 및 컬렉션, 배열에서 특정 객체(요소) 가져오기 (0) | 2024.02.13 |
[Way to PM] 백엔드(자바) - 오버라이딩과 다형성 (1) | 2024.02.12 |