인프런 커뮤니티 질문&답변
기출 25년 2회 코드문제-1 람다
해결된 질문
작성
·
32
0
안녕하세요 9분 48초 인터페이스와 예외처리 질문입니다. 헷갈리는 부분이 있어 질문이 두개가 있습니다.
run(f) 는 런메소드 내부에서 f.app3이 호출 되었지만 f기 때문에 람다함수로 가서 리턴값이 7로 나오는건가요? 만약 run(3)이었다면 리턴값 3이 정답이 되나요? -질문 1
run(n->n+9) 에선 f가 아니여서 f. app3 실행후 리턴값 3->3+9 = 12출력 하고 끝나는건가요? 그래서 통째로 계산하여 (2번) run( (1번) n->n+9) 1번 풀고 run(12)를 다시 돌리지 않고 끝내는건가요? -질문 2
답변 기다리겠습니다 감사합니다 !
답변 2
0
안녕하세요, 답변드립니다.
질문1:
run(f) 는 run 메소드 내부에서 f.app(3)이 호출되었지만 f 때문에 람다함수로 가서 리턴값이 7로 나오는건가요?
맞습니다. 코드의 흐름은
run(f) 호출 → f.app(3) 실행 → 람다 함수의 x에 3이 전달됨
if (x > 2) → 3 > 2는 true이므로 throw new Exception() 실행
예외가 발생하여 catch 블록으로 이동 → return 7
이렇게 됩니다. 만약 run(3)이면 오류로 코드가 실행되지 않습니다.
run 메서드는 타입 자체가 F 타입이어야 하는데, 3은 int라서 타입이 달라서 안됩니다.
질문2:
run(n->n+9) 에선 f가 아니여서 f. app3 실행후 리턴값 3->3+9 = 12출력 하고 끝나는건가요?
f가 아니어서..도 맞긴한데, 그렇게 해석하기 보다 run(n -> n+9) 호출할 때 아예 새로운 람다 함수가 전달됩니다.
run 메서드 내부에서 f가 n->n+9가 되고 람다 함수가 실행됩니다. n에 3이 전달되어서 3+9가 되는 것입니다.
예외가 발생하지 않았기 때문에 12가 리턴이 되는 것이고요. 그냥 거기서 코드가 끝납니다.
람다식은 그 자체가 이름 없이 실행되는 함수 정도로만 생각하시면 되고, 깊게 생각하실 필요가 없습니다. 자주 나오지도 않는 개념이라서 이런 것이 있구나 정도 생각하시면 되겠습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 이준재님.
질문하신 내용은 Java의 람다식과 함수형 프로그래밍, 그리고 인터페이스 관련 내용입니다. Java에서 함수형 프로그래밍을 구현할 때, 함수형 인터페이스와 람다식을 같이 사용하게 되는데, 이 두 가지 질문에 대해 아래와 같이 설명드리겠습니다.
질문 1: run(f) 에 대한 설명
run(f)에서f.app(3)이 호출되는 부분은f가 함수형 인터페이스를 구현한 람다식이기 때문입니다.
- 그러므로
f.app(3)가 실행될 때, 해당 람다식의 몸체가 실행됩니다.
- 일반적으로, 람다식은
f와 같은 형태로 표현되며 구현된 코드를 통해 특정 연산을 수행합니다.
run(3)은 맞지 않는 호출입니다.run메서드가 함수형 인터페이스를 인자로 기대하고 있기 때문에,3이라는 숫자 대신 함수형 인터페이스 타입의 람다식을 인자로 전달해야 합니다.
질문 2: run(n -> n + 9) 에 대한 설명
run(n -> n + 9)에서는n -> n + 9가 함수형 인터페이스f에 대응되는 람다식으로 사용됩니다.
- 이때,
f.app(3)이 호출되면n은3으로 할당되어3 + 9 = 12가 반환됩니다.
run메서드의 동작은f.app(3)의 결과를 단순히 반환하는 것이며, 다른 연산(예시run(12))을 수행하지 않습니다. 즉, 첫 번째 run 호출의 결과로 12가 반환되고 종료됩니다.
람다식을 활용한 함수형 프로그래밍에서는 이러한 패턴이 자주 등장하며, 각각의 함수 호출이 어떤 값을 취하는지 이해하는 것이 핵심입니다. 비슷한 주제에 대한 다른 게시물도 참고하시면 더 이해하시기 좋을 것 같습니다:
- Java의 람다식 기초: 람다식의 기본 개념과 사례를 다룹니다.
- 람다식 활용 방법: 다양한 람다 활용법과 메소드 참조 예제를 제공합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





