Java Mid 09 - Nested Class

중첩 클래스, 내부 클래스란?

for(...) {
	//...
		for(...){
			//...
		}
}

다음과 같이 클래스 안에 클래스를 중첩해서 정의하는데, 이것을 중첩 클래스(Nested Class)라고 한다.

class Outer{
	...
	//nested Class
		class Nested{
			...
			}
}

Static키워드를 통해 분류된다.

image

중첩과 내부의 차이

  • 중첩 : 어떤 것이 내부에 위치하거나 포함되는 구조적인 관계
    • 나의 안에 있지만 내 것이 아니다.
      • 큰 나무 상자안에 다른 작은 나무 상자가 있다고 생각하면 쉽다..
  • 내부 : 나의 내부에 있는 나를 구성하는 요소
    • 나의 심장은 나의 구성요소이다.
package nested.inner.ex2;

public class Car {
    private String model;
    private int chargeLevel;
    private Engine engine;

    public Car(String model, int chargeLevel) {
        this.model = model;
        this.chargeLevel = chargeLevel;
        this.engine = new Engine(); //내 정보를 넘겨서 instance를 생성
    }

    public void start() {
        engine.start();
        System.out.println( model + "시작 완료" );
    }
    private class Engine {

        public void start() {
            System.out.println( "충전 레벨을 확인:" + chargeLevel );
            System.out.println( model + "의 엔진을 구동합니다." );

        }

    }
}

  • 엔진을 내부 클래스로 만들었다.
  • Engine.start()를 비교해보자
    • Car의 인스턴스 변수인 chargeLevel에 직접 접근할 수 잇다.
    • Car의 인스턴스 변수인 model에 직접 접근할 수 있다.

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

  • 중첩 클래스는 특정 클래스가 다른 하나의 클래스 안에서만 사용이 되거나, 둘이 아주 긴밀하게 연결되어 있는 특별한 경우에만 사용해야 한다. 외부 여러곳에서 특정 클래스를 사용한다면 중첩 클래스로 사용하면 안된다.
  • 논리적인 그룹화 : 특정 클래스가 다른 하나의 클래스 안에서만 사용되는 경우 해당 클래스 안에 포함되는 것이 논리적으로 더 그룹화가 된다. 패키지를 열었을 때 다른 곳에서 사용될 필요가 없는 중첩 클래스가 외부에 노출되지 않는 장점도 있다.
  • 캡슐화 : 중첩 클래스는 바깥 클래스의 private멤버에 접근할 수 있다. 이렇게 해서 둘이 긴밀하게 연결하고 불필요한 public 메서드를 제거할 수 있다.

Reference

인프런 김영한님의 자바 강좌 + 나의 뇌



© 2022. by taewoo

Powered by taewoo