우와한 개발자

[Java] 내부 클래스(nested Class)와 익명 클래스(Anonymous Class)

by 우와한개발자

1. 멤버 내부 클래스 Member Inner Class

  • 클래스 안에 멤버로 존재하는 내부 클래스
  • 외부 클래스의 인스턴스가 있어야 생성 가능
  • 외부 클래스의 private 멤버 접근 가능
class Outer {

    private String name = "Outer";

    class Inner {
        void print() {
            System.out.println(name);  // 외부 클래스 접근 가능
        }
    }
}

public class Test {
    public static void main(String[] args) {
        Outer outer = new Outer();
        Outer.Inner inner = outer.new Inner();
        inner.print();
    }
}

 

2. 지역 내부 클래스 Local Inner Class

  • 메서드 또는 블록 안에 존재하며 이름이 있는 지역 내부 클래스
  • 모바일에서 이벤트 핸들러(EventHandler)에서 많이 사용.
  • 외부 클래스의 인스틴스만 해서 접근하도록 제한할 때 주로 사용 .
  • 내부 클래스가 static 인경우에는 외부 클래스의 멤버 참조 불가
  • 자바 17버전부터 내부 클래스의 멤버가 static 인 경우 자동으로 내부 클래스도 정적 내부 클래스가 됨.
import javax.swing.*;
import java.awt.event.*;

public class LocalInnerExample {

    public static void main(String[] args) {

        JFrame frame = new JFrame("Local Inner");
        JButton button = new JButton("클릭");

        // 지역 내부 클래스 Local Inner Class
        class MyHandler implements ActionListener {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("지역 내부 클래스 실행");
            }
        }

        button.addActionListener(new MyHandler());

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

 

3. 익명클래스 Anonymous Class

  • 이름이 없는 클래스
  • 선언과 동시에 객체 생성
  • new 키워드로 객체 생성하는 부분에서 메서드 구현
  • 컴파일하면 주 클래스 이름에 지역클래스번호를 ‘$’문자로 연결한 파일 생성.
import java.util.*;

public class Test {
    public static void main(String[] args) {

        List<String> list = Arrays.asList("apple", "banana", "kiwi");

        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length() - o2.length();
            }
        });

        System.out.println(list);
    }
}

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기