개발 일지/Java

[Java] 내부 클래스(Inner Class)

미숫가루설탕많이 2022. 12. 28. 14:55

 내부 클래스(inner class)는 클래스 내에 선언된 클래스로, 외부 클래스와 내부 클래스가 서로 연관되어 있을 때 사용한다.

 

 내부 클래스를 사용하면 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있고, 외부에서 내부 클래스에 접근이 안되기 때문에 코드의 복잡성을 줄일 수 있다는 장점이 있다. 또한, 외부적으로 불필요한 데이터를 감출 수 있어 객체 지향의 중요한 핵심 원칙인 캡슐화(encapsulation)를 달성하는 데 유용하다.

 

class Outer { // 외부 클래스
	
	class Inner {
		// 인스턴스 내부 클래스	
	}
	
	static class StaticInner {
		// 정적 내부 클래스
	}

	void run() {
		class LocalInner {
		// 지역 내부 클래스
		}
	}
} 

 

 위 코드를 보면 인스턴스 내부 클래스, 정적 내부 클래스, 지역 내부 클래스 세 가지로 분류된다. 기본적으로 내부 클래스는 외부 클래스 내에 선언된다는 점을 제외하면 일반 클래스와 차이점이 없다. 단지 외부 클래스와 내부 클래스가 긴밀한 연관이 있을 때 사용의 편의성을 고려하여 만들어진 문법 요소이다.

 

 

 

 

인스턴스 내부 클래스


 인스턴스 내부 클래스와 정적 내부 클래스를 하나로 묶어 멤버 내부 클래스라고 통칭한다.

 

 인스턴스 내부 클래스는 객체 내부에 멤버의 형태로 존재하며, 외부 클래스의 모든 접근 지정자의 멤버에 접근할 수 있다. 외부 클래스의 멤버 변수 선언 위치에 선언하고 외부 클래스의 인스턴스처럼 다뤄진다. 클래스 내부에 static 키워드를 가지지 않아야 하며, 주로 외부 클래스의 인스턴스 변수나 메소드에 사용될 목적으로 선언된다.

 

 

 

 

정적 내부 클래스


 만약 내부 클래스가 외부 클래스의 존재와 무관하게 정적 변수를 사용할 수 있게 하려는 경우에 사용된다. 정적 내부 클래스는 인스턴스 내부 클래스와 동일하게 클래스의 멤버 변수 위치에 정의하지만 static 키워드를 사용한다는 점에서 차이가 있다. 

 

 외부 클래스 영역에 선언하며 외부 클래스의 static 멤버처럼 다뤄진다.

 

 객체를 생성할 때 static 키워드로 이미 클래스 멤버로서 메모리에 올라가 있는 상태이기 때문에 외부 클래스의 호출이 따로 필요하지 않다.

 

 

 

 

지역 내부 클래스

 


 지역 내부 클래스는 클래스의 멤버가 아닌 메서드 내에서 정의되는 클래스이다.

 

 지역 내부 클래스도 지역 변수와 유사하게 메서드 내부에서만 사용이 가능하기 때문에 일반적으로 메서드 안에서 선언 후에 바로 객체를 생성해서 사용한다.

'개발 일지 > Java' 카테고리의 다른 글

[Java] 상속/포함 관계  (0) 2022.12.29
[Java] 상속(Inheritance)  (0) 2022.12.29
[Java] this 와 this()  (0) 2022.12.28
[Java] 생성자(Constructor, ctor)  (0) 2022.12.28
[Java] 메서드 오버로딩(Method Overloading)  (0) 2022.12.27