내부 클래스

2024. 4. 16. 18:45Java

자바에서 클래스 내부에 또 다른 클래스를 정의하는 개념

- 외부 클래스의 멤버처럼 취급

- 특별한 접근 권한과 기능을 가짐

- 내부 클래스는 주로 외부 클래스와 긴밀하게 관련된 작업을 수행하기 위해 사용

 

1. 접근성과 은닉성

- 외부 클래스의 필드와 메소드에 직접적으로 접근할 수 있음

- 외부 클래스의 private 멤버들에도 접근이 가능하다는 것을 의미

- 외부에서는 내부 클래스의 private 멤버에 접근할 수 없어 은닉성을 제공

 

2. 코드의 조직화

- 관련된 기능을 같은 외부 클래스 안에 묶어두면, 코드를 더 잘 조직화하고 관리 할 수 있음

- 코드의 가독성과 유지보수성을 향상시킴

 

3. 종류

- 멤버 내부 클래스, 로컬 내부 클래스, 익명 내부 클래스,  정적 내부 클래스

 

4. 특정 상황에 적합

- 내부 클래스는 특정 상황에서만 유용함. 예를 들어, 한 클래스가 다른 클래스의 동작을 확장하거나 보조하는 경우, 또는 인터페이스의 구현을 숨기고 싶은 경우에 주로 사용

 

로컬 내부 클래스

- 메소드 내부에 정의되는 클래스

- 주로 특정 메소드에서만 사용되는 기능을 구현하는 데 사용

 

1. 메소드 내 정의

2. 접근 제한

3. 외부 메소드의 변수 접근

4. 인스턴스 생성

public class OuterClass {
	public void someMethod() {
		class LocalInnerClass {
			public void localMethod() {
				// 로컬 내부 클래스의 메소드 내용
			}
		}
		LocalInnerClass lic = new LocalInnerClass();
		lic.localMethod();
	}
}

-이와 같은 로컬 내부 클래스는 특정 메소드의 작업을 지원하기 위해 일시적으로 필요한 기능을 구현할 때 사용

 

JDK에서 로컬 내부 클래스 사용 사례

- Swing과 AWT 이벤트 처리

- 스레드 작업

- 콜백 메커니즘

 

정적 내부 클래스

- 외부 클래스의 정적 멤버처럼 취급되는 내부 클래 스

- 정적 내부 클래스는 외부 클래스 내부에 static 키워드를 사용하여 정의

- 이 클래스는 외부 클래스의 정적 멤버처럼 취급

- 외부 클래스의 인스턴스 변수나 메소드에 접근할 수 없음

- 외부 클래스의 정적 변수나 정적 메소드에는 접근 가능(static)

public class OuterClass {
	// 외부 클래스의 멤버 변수와 메소드
	public class InnerClass {
		// 멤버 내부 클래스의 멤버 변수와 메소드
	}
}
OuterClass.StaticInnerClass inner = new OuterClass.StaticInnerClass();
inner.someMethod(); // 정적 내부 클래스의 메소드 호출

 

JDK에서 정적 내부 클래스 사용 사례

- 컬렉션 프레임워크의 Iterator 구현

- Map 인터페이스의 Entry 클래스

- 스레드 관련 클래스들의 헬퍼 클래스

- GUI 컴포넌트의 이벤트 리스너

'Java' 카테고리의 다른 글

멀티 스레드(Thread)  (1) 2024.04.22
Java IO(입출력)  (0) 2024.04.22
예외처리(Exception)  (1) 2024.04.16
인터페이스(Interface)  (0) 2024.04.16
추상 클래스  (0) 2024.04.16