들어가기 전에..
내부 클래스는 클래스 내에 선언된다는 점을 제외하고는 일반적인 클래스와 다르지 않다
내부 클래스는 사용 빈도가 높지 않으므로 내부 클래스의 기본 원리와 특징을 이해하는 정도까지만 학습해도 충분하다
내부 클래스란?
- 클래스 내에 선언된 클래스
- 클래스 안에 다른 클래스를 선언하는 이유는 두 클래스의 관계가 긴밀하기 때문
- 내부 클래스를 선언하면 두 클래스의 멤버들 간에 서로 쉽게 접근 할 수 있고
- 외부에는 불필요한 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다(캡슐화)는 장점이 있다
class A {
...
class B {
//내부 클래스
}
...
}
이 때, 내부 클래스인 B는 클래스 A를 제외하고는 다른 클래스에서 잘 사용되지 않는 것이어야 한다
내부클래스의 종류와 특징
인스턴스 클래스 (Instance Class)
외부 클래스의 멤버변수 선언 위치에 선언하며, 외부 클래스의 인스턴스 멤버처럼 다루어진다
주로 외부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적으로 선언된다
스태틱 클래스 (Static Class)
외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 static 멤버처럼 다루어진다
주로 외부 클래스의 static 멤버, 특히 static 메서드에서 사용될 목적으로 선언된다
지역 클래스 (Local Class)
외부 클래스의 메서드나 초기화 블럭 안에 선언하며, 선언된 영역 내부에서만 사용될 수 있다
익명 클래스(Anonymous Class)
클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스 (일회용)
내부 클래스의 선언
class Outer {
int iv = 0;
static int cv = 0;
void myMethod() {
int lv = 0;
}
}
class Outer {
class InstanceInner {}
static class StaticInner {}
void myMethod() {
class LocalInner {}
}
}
두 코드를 비교해보면 아래 코드는 외부 클래스에 3개의 서로 다른 종류의 내부 클래스를 언언했다
위 코드와 비교했을 때 내부 클래스의 선언위치가 변수의 선언위치와 동일함을 알 수 있다
내부 클래스가 선언된 위치에 따라 유효범위와 접근성이 다르다
내부 클래스의 제어자와 접근성
class Outer {
int iv = 0;
static int cv = 0;
void myMethod() {
int lv = 0;
}
}
class Outer {
private class InstanceInner {}
protected static class StaticInner {}
void myMethod() {
class LocalInner {}
}
}
다음 코드에서 인스턴스 클래스와 스태틱 클래스는 외부 클래스의 멤버변수와 같은 위치에 선언되며
멤버변수와 같은 성질을 갖는다
따라서 내부 클래스가 외부 클래스의 멤버와 같이 간주되고, 인스턴스 멤버와 static 멤버 간의 규칙이 내부 클래스에도 똑같이 적용된다
'Language > Java' 카테고리의 다른 글
[Java] 인터페이스 (0) | 2024.04.18 |
---|---|
[Java] 객체지향 프로그래밍 - 다형성과 추상클래스 (0) | 2024.04.08 |
[Java] 객체지향 프로그래밍 - 제어자 (0) | 2024.04.05 |
[Java] 객체지향 프로그래밍 - package와 import (0) | 2024.04.05 |
[Java] 객체지향 프로그래밍 - 오버라이딩(overriding) (0) | 2024.04.05 |