일반 중첩 클래스
일반 중첩 클래스
이 문서에서는 일반 중첩 클래스에 대해서 살펴본다.
일반 중첩 클래스의 형태
public class Outer {//외부 클래스
class Innner {//일반 중첩 클래
}
}
일반 중첩 클래스도 클래스이기 때문에 내부에 클래스의 구성요소인 멤버 필드, 메소드, 생성자, 중첩 클래스를 가질 수 있다. 또한 기타 멤버들과 마찬가지로 접근제한 키워드를 4종류 모두 사용할 수 있다.
public class Outer {
private class Inner1 { }
class Inner2 { }
protected class Inner3 { }
public class Inner4 { }
}
일반 중첩 클래스의 활용 예시
일반 중첩 클래스를 어떻게 써야 하나요?
가장 대답하기 어려운 질문이지만 자주 사용하는 형태를 살펴보면 감을 잡을 수 있다.
public class Police {
private Gun gun;
public void setGun(Gun gun) {
this.gun = gun;
}
public Gun getGun(){
return this.gun;
}
}
예제에는 경찰(Police), 도둑(Theif) 클래스가 있으며, 권총(Gun) 클래스를 소지할 수 있도록 멤버와 setter/getter 메소드가 구성되어 있다.
만약 권총을 경찰만 소지하도록 하고 싶다면 클래스 구성을 어떻게 해야할까? 대략 다음과 같은 방법들이 있을 것이다.
패키지를 나누고 권총과 경찰을 같은 패키지에 둔 뒤 패키지 접근제한을 설정한다.
일반 중첩클래스를 이용하여 경찰 안에 권총 클래스를 만든다.
2번을 적용시키면 다음과 같이 코드가 변경된다.
public class Police {
private Gun gun;
public Gun getGun(){
return this.gun;
}
public Police(){
this.gun = new Gun();//내부에서 생성
}
//Gun을 중첩 클래스로 구현(경찰만 사용하는 클래스)
//접근제한을 private으로 하면 외부에서 형태조차 파악할 수 없다.
private class Gun {
public void shoot(){
System.out.println("권총 발사!");
}
}
}
Police만 Gun을 생성하고 사용할 수 있도록 구조가 변경되었다.
Last updated