# 내포 클래스 - 클래스 안에 클래스를 정의하는 것을 내포 클래스라고 한다 - 클래스 안에 다른 클래스가 들어가 있는 모습 - 중첩 클래스, 내부 클래스 등으로 불리기도 한다 - 자주 사용되지는 않고, 특수한 경우에 사용된다 - 요새는 내포 클래스를 잘 사용하지 않고, 그냥 클래스마다 파일을 만들곤 한다 - 자바에서는 내포 클래스가 크게 두 가지로 나뉜다 - 정적 내포 클래스 - 비정적 내포 클래스 ## 정적 내포 클래스 (static nested class) - 정적 내포 클래스는 외부 클래스의 정적 멤버처럼 취급된다. - 외부 클래스의 인스턴스가 생성되지 않아도 사용할 수 있다 - 이 클래스는 외부 클래스의 인스턴스 멤버에 접근할 수 없으며, 외부 클래스의 정적 멤버만 접근 가능하다. ```java class Outer { static class Inner { int iv = 200; } } public class Main { public static void main(String[] args) { Outer.Inner inner = new Outer.Inner(); System.out.println(inner.iv); } } ``` ## 비정적 내포 클래스 (non-static nested class) - 비정적 내포 클래스는 외부 클래스의 인스턴스 멤버처럼 취급된다. - 외부 클래스의 인스턴스가 생성되어야 사용할 수 있다. - 이 클래스는 외부 클래스의 인스턴스 멤버에 접근할 수 있으며, 외부 클래스의 정적 멤버도 접근 가능하다. ```java class Outer { class Inner { int iv = 200; } } public class Main { public static void main(String[] args) { Outer outer = new Outer(); Outer.Inner inner = outer.new Inner(); System.out.println(inner.iv); } } ``` ## 내포 클래스의 용도 - 서로 연관된 클래스들을 그룹지을 수 있음 - 패키지로 그룹 짓는 것도 가능하다 - 하지만 클래스 속에 넣는 것이 더 긴밀한 관계를 나타낼 수 있다 - 내포 클래스는 바깥 클래스의 멤버들을 자유롭게 사용할 수 있다 - private 멤버에도 접근 가능하다 - 반대의 경우에는 불가능하다