Java Mid 09 - Nested Class
in Programming Language on Java
중첩 클래스, 내부 클래스란?
for(...) {
//...
for(...){
//...
}
}
다음과 같이 클래스 안에 클래스를 중첩해서 정의하는데, 이것을 중첩 클래스(Nested Class)라고 한다.
class Outer{
...
//nested Class
class Nested{
...
}
}
Static키워드를 통해 분류된다.
중첩과 내부의 차이
- 중첩 : 어떤 것이 내부에 위치하거나 포함되는 구조적인 관계
- 나의 안에 있지만 내 것이 아니다.
- 큰 나무 상자안에 다른 작은 나무 상자가 있다고 생각하면 쉽다..
- 나의 안에 있지만 내 것이 아니다.
- 내부 : 나의 내부에 있는 나를 구성하는 요소
- 나의 심장은 나의 구성요소이다.
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
인프런 김영한님의 자바 강좌 + 나의 뇌