예제에는 경찰(Police), 도둑(Theif) 클래스가 있으며, 권총(Gun) 클래스를 소지할 수 있도록 멤버와 setter/getter 메소드가 구성되어 있다.
만약 권총을 경찰만 소지하도록 하고 싶다면 클래스 구성을 어떻게 해야할까? 대략 다음과 같은 방법들이 있을 것이다.
패키지를 나누고 권총과 경찰을 같은 패키지에 둔 뒤 패키지 접근제한을 설정한다.
일반 중첩클래스를 이용하여 경찰 안에 권총 클래스를 만든다.
2번을 적용시키면 다음과 같이 코드가 변경된다.
Police.java
publicclassPolice {privateGun gun;publicGungetGun(){returnthis.gun; }publicPolice(){this.gun=newGun();//내부에서 생성 }//Gun을 중첩 클래스로 구현(경찰만 사용하는 클래스)//접근제한을 private으로 하면 외부에서 형태조차 파악할 수 없다.privateclassGun {publicvoidshoot(){System.out.println("권총 발사!"); } }}
Theif.java
publicclassTheif {//아래 코드들은 모두 오류가 발생한다.//private Gun gun;//public void setGun(Gun gun){// this.gun = gun;//}//public Gun getGun(){// return this.gun;//}}