SeouliteLab

[Java/자바] 익명 클래스(Anonymous class) 본문

프로그래밍

[Java/자바] 익명 클래스(Anonymous class)

Seoulite Lab 2024. 3. 19. 09:48

Java에서 익명 클래스는 클래스를 정의하면서 동시에 객체를 생성하는 방법입니다. 주로 인터페이스의 구현체를 간단하게 작성할 때 사용됩니다. 익명 클래스는 한 번만 사용되는 간단한 클래스를 만들 때 유용합니다.

1. 익명 클래스 예제

예제 1: 인터페이스 구현

인터페이스를 구현하는 익명 클래스를 생성하는 예제입니다.

// AnonymousClassExample1.java

interface Greeting {
    void greet();
}

public class AnonymousClassExample1 {
    public static void main(String[] args) {
        Greeting greeting = new Greeting() { // 익명 클래스 생성
            @Override
            public void greet() {
                System.out.println("Hello, world!");
            }
        };
        
        greeting.greet(); // 출력 결과: Hello, world!
    }
}

예제 2: 추상 클래스 확장

추상 클래스를 확장하는 익명 클래스를 생성하는 예제입니다.

// AnonymousClassExample2.java

abstract class Shape {
    abstract void draw();
}

public class AnonymousClassExample2 {
    public static void main(String[] args) {
        Shape shape = new Shape() { // 익명 클래스 생성
            @Override
            void draw() {
                System.out.println("Drawing a shape");
            }
        };
        
        shape.draw(); // 출력 결과: Drawing a shape
    }
}

예제 3: 스레드 생성

스레드를 생성하는 익명 클래스 예제입니다.

// AnonymousClassExample3.java

public class AnonymousClassExample3 {
    public static void main(String[] args) {
        Thread thread = new Thread() { // 익명 클래스 생성
            @Override
            public void run() {
                System.out.println("Thread is running");
            }
        };
        
        thread.start(); // 출력 결과: Thread is running
    }
}

예제 4: 이벤트 리스너

이벤트 리스너를 구현하는 익명 클래스 예제입니다.

// AnonymousClassExample4.java

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;

public class AnonymousClassExample4 {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Anonymous Class Example");
        JButton button = new JButton("Click me");
        
        button.addActionListener(new ActionListener() { // 익명 클래스 생성
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("Button clicked");
            }
        });
        
        frame.add(button);
        frame.setSize(300, 200);
        frame.setVisible(true);
    }
}

예제 5: 인터페이스를 이용한 익명 클래스

인터페이스를 활용하여 익명 클래스를 생성하는 예제입니다.


    
 // AnonymousClassExample5.java

interface MyInterface {
    void method();
}

public class AnonymousClassExample5 {
    public static void main(String[] args) {
        MyInterface obj = new MyInterface() { // 익명 클래스 생성
            @Override
            public void method() {
                System.out.println("Method called");
            }
        };

        obj.method(); // 출력 결과: Method called
    }
}

예제 6: 함수형 인터페이스와 람다식

Java 8부터 함수형 인터페이스와 람다식이 도입되면서, 익명 클래스를 대체하는 더 간단한 방법이 등장했습니다.


// AnonymousClassExample6.java

@FunctionalInterface
interface MyFunctionalInterface {
    void myMethod();
}

public class AnonymousClassExample6 {
    public static void main(String[] args) {
        MyFunctionalInterface obj = () -> System.out.println("Lambda expression"); // 람다식 사용
        obj.myMethod(); // 출력 결과: Lambda expression
    }
}