충분히 쌓여가는
내부 클래스(inner class) 본문
내부 클래스(inner class)
클래스 안의 클래스
class A { // B클래스의 외부 클래스
...
class B { // A클래스의 내부 클래스
...
}
...
}
내부 클래스의 장점
내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다
B 클래스와 A 클래스가 각각 존재: B 클래스에서 A 클래스의 멤버 호출 시 객체를 생성해야한다
B 클래스가 A 클래스의 내부 클래스 일 때: B 클래스에서 A 클래스의 멤버 호출 시 객체를 생성하지 않아도된다
코드의 복잡성을 줄일 수 있다(캡슐화)
B 클래스가 A 클래스 안에서만 사용될 경우 굳이 A 클래스 밖에 B 클래스가 존재할 이유가 없다
(B 클래스가 A 클래스 밖에 존재할 경우 다른 클래스가 B 클래스를 사용할 수도 있다[그런데 사용할 수도 있긴 함]
내부 클래스의 종류와 유효범위(scope)는 변수와 동일하다
내부 클래스 | 특징 |
instane class | 외부 클래스의 멤버변수 선언위치에 선언 외부 클래스의 instance 멤버처럼 다루어진다 주로 외부 클래스의 instance 멤버들과 관련된 작업에 사용될 목적으로 선언된다 |
static class | 외부 클래스의 멤버변수 선언위치에 선언 외부 클래스의 static 멤버처럼 다루어진다 주로 외부 클래스의 static 멤버, 특히 static 메서드에서 사용될 목적으로 선언된다 |
local class | 외부 클래스의 메서드나 초기화 블럭 안에 선언하며, 선언된 영역 내부에서만 사용될 수 있다 |
anonymous class (익명 클래스) |
클래스의 선언과 객체의 선언을 동시에 하는 이름없는 클래스(일회용) |
내부클래스 미사용
class AAA {
int i = 1000;
BBB b = new BBB();
}
class BBB {
void method() {
AAA a = new AAA();
System.out.println(a.i);
}
}
class CCC {
BBB b = new BBB();
}
public class InnerTest {
public static void main(String[] args) {
BBB b = new BBB();
b.method();
}
}
1000
내부 클래스 사용
BBB 클래스는 AAA의 클래스의 내부 클래스
BBB 클래스의 메서드를 사용하기 위해 AAA 클래스의 객체를 생성해야한다
class AAA { // AAA는 BBB의 외부 클래스
int i = 1000;
BBB b = new BBB();
class BBB { // BBB는 AAA의 내부 클래스
void method() {
System.out.println(i); // 객체 생성없이 외부 클래스의 멤버 접근가능
}
}
}
//class CCC {
// BBB b = new BBB(); // 에러
//}
public class InnerTest {
public static void main(String[] args) {
AAA a = new AAA();
a.b.method();
}
}
1000
'Java > JAVA2' 카테고리의 다른 글
printStackTrace(), getMessage() (0) | 2023.06.22 |
---|---|
예외 처리하기, try-catch문 (0) | 2023.06.20 |
프로그램 오류, 예외 클래스의 계층구조 (0) | 2023.06.19 |
익명 클래스(anonymous class) (0) | 2023.06.19 |
내부 클래스의 제어자와 접근성 (0) | 2023.06.18 |