JAVA · 객체지향
익명 클래스와 람다 변환
익명 클래스의 사용법과 람다로 변환할 수 있는 조건을 알아봅니다.
객체지향중급익명클래스람다SAMthis
핵심 설명
익명 클래스의 사용법과 람다로 변환할 수 있는 조건을 알아봅니다.
Java code
import java.util.*;
public class AnonymousClass {
interface Greeting {
String greet(String name);
}
abstract static class Formatter {
abstract String format(String text);
String wrap(String text) { return "[" + format(text) + "]"; }
}
public static void main(String[] args) {
// 익명 클래스 — SAM이면 람다로 변환 가능
Greeting g1 = new Greeting() {
@Override
public String greet(String name) {
return "안녕, " + name;
}
};
// 람다로 변환
Greeting g2 = name -> "안녕, " + name;
// 추상 클래스 — 람다 변환 불가 (상태/여러 메서드)
Formatter f = new Formatter() {
@Override
String format(String text) {
return text.toUpperCase();
}
};
System.out.println(f.wrap("hello")); // [HELLO]
// 익명 클래스에서 this는 익명 클래스 자신
// 람다에서 this는 바깥 클래스
Runnable anon = new Runnable() {
public void run() {
System.out.println(this.getClass().getName());
}
};
Runnable lambda = () -> {
System.out.println(this.getClass().getName());
};
}
}학습 팁
람다에서 this는 바깥 클래스를 가리키고, 익명 클래스에서 this는 익명 클래스 자신을 가리킵니다.
주의할 점
추상 클래스나 여러 메서드를 가진 인터페이스는 람다로 변환할 수 없습니다. 이 경우 익명 클래스를 사용해야 합니다.
자주 묻는 질문
익명 클래스와 람다 변환란 무엇인가요?
익명 클래스의 사용법과 람다로 변환할 수 있는 조건을 알아봅니다.
익명 클래스와 람다 변환 학습 시 주의할 점은 무엇인가요?
추상 클래스나 여러 메서드를 가진 인터페이스는 람다로 변환할 수 없습니다. 이 경우 익명 클래스를 사용해야 합니다.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.