백엔드›API•
5분
•Java 람다식, 정처기 문제로 이해하기
람다식 문법에 대해서 알아보자!
📌 오늘 풀 코드
public class Main {
static interface F {
int apply(int x) throws Exception;
}
public static int run(F f) {
try {
return f.apply(3);
} catch (Exception e) {
return 7;
}
}
public static void main(String[] args) {
F f = (x) -> {
if (x > 2) {
throw new Exception();
}
return x * 2;
};
System.out.print(run(f) + run((int n) -> n + 9));
}
}
🧩 람다식이 뭔데요?
한 마디로, 함수를 짧게 한 줄로 표현하는 문법이에요.
// 원래는 메서드를 따로 만들어야 했는데
int apply(int x) {
return x * 2;
}
// 람다식으로 이렇게 줄일 수 있어요
(x) -> x * 2
문법 구조
(매개변수) -> { 실행코드 }
| 예시 | 의미 |
|---|---|
(x) -> x * 2 | x를 받아서 x*2 반환 |
(x) -> x + 9 | x를 받아서 x+9 반환 |
(x) -> { if(x>2) throw new Exception(); return x*2; } | 여러 줄은 중괄호 사용 |
💡 이름이 없는 함수라서 익명 함수라고도 불러요.
🔍 코드 흐름 추적 (3단계)
정처기 람다 문제는 이 3단계만 따라가면 됩니다.
STEP 1. x에 뭐가 들어가는지 확인
public static int run(F f) {
try {
return f.apply(3); // ← 항상 3이 들어가요!
} catch (Exception e) {
return 7;
}
}
run()은 람다를 받아서 무조건 x=3으로 실행합니다.
STEP 2. 예외가 터지는지 확인
첫 번째 람다 f
F f = (x) -> {
if (x > 2) { // 3 > 2 → true!
throw new Exception(); // 💥 예외 발생
}
return x * 2;
};
| x 값 | 조건 x > 2 | 결과 |
|---|---|---|
| 3 | ✅ true | 예외 발생 |
두 번째 람다 (int n) -> n + 9
(int n) -> n + 9 // n=3 → 그냥 3+9 계산, 예외 없음
| n 값 | 예외 여부 | 결과 |
|---|---|---|
| 3 | ❌ 없음 | 12 |
STEP 3. 반환값 결정
| 상황 | 반환값 |
|---|---|
| 예외 터짐 | catch 블록의 값 → 7 |
| 예외 없음 | 계산 결과 → 12 |
✅ 최종 계산
run(f) → 예외 발생 → 7
run((int n) -> n + 9) → 3 + 9 → 12
7 + 12 = 19
출력 결과: 19
🎯 정처기 람다 문제 풀이 공식
① x에 뭐가 들어가는지 확인
↓
② 예외가 터지는지 확인
↓
③ 터지면 catch값 / 안 터지면 계산값
이 흐름만 기억하면 어떤 람다 문제도 풀 수 있어요!
❓ 잠깐, run((int n) -> n + 9) 이게 말이 돼요?
코드를 보다 보면 이런 의문이 생길 수 있어요.
"run()은 F 타입만 받을 수 있는 거 아닌가요?
(int n) -> n + 9는 그냥 람다식인데 어떻게 F로 넣죠?"
결론: 람다식 자체가 F 타입이에요
static interface F {
int apply(int x) throws Exception; // int 받고, int 반환
}
F 인터페이스가 요구하는 조건:
int타입 매개변수 1개int반환
(int n) -> n + 9
이 람다가 가진 것:
int n→ int 매개변수 1개 ✅n + 9→ int 반환 ✅
→ 형태가 딱 맞아서 Java가 자동으로 F 타입으로 인식!
쉽게 풀어쓰면
// 이 두 개는 완전히 동일해요
F f2 = (int n) -> n + 9; // 변수에 담은 것
run((int n) -> n + 9); // 바로 인자로 넘긴 것
Java가 (int n) -> n + 9를 보고
"어? F 인터페이스 형태랑 똑같네 → F 타입으로 처리하자"
라고 자동으로 판단하는 거예요.
타입 매칭 규칙
| F 인터페이스 | 람다식 | 매칭 여부 |
|---|---|---|
int apply(int x) | (int n) -> n + 9 | ✅ int 받고 int 반환 |
int apply(int x) | (String s) -> s | ❌ 타입 불일치 |
int apply(int x) | (int n) -> "hello" | ❌ 반환 타입 불일치 |
💡 이걸 타입 추론(Type Inference) 이라고 해요.
Java가 문맥을 보고 람다의 타입을 자동으로 맞춰주는 것으로,
매개변수 타입을 생략해서(n) -> n + 9으로 써도 동일하게 동작합니다.
📝 핵심 개념 정리
| 개념 | 설명 |
|---|---|
| 람다식 | (x) -> { ... } 형태의 익명 함수 |
| 함수형 인터페이스 | 추상 메서드가 1개인 인터페이스, 람다로 구현 가능 |
| try-catch | 예외 발생 시 catch 블록으로 이동, 값 반환 |
| apply(3) | 람다를 x=3으로 실행하는 호출 |
| 타입 추론 | 람다식의 형태가 인터페이스와 맞으면 자동으로 해당 타입으로 인식 |
마치며
람다식 문법이 생소해도,
"x에 뭐 들어가? → 예외 터져? → 반환값 뭐야?"
이 3가지만 체크하면 정처기 문제는 충분히 풀립니다. 💪
다음엔 Python 람다식도 같은 방식으로 비교해볼게요!
태그: #정처기 #Java #람다식 #예외처리 #정보처리기사