Backend/Java
[Java] 내부클래스
서교동김계란
2024. 5. 10. 23:05
728x90
🎯 내부클래스
1.1 내부 클래스란?
- 클래스 안에 선언된 클래스
- 특정 클래스 내에서만 주로 사용되는 클래스를 내부 클래스로 선언한다.
- GUI어플리케이션(AWT, Swing)의 아벤트처리에 많이 사용된다.
1.2 내부 클래스의 장점
- 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.
- 코드의 복잡성을 줄일 수 있다.(캡슐화)
1.3 내부 클래스의 종류와 특징
- 내부 클래스의 종류는 변수의 선언위치에 따른 종류와 동일하다.
- 유효범위와 성질도 변수와 유사하므로 비교해보면 이해하기 쉽다.
| 내부 클래스 | 특징 |
| 인스턴스 클래스 (instance class) |
외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 인스턴스멤버 처럼 다루어진다. 주로 외부 클래스의 인스턴스멤버들과 관련된 작업에 사용될 목적으로 선언된다. |
| 스태틱 클래스 (static class) |
외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 static멤버처럼 다루어진다. 주로 외부 클래스의 static멤버, 특히 static메서드에서 사용될 목적으로 선언된다. |
| 지역 클래스 (local class) |
외부 클래스의 메서드나 초기화블럭 안에 선언하며, 선언된 영역 내부에서만 사용될 수 있다. |
| 익명 클래스 (anonymous class) |
클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스(일회용) |
1.4 내부클래스, 익명클래스 사용 예제
class Outer {
public void print() {
System.out.println("외부클래스");
}
class Inner {
void innerPrint() {
Outer.this.print();
}
}
static class InnerStaticClass {
void innerPrint() {
// Outer.this.print();
}
}
public void outerMethod() {
class InnerLocal {
}
InnerLocal il1 = new InnerLocal();
}
}
abstract class Person {
public abstract void printInfo();
}
class Student extends Person {
public void printInfo() {
System.out.println("Student.printInfo");
}
}
public class Main {
public static void main(String[] args) {
// 외부 클래스
Outer o1 = new Outer();
// 내부 클래스 - 인스턴스
Outer.Inner i1 = new Outer().new Inner();
// 내부 클래스 - 정적
Outer.InnerStaticClass is1 = new Outer.InnerStaticClass();
// 익명 클래스
Person p1 = new Person() {
@Override
public void printInfo() {
System.out.println("Main.printInfo");
}
};
}
}