자바에서는 클래스 내부에 다른 클래스를 선언할 수 있다. 이러한 내부 클래스(inner class)는 외부 클래스(outer class) 내부에서만 사용되는 클래스이다. 내부 클래스를 사용하면 논리적으로 연관된 클래스를 그룹화하고 캡슐화할 수 있다.
1. 멤버 내부 클래스 (Member Inner Class): 외부 클래스의 멤버 변수와 마찬가지로 선언되는 클래스이다. 인스턴스화하기 전에는 외부 클래스의 인스턴스가 먼저 생성되어야 한다.
2. 정적 내부 클래스 (Static Nested Class): 내부 클래스에 static 키워드가 사용된 경우이다. 정적 내부 클래스는 외부 클래스의 인스턴스에 바인딩되지 않는다.
3. 지역 내부 클래스 (Local Inner Class): 메서드 내부에 선언되는 클래스로, 선언된 메서드 내에서만 사용된다.
4. 익명 내부 클래스 (Anonymous Inner Class): 이름이 없는 내부 클래스로, 클래스의 정의와 동시에 인스턴스를 생성하여 사용된다.
각 내부 클래스 유형은 특정한 상황에 유용하게 사용될 수 있다. 내부 클래스를 사용하여 코드를 구성함으로써 클래스 간의 관련성을 강화하고 코드의 가독성을 향상시킬 수 있다.
class OuterClass{
int a = 10;
static int b = 20;
class InnerClass{
int c = 30;
static int d = 40; //JDK17부터 내부클래스에 static 변수 가능
public void show() {
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
System.out.println("d = " + d);
}
}
//정적내부클래스
static class InnerClass2{
int e = 50;
static int f = 60;
public void show() {
// System.out.println("a = " + a); //static 클래스는 외부클래스에 있는 인스턴스 변수에 접근 불가능
System.out.println("b = " + b);
System.out.println("e = " + e);
System.out.println("f = " + f);
}
}
public void disp() {
//내부클래스가 가진 show 메서드 호출
InnerClass in = new InnerClass();
in.show();
InnerClass2 in2 = new InnerClass2();
in2.show();
}
}
public class Ex8_InnerClass {
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.disp();
}
}
'JAVA' 카테고리의 다른 글
[JAVA] Generic Type (0) | 2024.03.28 |
---|---|
[JAVA] Anonymous Inner Class (0) | 2024.03.27 |
[JAVA] Interface (0) | 2024.03.27 |
[JAVA] Abstract 예제 (0) | 2024.03.26 |
[JAVA] Abstract (0) | 2024.03.26 |