PHpullh
학습 라이브러리/Java/익명 클래스와 람다 변환

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는 익명 클래스 자신을 가리킵니다.

주의할 점

추상 클래스나 여러 메서드를 가진 인터페이스는 람다로 변환할 수 없습니다. 이 경우 익명 클래스를 사용해야 합니다.

자주 묻는 질문

익명 클래스와 람다 변환란 무엇인가요?

익명 클래스의 사용법과 람다로 변환할 수 있는 조건을 알아봅니다.

익명 클래스와 람다 변환 학습 시 주의할 점은 무엇인가요?

추상 클래스나 여러 메서드를 가진 인터페이스는 람다로 변환할 수 없습니다. 이 경우 익명 클래스를 사용해야 합니다.