내부 클래스(Inner Class)
클래스 내부에 선언된 클래스를 의미한다.
내부 클래스에서 지역 변수를 사용할 때 상수만 접근이 가능한데 그 이유는 메서드가 실행이 종료되었지만 다른 실행 중인 메서드가 해당 지역변수를 접근할 수 있는 문제가 발생할 수 있어 상수만 접근이 가능하다.
상수는 따로 constant pool에서 관리를 하게 되는데 메서드가 종료되어도 상수의 값에 접근할 수 있다.
내부 클래스의 사용
Outer oc = new Outer();
Outer.InstanceInner instanceInner = oc.new InstanceInner(); // 인스턴스 내부 클래스 객체 생성
외부에서 내부 클래스를 사용하기 위해서는 먼저 외부 클래스를 명시해줘야 한다.
그 후 내부 클래스에 접근하여 메서드를 사용하게 된다.
내부 클래스의 장점
- 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.
- 코드의 복잡성을 줄일 수 있다.
내부 클래스의 종류와 특징
public class Ex_2 {
class InstanceInner { // --> 1번
int iv = 100;
static int cv = 200;
final static int CONST = 500;
}
static class StaticInner { // --> 2번
int iv = 200;
static int cv = 300;
}
void Method() {
class LocalInner { // --> 3번
int iv = 300;
static int cv = 400;
final static int CONST = 600;
}
}
}
- 인스턴스 클래스
외부 클래스의 멤버변수 선언위치에 선언하며 외부 클래스의 인스턴스 멤버처럼 다뤄진다.
주로 외부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적으로 선언된다.
1번 코드를 보면 클래스 내부에 또 다른 클래스가 선언되어 있는 것을 확인할 수 있다.
- 스태틱 클래스
외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 static 멤버처럼 다뤄진다.
주로 외부 클래스의 static 멤버, 특히 static 메서드에서 사용될 목적으로 선언된다.
2번 코드를 보면 static 키워드를 붙여 내부 클래스 중에서 스태틱 클래스라는 것을 알 수 있다.
- 지역 클래스
외부 클래스의 메서드나 초기화 블럭 안에 선언하며 선언된 영역 내부에서만 사용될 수 있다.
메서드 내부에 클래스가 선언되어 있다.
지역 메서드 내에서만 지역 클래스를 사용할 수 있으므로 다른 외부 메서드에서 접근이 불가하다.
익명 클래스
Object iv = new Object() { void method(){
System.out.println("익명 클래스1");
} };
클래스의 선언과 객체의 생성을 동시에 하는 이름 없는 클래스를 의미하며 한 번 사용하면 없어진다.
이름이 없기 때문에 객체를 생성할 때 조상 클래스의 이름이나 구현 인터페이스 이름을 대신해서 사용한다.
코드와 같이 모든 클래스의 조상은 Object 클래스이기 때문에 해당 클래스의 이름을 사용하여 익명 클래스를 만들 수 있다.
'자바' 카테고리의 다른 글
Java - 컬렉션 (0) | 2023.11.14 |
---|---|
Java - 애너테이션 (0) | 2023.11.13 |
Java - Exception (0) | 2023.11.11 |
Java - 열거형 (0) | 2023.11.09 |
Java - 배열 (1) | 2023.11.09 |