본문 바로가기
Language/Java

[JAVA] 클래스 안에 클래스 : 이너 클래스 (Inner Class / Class In Class)

by jungwon3004 2022. 1. 12.
728x90
반응형
반응형

0. inner class

- inner class란?

: 개념 자체는 간단하다. class 안에 새로운 class를 정의하는 것이다.

- inner class 종류

(1) instant member inner class (인스턴트 맴버 이너 클래스)

(2) static member inner class (정적 맴버 이너 클래스)

(3) local inner class (지역 이너 클래스)

이렇게 크게 3가지가 있다.

 

1. Instant Member Inner Class (인스턴트 맴버 이너 클래스)

class A{
	class B{...}
    ...
}

A a = new A();
A.B b = a.new B(); // 여기가 핵심!!

이렇게 코드로 보면 간단하게 이해할 수 있다.

class A 안에 class B가 정의되어 있다.

하지만 class B는 static이 아니다.

따라서 B의 constructor는 static method가 아니라 instance method라는 것!!!

즉, class A의 instance를 반드시 만들고, 그 instance를 통해 method를 실행할 수 있다는 것

 

※ 만약, outer class의 instance variable (field)를 inner class의 instance가 쓰고 싶다면?

=> this

class A{
	int a = 1;
    class B{
    	int a = 2;
        void p(){
        	System.out.println(a);  // 2
            System.out.println(A.this.a); // 1
        }
    }
}

원래 this는 그 class 내에 있는 것을 가리키기 위한 것인데,

여기서는 class안에 class가 있기 때문에 this는 inner class인 B가 된다.

따라서 A.this 라는 굉장히 특이하게 생긴 걸 붙여주면 된다

 

 

728x90

 

 

2. Static Member Inner Class (정적 맴버 이너 클래스)

class A{
	static class B{...}
    ...
}

A.B b = new A.B();

이건 마치 static variable이나 static method처럼 사용하면 된다.

그냥 new A.B()이런 당연한 생성자를 사용하면 된다.

 

이전에 나온 instant member inner class처럼

A a = new A();

A.B b = a.new B();

이런 a.new B() 같은 독톡한 모습이 아니기에 전혀 어려울게 없다.

 

 

 

3. Local Inner Class (지역 이너 클래스)

class A{
	void m(){
    	class B{...}
        B b = new B();
    }
}

사실 이건 그리 낯선 형태가 아니다.

우리가 흔히 사용하는 직접 만들어 쓰는 형태이기 때문에 익숙할 것이다.

 

728x90
반응형