본문 바로가기

JAVA/자바의정석

객체지향 프로그래밍 II (6) - 내부 클래스

728x90
반응형

내부클래스(inner class)

 

[1] 내부클래스란?

클래스 내에 선언된 클래스이다.

내부 클래스의 장점

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

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

 

[2] 내부 클래스의 종류와 특징

변수 선언 위치에 따라 구분되어 진다.

내부클래스 특징
인스턴스 클래스
(instance class)
외부 클래스의 멤버변수 선언위치에 선언, 외부 클래스의 인스턴스 멤버처럼 다루어짐
주로 외부 클래스의 인스턴스멤버들과 관련된 작업에 사용 목적
스태틱 클래스
(static class)
외부 클래스의 멤버변수 선언위치에 선언, 부 클래스의 static멤버처럼 다루어짐
주로 외부 클래스의 static멤버, static메서드에 사용될 목적으로 선언
지역 클래스
(local class)
외부 클래스의 메서드나 초기화블럭 안에 선언, 선언된 내부 영역에서만 사용가능
익명 클래스
(anonymous class)
클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스(일회용)

[3] 내부 클래스의 제어자와 접근성

내부 클래스도 클래스이기 때문에 abstract나 final과 같은 제어자를 사용할 수 있을 뿐만 아니라, 멤버변수들처럼 private, protected과 접근제어자도 사용이 가능하다.

 

[4] 익명 클래스(anonymous class)

익명 클래스는 특이하게도 다른 내부 클래스들과 달리 이름이 없다. 클래스의 선언과 객체의 생성을 동시에 하기 때문에 단 한번만 사용될 수 있고 오직 하나의 객체만을 생성할 수 있는 일회용 클래스이다.

new 조상클래스이름() {
	멤버 선언;
}

	또는

new 구현인터페이스이름() {
	멤버 선언;
}

이름이 없기 때문에 생성자도 가질 수 없으며, 조상클래스의 이름이나 구현하고자 하는 인터페이스의 이름을 사용해서 정의하기 때문에 하나의 클래스로 상속받는 동시에 인터페이스를 구현하거나 둘 이상의 인터페이스를 구현할 수 없다.

오로지 단 하나의 인터페이스만을 구현할 수 있다.

 

익명클래스는 이름이 없기 때문에 '외부클래스명$숫자.class' 형식으로 클래스 파일명이 결정된다.

728x90
반응형