내부 클래스의 종류는 무엇이 있나요?

내부 클래스(Inner Class)는 자바(Java)와 같은 객체지향 프로그래밍 언어에서 하나의 클래스 내부에 정의된 클래스를 의미합니다.

내부 클래스를 사용하면 외부 클래스의 멤버에 쉽게 접근할 수 있고, 논리적으로 관련된 클래스를 그룹화할 수 있으며, 캡슐화와 응집도를 높일 수 있습니다.

내부 클래스의 종류는 크게 다음과 같이 네 가지로 나뉩니다.

1. 멤버 내부 클래스 (Member Inner Class) - 외부 클래스의 멤버 변수처럼 선언된 클래스입니다.

- 외부 클래스의 인스턴스 멤버에 접근 가능하며, 외부 클래스의 인스턴스 없이는 생성할 수 없습니다.

- 생성 방법: 외부클래스명.내부클래스명 인스턴스 = 외부인스턴스.new 내부클래스명(); - 예: ```java public class Outer { class Inner { void method() { System.out.println("멤버 내부 클래스"); } } } ``` 2. 정적 내부 클래스 (Static Nested Class) - `static` 키워드가 붙은 내부 클래스입니다.

- 외부 클래스의 인스턴스 멤버에 바로 접근할 수 없으며, 외부 클래스 이름만으로 생성 가능합니다.

- 외부 클래스의 정적(static) 멤버만 직접 참조 가능합니다.

- 예: ```java public class Outer { static class Nested { void method() { System.out.println("정적 내부 클래스"); } } } ``` 3. 지역 내부 클래스 (Local Inner Class) - 메서드나 생성자 내부에 선언된 클래스입니다.

- 메서드 내에서만 사용 가능하며, 해당 메서드의 로컬 변수(final 또는 effectively final인 변수)에도 접근할 수 있습니다.

- 주로 복잡한 메서드 내에서 일시적인 작업을 위해 사용됩니다.

- 예: ```java public void someMethod() { class LocalInner { void method() { System.out.println("지역 내부 클래스"); } } LocalInner local = new LocalInner(); local.method(); } ``` 4. 익명 내부 클래스 (Anonymous Inner Class) - 이름이 없는 내부 클래스로서, 주로 인터페이스나 추상 클래스의 즉시 구현 객체를 만들 때 사용합니다.

- 정의와 동시에 인스턴스가 생성되며, 재사용이 필요 없을 때 간결하게 사용됩니다.

- 예: ```java Runnable r = new Runnable() { @Override public void run() { System.out.println("익명 내부 클래스"); } }; ``` --- 요약 | 내부 클래스 종류 | 선언 위치 | 외부 클래스 인스턴스 필요 여부 | 특징 | |--------------------|---------------------|--------------------------|-------------------------------------| | 멤버 내부 클래스 | 외부 클래스 멤버 자리 | 필요 | 외부 클래스의 인스턴스 멤버 접근 가능 | | 정적 내부 클래스 | 외부 클래스 멤버 자리 (`static`) | 불필요 | 외부 클래스 이름으로 직접 생성 가능, 정적 멤버 접근 가능 | | 지역 내부 클래스 | 메서드/생성자 내부 | 메서드 실행 중 생성됨 | 메서드 내 로컬 변수 접근 가능, 메서드 내에서만 유효 | | 익명 내부 클래스 | 표현식 내 (주로 메서드 인자) | 불필요 | 이름 없이 즉시 구현하여 객체 생성, 한 번만 사용 가능 | 내부 클래스는 객체지향 설계 시 더 깔끔한 코드 구조를 위해 상황에 맞게 선택하여 사용할 수 있습니다.


관련 게시글

자바에서 병렬 처리를 구현하는 방법은 무엇인가요?

자바에서 병렬 처리는 여러 작업을 동시에 실행하여 프로그램의 성능과 응답성을 향상시키는 기법입니다....

문제 해결 및 면접 질문

문제 해결 및 면접 질문에 관한 글 --- 1. 문제 해결의 중요성 문제 해결 능력은 개인과...

자바에서 중복된 요소를 제거하는 방법은 무엇인가요?

자바(Java)에서 중복된 요소를 제거하는 방법에는 여러 가지가 있습니다. 주로 컬렉션프레임워크를 활용하...

자바 Collections에서 정렬하는 방법은 무엇인가요?

자바 Collections에서 정렬하는 방법에 대해 설명드리겠습니다. 자바에서는 컬렉션(Collection) 자료구조의...

자바의 메모리 누수 문제를 해결하는 방법은 무엇인가요?

자바의 메모리 누수 문제를 해결하는 방법 --- 1. 메모리 누수란? 자바는 가비지 컬렉션(GC)...

팩토리 패턴을 사용하여 주어진 문제를 해결해보세요.

팩토리 패턴을 사용하여 주어진 문제를 해결해보세요. --- 1. 팩토리 패턴이란? 팩토리 패턴...