반응형

내부 클래스 (inner class)

  • 클래스 안의 클래스

내부 클래스란, 
클래스 안에 클래스를 넣는 것이다.

 

예를 들어서 A라는 클래스가 있고, B라는 클래스가 있을 때, 
클래스 B를 클래스 A안에 집어 넣을 수 있다. 반대로도 가능하고 말이다.

오측 코드는 A클래스 안에 B클래스를 넣은 것인데,
A클래스는 B의 외부클래스가 되고,
B클래스는 A의 내부 클래스가 된다.

 

내부 클래스의 장점

  • 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.

 

이렇게 하면 어떤 장점이 있냐면, 
B클래스 안에서 A의 멤버들에 쉽게 접근할 수 있다.

만약에, 좌측코드에서 B클래스안에서 A의 멤버에 접근을 하려면, B클래스에서 A의 객체를 생성해야 한다.

그런데, 오른쪽 코드에서는 B클래스에서 A의 객체생성없이 A의 멤버에 접근할 수 있다.

 

  • 코드의 복잡성을 줄일 수 있다. (캡슐화)

그리고, 코드의 복잡성을 줄일 수 있다는 장점이 있다. 일종의 캡슐화다.

클래스 B가   단독으로 있으면, 다른 클래스에서도 클래스 B를 사용할 수 있다.
그런데, 만약에 클래스 B가 클래스 A안에서만 사용된다면, 굳이 클래스 B를 단독으로 밖에 둘 이유가 없다.

그러면, 클래스 B를 클래스 A의 내부클래스로 만든다.
그러면, 다른 클래스에서는 B클래스가 보이지 않을 것이다.

그러면,  코드의 복잡성을 줄일 수 있고, 내부 클래스와 외부 클래스사이간의 멤버접근이 수월해진다.

 


 

내부 클래스의 종류와 특징

  • 내부 클래스의 종류와 유효범위(scope)는 변수와 동일

 

 

위의 코드에서,
앞서 배웠던 선언위치에 따른 변수의 종류로 변수를 구분해 보면,
iv, cv, lv 3개가 있다.


내부 클래스의 종류와 유효 범위는 앞서 공부했던 변수의 scope와 동일하다.

내부 클래스도 클래스 영역에  선언된 내부 클래스가 있고,
static이 붙은 내부 클래스가 있고,
메서드 안에 지역변수처럼 선언된 내부 클래스
가 있을 수 있다.

각각의 내부클래스의 scope는 각각 iv, cv, lv와 매칭이 된다.
변수 선언한듯, 내부 클래스를 선언할 수 있다.

 

그리고 이 3가지 내부 클래스는,  앞서 공부했던 3가지 변수의 특징과 같다.

iv는 클래스 내부에서 사용할 수 있다. 
마찬가지로, 클래스 영역에 선언된 내부 클래스는, 외부 클래스의 내부에서 사용할 수 있다.

static + iv인 cv처럼,
static이 붙은 내부 클래스는, 객체 생성 없이 사용 가능하다.

그리고, lv와 같은,
메서드 안에 있는 내부 클래스는,  메서드 영역에서만 사용 가능하다.

 

그리고, 마지막으로 익명 클래스가 있는데, 
이것은, 클래스 선언과 객체 생성을 동시에 하는 이름없는 클래스이다. 일회용으로 말이다.
클래스를 사용하다보면, 딱 한번만 사용하고 안쓰는 경우가 있는데,
그런 경우에는 클래스선언과 생성을 한번 해서 쓰고 마는 것이다.
ex) AWT, SWY, GUI같은 이벤트 처리 같은 경우에 사용하는데, 자주 사용하지는 않는다.

 

반응형

'JAVA' 카테고리의 다른 글

익명 클래스  (0) 2022.04.08
내부 클래스의 제어자와 접근성  (0) 2022.04.08
디폴트 메서드와 static메서드  (0) 2022.04.07
인터페이스의 장점 (2)  (0) 2022.04.07
인터페이스의 장점 (1)  (0) 2022.04.06