내부 클래스(inner class)
1. 내부 클래스란?
- 클래스 내에 선언된 클래스를 말한다.
- 선언하는 이유는 두 클래스 사이에 서로 긴밀한 관계에 있기 때문이다.
- 그러나, 내부 클래스는 주로 AWT 또는 Swing과 같은 GUI 어플리케이션의 이벤트 처리 외에는
잘 사용되지 않는다.
2. 내부 클래스의 장점
- 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.
- 코드의 복잡성을 줄일 수 있다.(캡슐화)
3. 내부 클래스의 종류와 특징
- 변수 선언하는 것과 같은 위치에 선언할 수 있으며, 총 4가지가 있다.
(1) 인스턴스 클래스
: 외부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적으로 선언된다.
(2) 스태틱 클래스
: 외부 클래스의 static 멤버, 특히 static 메서드에서 사용될 목적으로 선언된다.
: 그렇기 때문에, static 변수는 static 클래스가 아닌 곳에 사용되면 컴파일 에러가 나온다.
: 주의) final static은 상수 선언이므로 어느 곳이든 가능하다.
(3) 지역 클래스
: 외부 클래스의 메서드나 초기화 블럭 안에 선언하며, 선언된 영역 내부에서만 사용될 수 있다.
(4) 익명 클래스
: 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스이며, 일회용이다.
4. 이해를 돕기 위한 예제(1)
<위 코드와 비교해보자.>
( 또한 private, protected, abstract, final과 같은 접근 제어자도 가능하다. )
5. 이해를 돕기 위한 예제(2)
( static 클래스에서도 똑같이 같은 개념으로 인스턴스 멤버를 호출 할 수 없다. )
( 호출하고 싶다면, 외부 클래스의 객체 생성해야 한다. 20~21줄 참고 )
(그러나, 인스턴스 클래스에서는 외부 클래스 없이 모두 직접 호출 할 수 있다.)
6. 이해를 돕기 위한 예제(3)
: static 클래스의 멤버 접근의 관계와 지역 클래스의 변수 접근에 관한 설명한 예제이다.
( 외부 클래스의 멤버와 내부 클래스의 멤버들간의 접근 범위를 확인해본 예제이다.)
( 27번째 줄에 final을 붙인 이유는 지역 클래스 D 인스턴스가 소멸될 method()의 지역변수를
참조할 수 있기 때문에, 값을 변하지 못하게 하는 것이다. )
( JDK 1.8 이후 부터는 지역변수에 final을 안 붙여도 컴파일이 자동으로 붙여주지만, 만약 지역변수의
값을 변경시키는 문장이 나온다면, 컴파일 에러가 발생할 것이다. )
7. 이해를 돕기 위한 예제(4)
: 외부 클래스와 내부 클래스의 관계를 설명한 예제이다.
( 16~17번째 줄과 20번째 줄에서 각각 어떻게 객체를 생성하는지 확인하자. )
8. 이해를 돕기 위한 예제(5)
: 외부 클래스와 내부 클래스, 지역 클래스 간의 멤버 관계를 설명한 예제이다.