[Java] 내부 클래스
programming/java

[Java] 내부 클래스

12. 내부 클래스

 

12.1 내부(중첩) 클래스(inner class, nested class)

12.1.1 내부 클래스의 정의

클래스 안에 선언된 클래스
특정 클래스 내에서만 주로 사용되는 클래스를 내부 클래스로 선언한다.
GUI 애플리케이션(AWT, Swing)의 이벤트 처리에 주로 사용됨
내부 클래스도 클래스이기 때문에 외부클래스$내부클래스.class로 컴파일됨

 

12.1.2 장점

내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다.
코드의 복잡성을 줄일 수 있다.

 

12.1.3 단점

코드의 재사용이 어려움

 

Inner and Nested Classes . (2013). Retrieved from https://stackoverflow.com/questions/20298705/inner-and-nested-classes.

 

class AA {
	static class BB {
    	static int bb = 20;
        static class CC {
        	int cc = bb + 10;
        }
    }
}

public class ClassTop {
	public static void main(String[] args) {
    	AA.BB.CC = new AA.BB.CC();
        
        System.out.println("CC클래스 내부 변수 CC = " + c.cc);
    }
}

 

 

12.2 무명 내부 클래스(anonymous inner class)

이벤트 처리 등 1회성으로 사용하는 간단한 코드에 자주 사용

e.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {
    	System.exit(0);
    }
});

 

12.2.2 클래스의 종류

12.2.2.1 이름이 있는 클래스 - 재사용이 가능함

class 클래스이름 {
	// (...)
}

 

12.2.2.2 이름이 없는 클래스 - 재사용을 할 수 없음

/**
 * 이름이 없는 일회용 클래스
 */
new 클래스이름() {
	// (...)
}

new 인터페이스이름() {
	// (...)
}

 

12.2.3 무명 내부 클래스는 이름이 없기 때문에 외부클래스$번호.class로 컴파일됨

외부클래스.class
외부클래스$번호.class

interface Cookable {
	public void cook();
}

class Food {
    // Implementation of the Interface
    Cookable p = new Cookable() {
    	public void cook() {
        	System.out.println("Cook implementer");
        }
    };
}

 

 

12.3 실습문제