2019. 1. 20. 18:20ㆍ개발일기/JAVA
이너 클래스 (Inner Class) 혹은 내부 클래스란? 말 그대로 '클래스 내부에 선언한 클래스' 라고 할수 있다.
내부에 클래스를 선언하는 이유는 보통 내부 클래스와 외부 클래스가 밀접한 관련이 있을때 선언한다.
또한 내부 클래스가 그 밖에 다른 클래스와는 협력할 일이 없는 경우에 내부 클래스로 선언해서 사용한다.
- 내부 클래스를 간단히 표현하면 아래와 같다.
내부 클래스는 선언하는 위치나 예약어에 따라 크게 네가지 유형으로 나뉜다.
먼저 인스턴스 내부 클래스, 정적(Static) 내부 클래스, 지역(Local) 클래스가 있는데, 이것은 클래스 내부에 선언하는 변수의 유형과 유사하다.
마지막으로 클래스 이름없이 생성하여 사용할 수 있는 익명(Anonymous) 내부 클래스가 있다.
내부 클래스는 유형에 따라 만드는 방법이 다르며, 클래스 내부에 선언할 수 있는 변수 유형과 사용할 수 있는 외부 클래스 변수 유형도 다르다.
-아래에서 각 내부 클래스의 유형의 예제를 살펴보자.
1. 인스턴스 내부 클래스
인스턴스 내부 클래스는 인스턴스 변수를 선언할 때와 같은 위치에 선언, 외부클래스 내부에서만 생성하여 사용하는 객체를 선언할때 사용한다.
예를 들어 어떤 클래스 내에 여러 변수가 있고, 이들 변수 중 일부를 모아 클래스로 표현할 수 있다.
이 클래스를 다른 외부 클래스에서 사용할 일이 없는 경우 내부 인스턴스 클래스로 정의한다. 인스턴스 내부 클래스는 외부 클래스 생성 후에 생성 되고,
외부 클래스를 먼저 생성하지 않고 인스턴스 내부 클래스를 사용할 수는 없다. 이는 이후 설명하는 정적 내부 클래스와 다른점이다.
2. 정적 내부 클래스
정적 내부 클래스는 내부 클래스가 외부 클래스 생성과 무관하게 사용할 수 있어야 할때 사용한다. 정적 내부 클래스는 인스턴스 내부 클래스처럼,
외부 클래스의 멤버 변수와 같은 위치에 정의하며 static 예약어를 함께 사용한다.
3. 지역 내부 클래스
지역 내부 클래스는 지역 변수처럼 메소드 내부에 클래스를 정의하여 사용하는 것을 말한다. 따라서 이 클래스는 메소드 안에서만 사용할 수 있다.
4. 익명 내부 클래스
익명 내부 클래스는 이름을 사용하지 않는 클래스이다.
내부 클래스를 표로 정리하면 아래와 같다.
종류 |
구현 위치 |
사용할 수 있는 외부 클래스 변수 |
생성 방법 |
인스턴스 내부 클래스 |
외부 클래스 멤버 변수와 동일 |
외부 인스턴스 변수 외부 전역 변수 |
외부 클래스를 먼저 만든 후 내부 클래스 생성 |
정적 내부 클래스 |
외부 클래스 멤버 변수와 동일 |
외부 전역 변수 |
외부 클래스와 무관하게 생성 |
지역 내부 클래스 |
메소드 내부에 구현 |
외부 인스턴스 변수 외부 전역 변수 |
메소드를 호출할 때 생성 |
익명 내부 클래스 |
메소드 내부에 구현 변수에 대입하여 직접 구현 |
외부 인스턴스 변수 외부 전역 변수 |
메소드를 호출할때 생성되거나, 인터페이스 타입 변수에 대입할 때 new 예약어를 사용하여 생성 |
'개발일기 > JAVA' 카테고리의 다른 글
| JAVA의 객체지향 프로그래밍 (클래스, 멤버변수, 메소드) (0) | 2019.01.21 |
|---|