프로그래밍 언어/JAVA(자바) 응용

49.여러 내부클래스의 정의와 유형

lroot 2022. 6. 1. 10:06
728x90
반응형

내부 클래스(inner class)

- 클래스 내부에 선언한 클래스로 이 클래스를 감싸고 있는 외부 클래스와 밀접한 연관이 있는 경우가 많고, 다른 외부 클래스에서 사용할 일이 거의 없는 경우에 내부 클래스로 선언해서 사용함

- 중첩 클래스라고도 함

- 내부 클래스의 종류 :

1. 인스턴스 내부 클래스

2. 정적(static) 내부 클래스

3. 지역(local) 내부 클래스

4. 익명(anonymous) 내부 클래스

 

인스턴스 내부 클래스

- 내부적으로 사용할 클래스를 선언(private으로 선언하는 것을 권장)

- 외부 클래스가 생성된 후 생성됨(정적 내부 클래스와 다름)

- private이 아닌 내부 클래스는 다른 외부 클래스에서 생성할 수 있음

OutClass outClass = new OutClass();

OutClass.InClass inClass = outClass.new InClass();

- 인스턴스 내부 클래스 예

- InnerTest.java

class OutClass{

private int num = 10;
private static int sNum = 20;
private InClass inClass;

public OutClass() {
inClass = new InClass();
}

class InClass{

int iNum = 100;

void inTest() {
System.out.println("OutClass num = "+num+"(외부 클래스의 인스턴스 변수)");
System.out.println("OutClass sNum = "+sNum+"(외부 클래스의 static 변수)");
System.out.println("InClass iNum = "+iNum+"(내부 클래스의 인스턴스 변수)");
}
}

public void usingClass() {
inClass.inTest();
}

static class InStaticClass{

int iNum = 100;
static int sInNum = 200;

void inTest() {
System.out.println("InClass num = "+iNum+"(내부 클래스의 인스턴스 변수)");
System.out.println("OutClass sNum = "+sNum+"(외부 클래스의 static 변수)");
System.out.println("InClass iNum = "+sInNum+"(내부 클래스의 static 변수)");
}
}

}

public class InnerTest {

public static void main(String[] args) {

OutClass outClass = new OutClass();
outClass.usingClass();

System.out.println();

OutClass.InClass inner = outClass.new InClass();
inner.inTest();

System.out.println();

OutClass.InStaticClass sInClass = new OutClass.InStaticClass();
sInClass.inTest();
}

}