자바 람다의 "타겟 타입(Target Type)"이란?
2024. 5. 27. 10:15ㆍHigh Level Programming Language/Learning the Java Language
람다의 타겟 타입(Target Type)은 자바에서 람다 표현식이 작동하는 핵심 개념 중 하나로,
람다를 사용할 수 있는 맥락과 타입 추론이 어떻게 이뤄지는지를 이해하는 데 중요합니다.
🎯 자바 람다의 "타겟 타입(Target Type)"이란?
✅ 정의
람다 표현식은 단독으로는 타입이 없습니다.
람다는 어떤 인터페이스에 대입되느냐에 따라 타입이 결정되며, 이 인터페이스 타입을 "타겟 타입(Target Type)"이라고 부릅니다.
자바에서 람다는 함수형 인터페이스(Functional Interface)에만 대입 가능하며,
람다가 대입되는 함수형 인터페이스가 곧 람다의 타겟 타입입니다.
📌 예제 1 – 기본적인 타겟 타입 사용
@FunctionalInterface
interface Printer {
void print(String message);
}
public class LambdaExample {
public static void main(String[] args) {
Printer printer = msg -> System.out.println(msg);
printer.print("Hello, Target Type!");
}
}
🔍 여기서 타겟 타입은?
Printer printer = ...
이 문장에서printer
변수의 타입이Printer
이므로,msg -> System.out.println(msg)
라는 람다의 타겟 타입은 Printer입니다.Printer
는void print(String message)
를 갖는 함수형 인터페이스이므로,- 람다식의 파라미터 및 반환 타입을 이 메서드 시그니처에 따라 추론할 수 있습니다.
📌 예제 2 – 메서드 인자에서의 타겟 타입
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
public void execute(Runnable r) {
r.run();
}
public void test() {
execute(() -> System.out.println("Running!")); // Runnable이 타겟 타입
}
- 위에서
Runnable
이 타겟 타입입니다. Runnable
은void run()
하나의 추상 메서드를 가지므로,() -> System.out.println("Running!")
는 이 메서드의 구현으로 간주됩니다.
🧠 타겟 타입의 작동 원리
자바 컴파일러는 람다 표현식을 다음과 같이 처리합니다:
- 람다가 사용된 문맥(context)을 보고
- 해당 문맥에서 기대되는 함수형 인터페이스 타입을 추론하고
- 이 인터페이스의 추상 메서드 시그니처를 기반으로
- 람다 표현식의 파라미터와 반환 타입을 추론
이 과정을 통해 타입이 없는 람다 표현식이 타입을 갖게 되는 것입니다.
⚠️ 주의사항 – 명시적 타겟 타입 없이 사용하면 오류
var lambda = msg -> System.out.println(msg); // ❌ 컴파일 에러
var
로는 람다의 타입을 추론할 수 없습니다.- 람다에는 명시적인 타겟 타입이 필요합니다.
- 해결 방법:
Printer lambda = msg -> System.out.println(msg); // ✅ OK
📌 예제 3 – 메서드 참조에서도 타겟 타입이 결정
Consumer<String> printer = System.out::println;
System.out::println
은 메서드 참조입니다.- 이 표현식의 타겟 타입은
Consumer<String>
이고 Consumer<String>
의accept(String t)
에 맞춰 메서드가 연결됩니다.
🔁 정리
개념 | 설명 |
---|---|
타겟 타입(Target Type) | 람다 표현식이 대입될 함수형 인터페이스 타입 |
왜 필요한가 | 람다식은 자체 타입이 없기 때문에 문맥을 통해 타입을 추론해야 함 |
결정 기준 | 대입되는 변수 타입, 메서드 파라미터 타입 등 |
관련 요소 | 함수형 인터페이스, 메서드 참조, 타입 추론 |
주의사항 | var 로 람다 선언 불가, 명확한 타겟 타입이 필요함 |
💬 요약
자바에서 람다는 단순한 "익명 함수"처럼 보이지만, 타겟 타입이 있어야만 존재할 수 있는 특수한 표현식입니다.
이 개념을 정확히 이해하면, 메서드 참조, 함수형 API 설계, 스트림 처리 등에서 훨씬 유연하고 타입 안정적인 코드를 작성할 수 있게 됩니다.
'High Level Programming Language > Learning the Java Language' 카테고리의 다른 글
Lesson: Interfaces and Inheritance[Interfaces] (0) | 2024.06.03 |
---|---|
Using Java Reflection (0) | 2024.05.27 |
Lesson: Classes and Objects [Objects, More on Classes] (0) | 2024.05.27 |
Lesson: Classes and Objects [Classes] (0) | 2024.05.27 |
Lesson: Control Flow Statements (0) | 2024.05.08 |