외부 클래스와 내부 클래스가 관계가 밀접한 경우 사용하며, 특정 클래스에서 제한적으로 생성 및 사용할 수 있도록 할때 용이하다.
관련이 있는 부분들을 묶어 코드 캡슐화
를 표현할 수 있으며, 외부에서 접근이 불가능하기 때문에 코드의 복잡성을 줄일 수 있다.
하지만 내부 클래스는 외부 클래스 인스턴스의 참조값을 가진다는 점에서
인스턴스 생성 시 시간적/공간적 성능이 저하
된다메모리 누수
가 발생할 수 있다.비정적(static이 아닌) 내부 클래스의 경우 외부 인스턴스를 통해 내부 클래스의 인스턴스를 생성해야 하기 때문에 참조가 일어날 수밖에 없다.
하지만 static 내부 클래스는 외부 클래스 인스턴스의 참조를 유지하지 않는다.
따라서 static 내부 클래스로 선언하면 메모리 누수를 예방할 수 있고, 클래스의 각 인스턴스당 더 적은 메모리를 사용하게 된다.
내부 클래스에서 외부 인스턴스에 접근할 일이 없다면 static inner class를 생성하는 것이 좋다.
Dto를 관리하는 방법 중 도메인 별로 내부 클래스로써 관리하는 방법이며, 이때 static inner class를 사용했었다. 이 경우 내부 -> 외부로의 접근이 없기 때문에, static으로 사용해 관리하면 효율적이다.