클래스 내에 선언된 클래스
내부 클래스를 사용하면 외부 클래스의 멤버들에 쉽게 접근할 수 있고, 코드의 복잡성을 줄일 수 있다.
외부적으로 불필요한 데이터를 감출 수 있어 캡슐화(encapsulation)를 달성하는 데 유용
외부 클래스와 내부 클래스가 서로 연관되어 있을 때 사용의 편의성을 고려하여 만들어진 문법 요소
멤버 내부 클래스
인스턴스 내부 클래스는 객체 내부에 멤버의 형태로 존재
외부 클래스의 모든 접근 지정자의 멤버에 접근할 수 있다.
인스턴스 내부 클래스는 반드시 외부 클래스를 생성한 이후에 사용해야 한다
(정적 변수와 정적 메서드는 인스턴스 내부 클래스에서 선언할 수 없다.)
멤버 내부 클래스
static 키워드를 사용
내부 클래스가 외부 클래스의 존재와 무관하게 정적 변수를 사용할 수 있다.
클래스의 멤버가 아닌 메서드 내에서 정의되는 클래스
지역 변수와 유사하게 메서드 내부에서만 사용가능
일반적으로 메서드 안에서 선언 후에 바로 객체를 생성해서 사용