본문 바로가기
JAVA

[JAVA] Inner Class와 Outer Class

by kwh_coding 2024. 3. 27.

자바에서는 클래스 내부에 다른 클래스를 선언할 수 있다. 이러한 내부 클래스(inner class)는 외부 클래스(outer class) 내부에서만 사용되는 클래스이다. 내부 클래스를 사용하면 논리적으로 연관된 클래스를 그룹화하고 캡슐화할 수 있다.

 

1. 멤버 내부 클래스 (Member Inner Class): 외부 클래스의 멤버 변수와 마찬가지로 선언되는 클래스이다. 인스턴스화하기 전에는 외부 클래스의 인스턴스가 먼저 생성되어야 한다.

 

2. 정적 내부 클래스 (Static Nested Class): 내부 클래스에 static 키워드가 사용된 경우이다. 정적 내부 클래스는 외부 클래스의 인스턴스에 바인딩되지 않는다.

 

3. 지역 내부 클래스 (Local Inner Class): 메서드 내부에 선언되는 클래스로, 선언된 메서드 내에서만 사용된다.

 

4. 익명 내부 클래스 (Anonymous Inner Class): 이름이 없는 내부 클래스로, 클래스의 정의와 동시에 인스턴스를 생성하여 사용된다.

 

각 내부 클래스 유형은 특정한 상황에 유용하게 사용될 수 있다. 내부 클래스를 사용하여 코드를 구성함으로써 클래스 간의 관련성을 강화하고 코드의 가독성을 향상시킬 수 있다.

class OuterClass{
	int a = 10;
	static int b = 20;
	
	class InnerClass{
		int c = 30;
		static int d = 40; //JDK17부터 내부클래스에 static 변수 가능
		
		public void show() {
			System.out.println("a = " + a);
			System.out.println("b = " + b);
			System.out.println("c = " + c);
			System.out.println("d = " + d);
		}
	}
	
	//정적내부클래스
	static class InnerClass2{
		int e = 50;
		static int f = 60;
		public void show() {
//			System.out.println("a = " + a); //static 클래스는 외부클래스에 있는 인스턴스 변수에 접근 불가능
			System.out.println("b = " + b);
			System.out.println("e = " + e);
			System.out.println("f = " + f);
		}
	}
	
	public void disp() {
		//내부클래스가 가진 show 메서드 호출
		InnerClass in = new InnerClass();
		in.show();
		InnerClass2 in2 = new InnerClass2();
		in2.show();
	}
	
}

public class Ex8_InnerClass {
	
	public static void main(String[] args) {
		
		OuterClass outer = new OuterClass();
		outer.disp();
		
	}

}

 

'JAVA' 카테고리의 다른 글

[JAVA] Generic Type  (0) 2024.03.28
[JAVA] Anonymous Inner Class  (0) 2024.03.27
[JAVA] Interface  (0) 2024.03.27
[JAVA] Abstract 예제  (0) 2024.03.26
[JAVA] Abstract  (0) 2024.03.26