[JAVA] 익명 클래스

JHJeong·2024년 4월 16일
0

익명 클래스

자바에서 익명 클래스는 이름없이 선언되고 인스턴스화되는 클래스로, 일반적으로 단일 인스턴스가 필요한 경우에 한정해 사용된다. 이러한 특성 때문에, 익명 클래스는 주로 인터페이스의 구현이나 추상 클래스의 확장에 사용되며, 콜백메서드, 이벤트 리스너 설정, 일회성 작업의 실행 등 다양한 목적으로 활용된다.

1. 인터페이스 구현을 위한 익명 클래스

익명 클래스는 인터페이스를 구현하는 데 가장 흔히 사용된다. 이 경우, 클래스 명시 없이 바로 인터페이스 이름을 사용하여 구현할 수 있다. 예를 들어, 자바 GUI 프로그래밍에서 버튼 클릭 이벤트 리스너를 설정할 때 주로 익명 클래스가 사용되고 있다.

import javax.swing.*;
import java.awt.event.*;

public class ButtonExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Button Example");
        JButton button = new JButton("Click Me!");

        // 익명 클래스를 사용하여 ActionListener 인터페이스 구현
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("Button was clicked!");
            }
        });

        frame.add(button);
        frame.setSize(300, 200);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

출력 결과

위의 예제에서 'ActionListener'는 버튼 클릭과 같은 액션 이벤트를 처리하기 위한 인터페이스이다. 익명 클래스를 사용하여 actionPerformed 메서드를 직접 구현함으로써, 추가적인 외부 클래스 파일 없이 이벤트 처리 로직을 간결하게 유지할 수 있게 되었다.

2. 추상 클래스 확장을 위한 익명 클래스

익명 클래스 또한 추상 클래스를 확장하여 그 추상 메서드들을 구현하는 데 사용될 수 있다. 이를 통해 복잡한 상속 구조 없이도 필요한 메서드를 빠르게 구현하고 인스턴스화할 수 있다. 아래는 추상 클래스 'AbstractButton'의 확장의 예제 소스이다.

abstract class AbstractButton {
    public abstract void click();
}

public class TestButton {
    public static void main(String[] args) {
        AbstractButton btn = new AbstractButton() {
            @Override
            public void click() {
                System.out.println("Button clicked");
            }
        };

        btn.click();
    }
}

출력 결과
Button clicked

이 예제에서는 'AbstractButton'이라는 추상 클래스를 익명으로 확장하여, 'click' 메서드를 구현하고 있다. 이 방법을 사용하면, 특정 메서드의 동작만을 빠르게 정의하고 테스트 할 수 있다.

3. 익명 클래스를 사용한 즉석에서의 구현

익명 클래스는 또한 즉석에서 필요한 기능을 구현하는 데 사용될 수 있으며, 이를 통해 코드를 간소화하고, 로컬 변수와의 상호 작용을 통해 함수적 스타일의 프로그래밍을 할 수 있다. 예를 들어, 정렬 기능을 사용할 때 커스텀 비교 로직을 구현하는 것이 일반적이다.

import java.util.*;

public class SortExample {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Steve", "Jessica", "Tom", "Jerry");

        Collections.sort(names, new Comparator<String>() {
            public int compare(String s1, String s2) {
                return s1.compareTo(s2);
            }
        });

        System.out.println("Sorted names: " + names);
    }
}

출력 결과
Sorted names: [Jerry, Jessica, Steve, Tom]

이 예제에서는 'Comparator' 인터페이스를 익명 클래스로 구현하여 문자열 리스트를 알파벳 순으로 정렬한다. 이 방법은 특히 자바에서 람다 표현식이 도입되기 전에 널리 사용되어져 왔다.

익명 클래스는 코드를 더 간결하고 직관적으로 만들고, 특정 인터페이스나 추상 클래스를 즉각적으로 구현하는 방법을 제공하기 때문에 코드의 가독성을 높이고, 유지 보수를 용이하게 하며, 설계상의 유연성을 증가시킬 수 있다.

profile
이것저것하고 싶은 개발자

0개의 댓글