언어공부/Java
자바 내부 클래스의 종류와 익명클래스(anonymous class)
yeony
2021. 5. 30. 23:25
클래스의 종류와 익명클래스(anonymous class)에 대해서 알아보자.
클래스의 종류
클래스의 종류는 아래의 표와 같다.
내부 클래스 | 특징 |
인스턴스 클래스 (instance class) |
외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 인스턴스 멤버처럼 다루어진다. 주로 외부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적으로 선언된다. |
정적 클래스 (static class) |
외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 static멤버처럼 다루어진다. 주로 외부 클래스의 static멤버, 특히 static메소드에서 사용될 목적으로 사용된다. |
지역 클래스 (local class) |
외부 클래스의 메소드나 초기화블럭 안에 선언하며, 선언된 영역 내부에서만 사용될 수 있다. |
익명 클래스 (anonymous class) |
클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스(일회용) |
인스턴스 내부클래스와 지역클래스는 인스턴스 변수와 인스턴스 메소드만 선언 가능하다.
인스턴스 내부클래스에서는 외부클래스의 인스턴스 변수&메소드와 정적 변수&메소드 모두 접근이 가능하다.
정적 내부클래스에서는 인스턴스 변수&메소드와 정적 변수&메소드 선언이 가능하다.
정적 내부클래스에서는 외부클래스의 정적변수와 정적메소드에만 접근이 가능하다.
익명클래스 (anonymous class)
익명클래스는 다른 내부클래스들과는 달리 이름이 없다. 클래스의 선언과 객체의 생성을 동시에 하기 때문에 단 한번만 사용될 수 있고 오직 하나의 객체만을 생성할 수 있는 일회용 클래스이다.
이름이 없기 때문에 생성자도 가질 수 없으며, 조상클래스의 이름이나 구현하고자 하는 인터페이스의 이름을 사용해서 정의하기 때문에 하나의 클래스로 상속받는 동시에 인터페이스를 구현하거나 둘 이상의 인터페이스를 구현할 수 없다.
컴파일 되면 외부클래스$번호.class파일로 저장된다.
멤버변수에 대입할 수도 있고, 지역변수로 대입할 수도 있다.
익명객체에서 메소드의 매개변수나 지역변수를 사용하면 해당 변수는 fianl 상수가 되어야 한다. 메소드를 호출할 때 값이 변경되면 안되기 때문이다.