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 |