[java] 자바 함수형 인터페이스를 사용하여 GUI 이벤트 처리를 구현하는 방법은 어떻게 되나요?

GUI 애플리케이션에서는 사용자의 동작에 따라서 이벤트가 발생하고, 이를 처리해야 합니다. 자바에서는 기본적으로 이벤트 처리를 위해 리스너 인터페이스를 사용합니다. 하지만, Java 8에서는 함수형 인터페이스와 람다식을 도입하여 이벤트 처리를 더 간단하게 구현할 수 있는 방법을 제공합니다.

먼저, 함수형 인터페이스를 사용하여 이벤트 처리를 구현하기 위해 FunctionalInterface 애노테이션을 인터페이스에 추가합니다. 예를 들어, ActionListener 인터페이스를 함수형 인터페이스로 사용하여 버튼 클릭 이벤트를 처리해보겠습니다.

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

public class MyGUIApplication extends JFrame {
    private JButton button;

    public MyGUIApplication() {
        button = new JButton("클릭!");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 이벤트 처리 로직을 작성합니다.
                System.out.println("버튼이 클릭되었습니다!");
            }
        });

        add(button);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(MyGUIApplication::new);
    }
}

위 예제에서는 ActionListener 인터페이스를 익명 클래스로 구현하여 버튼의 클릭 이벤트를 처리하고 있습니다. 하지만, 함수형 인터페이스와 람다식을 사용하면 이 코드를 더 간결하게 작성할 수 있습니다.

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

public class MyGUIApplication extends JFrame {
    private JButton button;

    public MyGUIApplication() {
        button = new JButton("클릭!");
        button.addActionListener(e -> {
            // 이벤트 처리 로직을 작성합니다.
            System.out.println("버튼이 클릭되었습니다!");
        });

        add(button);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(MyGUIApplication::new);
    }
}

위 코드에서는 ActionListener 인터페이스의 actionPerformed 메소드를 람다식으로 구현하였습니다. 이제 버튼을 클릭하면 “버튼이 클릭되었습니다!”라는 메시지가 출력됩니다.