[Java] 중첩 클래스와 내부 클래스_1

SeoYoon·2024년 11월 10일

💗JAVA

목록 보기
13/21

1.중첩 클래스의 분류

(1) 내부 클래스 (non-static, 바깥 인스턴스 소속)

  1. 내부 클래스 (inner class)
  2. 지역 클래스 (local class)
  3. 익명 클래스 (anonymous class)

(2) 정적 중첩 클래스 (static nested class, 전혀 다른 인스턴스)



2. 중첩 클래스의 선언 위치

  • 정적 중첩 클래스 -> 정적 변수와 같은 위치
  • 내부 클래스 -> 인스턴스 변수와 같은 위치
  • 지역 클래스 -> 지역 변수와 같은 위치
class Outer {
...
	// 정적 중첩 클래스
    static class StaticNested {
    ...
    }
    
    // 내부 클래스
    class Inner {
    ...
    }
}
  • 정적 중첩 클래스 : 정적 변수와 같이 앞에 static사용
  • 내부 클래스 : 인스턴스 변수와 같이 앞에 static 사용X
class Outer {

	public void process() {
    // 지역 변수
    int localVAr = 0;
    
    // 지역 클래스
    class Local {...}
    
    Local local = new Local();
    }
}
  • 지역 클래스는 지역 변수와 같이 코드 블럭 안에서 클래스 정의

3. 중첩 클래스 Vs 내부 클래스

(1) 중첩(Nested)

  • 어떤 다른 것이 내부에 위치하거나 포함되는 구조적인 관계. 즉 나의 안에 있지만 내것이 아닌 것. 단순히 위치만 안에 있는 것.
  • static이 붙음
  • 바깥 클래스의 인스턴스에 소속되지 않음

(2) 내부(Inner)

  • 나의 내부에 있는 나를 구성하는 요소. 즉, 나의 내부에서 나를 구성하는 요소.
  • static이 붙지 않음. 즉, 인스턴스 멤버가 됨
  • 자신에 멤버에는 당연히 접근할 수 있음
  • 바깥 클래스의 인스턴스 멤버에 접근할 수 있음
  • 바깥 클래스의 클래스 멤버에 접근할 수 있음

(3) 내부 클래스의 종류

* 내부 클래스(inner class) : 바깥 클래스의 인스턴스 멤버에 접근
* 지역 클래스(local class) : 내부 클래스의 특징 + 지역 변수에 접근
* 익명 클래스(anonymous class) : 지역 클래스의 특징 + 클래스의 이름이 없는 특별한 클래스

(4) private 접근 제어자

  • private 접근 제어자는 같은 클래스 안에 있을 때만 접근할 수 있음
  • 내부 클래스도 바깥 클래스와 같은 클래스 안에 있음. 즉, 내부 클래스는 바깥 클래스의 private 접근 제어자에 접근할 수 있음


3-1. 중첩 클래스와 내부 클래스를 분류하는 방법

  • 바깥 클래스에서 봤을 때 안의 클래스가 나의 인스턴스에 소속이 되는가 되지 않는가의 차이

  • 정적 중첩 클래스는 바깥 클래스와 전혀 다른 클래스(바깥 인스턴스에 소속X)

  • 내부 클래스는 바깥 클래스를 구성하는 요소(바깥 인스턴스에 소속)



4. 용어 정리

* 중첩 클래스 : 정적 중첩 클래스 + 내부 클래스 종류 모두

* 정적 중첩 클래스 : static 키워드로 선언된 중첩 클래스로, 하나의 클래스 내부에 다른 클래스를 정의하는 중첩 클래스의 한 종류이며 외부 클래스의 인스턴스 없이 독립적으로 사용 가능

* 내부 클래스 : 클래스 안에 또 다른 클래스를 정의한 것. 내부 클래스는 외부 클래스와 밀접하게 연관된 클래스를 정의할 때 사용되며, 외부 클래스의 멤버(필드, 메서드 등)에 직접 접근할 수 있는 특성을 가짐



5. 중첩 클래스를 사용하는 이유

(1) 중첩 클래스는 언제 사용하는가?

: 내부 클래스를 포함한 모든 중첩 클래스는 특정 클래스가 다른 하나의 클래스 안에서만 사용되거나, 둘이 아주 긴밀하게 연결되어 있는 특별한 경우에만 사용. 외부의 여러 클래스가 특정 중첩 클래스를 사용한다면 중첩 클래스로 만들면 안 됨.


(2) 중첩 클래스를 사용하는 이유

  • 논리적 그룹화 : 특정 클래스가 하나의 클래스 안에서만 사용되는 경우 해당 클래스를 안에 포함하는 것이 논리적으로 더 그룹화 됨. 패키지를 열었을 때 다른 곳에서 사용될 필요가 없는 중첩 클래스가 외부에 노출되지 않는다는 장점도 있음

  • 캡슐화 : 중첩 클래스는 바깥 클래스의 private 멤버에 접근할 수 있음. 둘을 긴밀하게 연결하고 불필요한 public 메서드를 제거할 수 있음

profile
공부 기록

0개의 댓글