본문 바로가기

언어공부/Java

자바 내부 클래스의 종류와 익명클래스(anonymous class)

클래스의 종류와 익명클래스(anonymous class)에 대해서 알아보자.

클래스의 종류

클래스의 종류는 아래의 표와 같다.

 

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

 

인스턴스 내부클래스와 지역클래스는 인스턴스 변수와 인스턴스 메소드만 선언 가능하다.

인스턴스 내부클래스에서는 외부클래스의 인스턴스 변수&메소드와 정적 변수&메소드 모두 접근이 가능하다.

 

정적 내부클래스에서는 인스턴스 변수&메소드와 정적 변수&메소드 선언이 가능하다.

정적 내부클래스에서는 외부클래스의 정적변수와 정적메소드에만 접근이 가능하다.

 


익명클래스 (anonymous class)

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

 

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

 

컴파일 되면 외부클래스$번호.class파일로 저장된다. 

 

 

멤버변수에 대입할 수도 있고, 지역변수로 대입할 수도 있다.

 

출력화면

 


 

익명객체에서 메소드의 매개변수나 지역변수를 사용하면 해당 변수는 fianl 상수가 되어야 한다. 메소드를 호출할 때 값이 변경되면 안되기 때문이다.

 

출력화면

 


이벤트 처리에서의 익명클래스 사용