객체로부터도 멤버변수를 읽고,쓰도록 하지 않겠다는 표시입니다.
객체가 존재하는 멤버변수를 완전히 숨겨버립니다. 객체가 존재하는 멤버변수를 숨긴다고
표현하는 것은 숨기는 객체 입장인 것이고 ,멤버변수를 읽고,쓰고자 하는 외부 객체 입장에
서 보면 멤버변수가 없는 것과 같습니다.
왜냐하면 절대로 읽고,쓸 수 없기 때문에 멤버변수의 존재자체도 모르고 있으니까
멤버변수가 없는 것과 같습니다. 멤버변수 뿐아니라 멤버함수나 생성자앞에 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객체를 만드는 유일한 메소드를 제공함으로써 좀 더 드라군객체에 대한
제어를 할 수 있는 것이고, 셋째는 드라군객체의 생성자를 다른 객체에서 호출할 수 없기 때문에 드라군객체를 상속하는 것이 불가능해집니다.
'자바 Basic > 자바객체' 카테고리의 다른 글
자바공부-12.protected 지정자 (3) | 2007.11.30 |
---|---|
자바공부-11.public 지정자 (0) | 2007.11.30 |
자바공부-9.기본지정자 (패키지 지정자) (0) | 2007.11.30 |
자바공부-8.액세스 지정자 (0) | 2007.11.30 |
자바공부-7.패키지-같은 식구 클래스의 모임 (0) | 2007.11.30 |