'자바 Study'에 해당되는 글 25건

  1. 2007.11.30 자바공부-10.private 지정자
클래스 설계자가 멤버변수에 private지정자가 붙으면 만들어진 객체는 그 어떤 외부의

객체로부터도 멤버변수를 읽고,쓰도록 하지 않겠다는 표시입니다.

객체가 존재하는 멤버변수를 완전히 숨겨버립니다. 객체가 존재하는 멤버변수를 숨긴다고

표현하는 것은 숨기는 객체 입장인 것이고 ,멤버변수를 읽고,쓰고자 하는 외부 객체 입장에

서 보면 멤버변수가 없는 것과 같습니다.

왜냐하면 절대로 읽고,쓸 수 없기 때문에 멤버변수의 존재자체도 모르고 있으니까

멤버변수가 없는 것과 같습니다.  멤버변수 뿐아니라 멤버함수나 생성자앞에 private이 붙게

되어도 꼭 같은 효과입니다. 생성자에 private 지정자을 붙이게 되면 생성자를 호출할 수

없으므로 객체를 만들수 없습니다. 멤버함수에 private을 붙이게 되면 멤버함수를 호출할 수

도 없습니다. 하지만 클래스의  모든 멤버변수, 모든 생성자,모든 멤버메소드를 private으로

하지는 않습니다. 만약 그렇다면  객체를 생성할 수 있는 방법이 전혀 없는 쓸모없는

클래스가 될테니까요.

 

             class Dragoon {

                           private Dragoon() {

                                        System.out.println("나는 Dragoon");

                           }

                           static Dragoon makeDragoon() {

                                        return new Dragoon();

                           }

             }

 

             public class DragoonPlayer {

                           public static void main(String[] args)  {

//                                     Dragoon d = new Dragoon();                                                     // 사용할 수 없습니다.

                                        Dragoon d = Dragoon.makeDragoon();             // 사용할 수 있습니다.

                           }

             }

예제 2 - 23 DragooPlayer.java

 

Dragoon클래스를 디자인한 프로그래머는 생성자 Dragoon() private으로 지정해 버려서

세상의 모든 객체가 Dragoon() 생성자를 호출할 수 없게 해버렸습니다.

             new Dragoon(); 이라고 호출할 수 없다는 것입니다.

Dragoon클래스처럼 생성자를 private으로 지정하게 되면 객체를 만들수 있는 방법이 없기 때문에 Dragoon클래스의 존재는 의미가 없어질 수 있습니다.

객체를 만들 수 있는 방법이 없으니까요. 하지만 Dragoon클래스의 설계자는 객체를 만들 수 있는 다른 방법을 제공해주고 있는데, 바로 static 메소드를 통해서 입니다.

클래스 메소드는 객체가 없어도 호출할 수 있는 메소드인 것은 아시지요?

하지만 클래스 메소드 앞에도 특정한 지정자가 없습니다. 기본 지정자를 지정한 셈으로

Dragoon클래스 설계자는 드라군 객체를  모든 객체에서 만들수 있도록 하지 않았습니다.

같은 패키지에 속한 객체에게만 드라군객체를 만들 수 있도록 했습니다.

 

 그림 2 - 7 [ compile run (DragoonPlayer.java) ]

 

 Dragoon클래스의 생성자를 private으로 지정해서 얻게 되는 점이 어떤 것이 있을까요?

첫째는 Dragoon객체가 마구 만들어 지는 것을 Dragoon클래스 설계자는 원하지 않았습니다. 둘째 Dragoon객체를 만드는 유일한 메소드를 제공함으로써 좀 더 드라군객체에 대한

제어를 할 수 있는 것이고, 셋째는 드라군객체의 생성자를 다른 객체에서 호출할 수 없기 때문에 드라군객체를 상속하는 것이 불가능해집니다.

Posted by
,