중첩 클래스(Inner Class)
클래스 내부에 선언된 클래스
서로 연관 있는 관계의 클래스를 하나로 관리
주로 GUI의 이벤트 처리 시에 많이 사용
클래스 내부에 선언된 위치에 따라 위 표에 나와있는 종류로 나눠진다.
중첩클래스는 클래스의 멤버와 같은 규칙이 적용된다.
abstract, final 과 private, protected 접근 제어자도 사용 가능
내부 클래스 중 스태틱 클래스(정적 중첩)만 static멤버를 가질 수 있다.
내부 클래스에 static이 필요하다면 static class로 선언해야 한다.(간혹)
static에 final이 같이 붙어 있을 경우 상수이므로 모든 내부 클래스에서 선언 가능
일반 중첩 클래스
외부클래스 멤버가 내부클래스 멤버 이용 불가(객체 생성 시 가능하므로)
내부클래스 멤버가 외부클래스 멤버 이용 가능
다음과 같은 개념으로 객체를 생성하여 사용이 가능
예제
정적(static) 중첩 클래스
동일한 클래스의 객체들 간에 공유할 목적으로 정의
static멤버의 특징을 그대로 갖는다.
에제
지역(local) 중첩 클래스
메서드 안에 클래스가 정의되어 있는 형태
특정 메서드만 사용하는 객체를 만들 경우에 사용
접근 지정자,지정 예약어 등 사용 불가
예제
중첩클래스 종류에 따라 만들어지는 클래스 파일 이해
파일이름 형식 : 외부 클래스명$내부 클래스명.class
익명 중첩 클래스
이름이 없는 내부 클래스
클래스의 선언과 객체의 생성이 동시에 이루어 진다.
한번만 사용되고 하나의 객체만 생성하는 일회용 클래스
기존 클래스의 특정 메서드를 오버라이딩하여 원하는 형태로 사용하고자 할 때
보통 이벤트 핸들러를 정의할 때 많이 사용
Java8 에서는 Lambda 식으로 대체 가능
예제
설명추가>
위 예제 코드에서 main메서드에 선언된 a변수를 보면 익명중첩 클래스 내에 오버라이딩하는 bbb메서드에서 사용 불가 라고 주석이 달려있다.
이것은 final선언이 되어 있는 b변수와 같이 a변수에도 단순히 접근하여 사용은 가능하나 값을 변경하는 것은 불가능 하다.
즉, 익명중첩클래스가 정의되는 지역의 변수는 모두 final개념으로만 접근하여 사용이 가능하다.
익명중첩 클래스는 외부의 일반필드(Primitive)에 접근이 아니라 GUI구현 시 이벤트 처리에서 컴포넌트에 접근하여 해당 컴포넌트가 가지는 값을 변경하는 용도로 많이 사용한다.
'교육자료 > Java' 카테고리의 다른 글
Java 클래스 구성 요소 (0) | 2017.06.25 |
---|---|
Java 클래스 구성 요소 (상속) (0) | 2017.06.23 |
Java 클래스 구성 요소(예약어) (0) | 2017.06.22 |
Java 클래스 구성 요소(Setter, Getter메서드) (0) | 2017.06.18 |
Java 클래스 구성 요소(접근 제어자) (0) | 2017.06.18 |