백엔드API
5

Java 람다식, 정처기 문제로 이해하기

람다식 문법에 대해서 알아보자!

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 * 2x를 받아서 x*2 반환
(x) -> x + 9x를 받아서 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 #람다식 #예외처리 #정보처리기사

댓글

(0)