Java

내부 클래스 Inner Class

화요밍 2022. 5. 24. 15:11
728x90
반응형
내부 클래스 Inner Class란?
하나의 클래스 내부에 선언된 또 다른 클래스를 의미합니다.
두 클래스가 긴밀한 관계에 있을 때 한 클래스를 다른 클래스의 내부 클래스로 선언하면 두 클래스의 멤버들 간에 서로 쉽게 접근할 수 있다는 장점이 있습니다.
또한, 외부에서 불필요한 클래스를 감추는 캡슐화를 통해 코드의 복잡성을 줄일 수 있습니다.

 

  • 내부 클래스의 종류
인스턴스 클래스 Instance Class 외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 인스턴스 멤버처럼 다뤄진다.
외부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적으로 선언된다.
정적 클래스 Static Class 외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 static 멤버처럼 다뤄진다.
외부 클래스의 static 멤버, 특히 static 메서드에서 사용될 목적으로 선언된다.
지역 클래스 Local Class 외부 클래스의 메서드나 초기화블럭 안에 선언하며, 선언된 영역 내부에서만 사용된다.
익명 클래스 Anonymous Class 클래스 선언과 객체 생성을 동시에 하는 이름 없는 클래스이다.
일회용, 단 한번만 사용된다.
class Outer {
    class InstanceInner {}
    static class StaticInner {}
    
    void instanceMethod() {
        class LocalInner {}
    }
}

익명 클래스 Anonymous Class란?
다른 내부 클래스와는 다르게 이름을 가지지 않는 클래스를 의미합니다.
익명 클래스는 클래스 선언과 동시에 객체 생성을 하므로, 오직 하나의 객체만을 생성할 수 있는 일회용 클래스입니다.
생성자를 선언할 수 없으며, 단 하나의 인터페이스를 구현하거나, 단 하나의 클래스를 상속받을 수 있습니다.

 

  • 익명 클래스 사용 전
class InnerEx {
    public static void main(String[] args) {
        Button b = new Button("Start");
        b.addActionListener(new EventHandler());
    }
}

class EventHandler implements ActionListener {
    public void actionPerformed(ActionEvent e) {
        System.out.println("ActionEvent occurred!!!");
    }
}
  • 익명 클래스 사용 후
class InnerEx {
    public static void main(String[] args) {
        Button b = new Button("Start");
        b.addActionListener(new ActionLitener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("ActionEvent occurred!!!");
            }
        });
    }
}
728x90
반응형

'Java' 카테고리의 다른 글

추상화 Abstraction  (0) 2022.05.24
다형성 Polymorphism  (0) 2022.05.23
제어자 Modifier  (0) 2022.05.20
super와 this  (0) 2022.05.20
상속 Inheritance  (0) 2022.05.20