본문 바로가기

Java

내부 클래스(inner class), 익명 클래스(anonymous class)

출처 - Java의 정석 기초편 (남궁 성)


1. 내부 클래스
- 클래스 안의 클래스(서로 긴밀한 관계)
- 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근 가능
- 외부에는 불필요한 클래스 감추어 코드 복잡성 줄일 수 있음(캡슐화)

 

class A { // B의 외부 클래스
    …
    class B { // A의 내부 클래스
        … // A의 객체 생성 없이 A의 멤버 접근 가능
    }
    …
}



2. 내부 클래스 종류와 특징
- 종류와 유효범위(scope)는 변수의 선언위치에 따른 종류와 같음
- 인스턴스 내부 클래스, static 내부 클래스, 지역 내부 클래스, 익명 클래스
- 멤버변수처럼 접근 제어자 모두 사용 가능 (public, (default), protected, private)

 

class Outer {
    private class InstanceInner {}
    protected static class StaticInner {}
    
    void myMethod() {
        class LocalInner {}
    }
}

 


3. 내부 클래스 제어자와 접근성
- 내부 클래스 중에서 static 내부 클래스만 static멤버 선언 가능
- final과 static이 동시에 붙은 상수는 모든 내부 클래스에서 선언 가능
- 외부 클래스의 private멤버 접근 가능
- 지역 내부 클래스를 감싸고 있는 메서드의 상수만 사용 가능
- 외부 클래스 객체 먼저 생성 후 인스턴스 내부 클래스 객체 생성
- static 내부 클래스의 객체는 외부 클래스 먼저 생성하지 않아도 됨(내부 static멤버는 객체 생성없이 사용 가능)


4. 익명 클래스
- 이름이 없는 일회용 클래스
- 정의와 생성을 동시에(일회성)

 

new 조상클래스이름() {
    // 멤버 선언
}
또는
new 구현인터페이스이름() {
    // 멤버 선언
}

class Ex7_17 {
    Object iv = new Object(){ void method(){} };
    static Object cv = new Object(){ void method(){} };
    
    void myMethod() {
        Object lv = new Object(){ void method(){} };
    }
}



'Java' 카테고리의 다른 글

Object클래스(equal, hashCode, toString, String클래스, join)  (0) 2022.10.11
예외처리  (1) 2022.10.05
추상 클래스(abstract class), 인터페이스(interface)  (1) 2022.10.03
다형성(polymorphism)  (0) 2022.10.03
제어자(modifier)  (0) 2022.09.30