자바/기본적인 개념

내부 클래스(inner class)

백_곰 2021. 12. 10. 18:02

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)

: 외부 클래스와 내부 클래스, 지역 클래스 간의 멤버 관계를 설명한 예제이다.