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

  1. 2007.11.30 자바공부-11.public 지정자


멤버변수와 멤버메소드,static 변수,static 메소드,생성자등에 public 지정자를 붙이면

멤버변수,멤버메소드,static변수,static 메소드, 생성자는 어떤 객체에서도 읽고,쓰고,

호출할 수 있습니다.













 

import protoss.*;

 

public class ZealotPlayer {

             public static void main(String[] args) {

                           Zealot z = new Zealot();                                // protoss.Zealot 객체

//                        System.out.println(“strength “ +         z.strength);          // Oops ! 컴파일오류

                           System.out.println(“strength “ +         z.getStrength());

             }

}

예제 2 - 24 ZealotPlayer.java

 

예제 2 - 16 질럿클래스의 설계자는 생성자, 멤버메소드를 모드 public으로 설계했습니다.

그리고 멤버변수는 기본지정자(패키지 지정자)로 설계했습니다.

 

이렇게 하면 모든 객체에서 질럿 클래스의 생성자를 이용해서 객체를 만들수 있고,

멤버 메소드를 호출할 수 있습니다. 다만 멤버변수를 읽고,쓰기 위해서는 질럿 클래스와

특별한 관계, 즉 같은 패키지에 속하는 클래스의 객체만 할 수 있습니다. 질럿객체의

멤버변수를 직접 읽고,쓰는데는 약간의 제한을 둔 셈입니다.

 

예제 2 - 24 ZealotPlayer클래스는 질럿 객체를 하나 만든 다음 체력을 알고 싶어서

질럿객체의 체력변수를 직접 읽기도 하고, 질럿객체로 하여금 자신의 체력을 알려달라고

호출하기도 합니다. 하지만 체력변수를 직접 읽고자 하는 경우는 컴파일이 되지 않습니다.

왜냐하면 Zealot클래스 설계자가 멤버변수인 strength지정자를 기본지정자로 했기때문에

Zealot클래스와 특별한 관계에 있지 않은 ZealotPlayer strength의 값을 직접 읽을 수

없습니다. 대신 Zealot클래스 설계자는 strength의 값을 알려주는 멤버메소드는 public으로

지정을 해서 아무 관계없는 ZealotPlayer가 호출하더라도 반응합니다.

그 결과 체력은 100이라는 값을 화면에 출력할 것입니다.

 

 

그림 2 - 8 [(compile run (ZealotPlayer.java) ]

질럿 클래스의 설계자는 질럿클래스의 생성자와 멤소드를 마음껏 호출할 수 있도록

public 지정자를 선택했습니다. 그리고 특별한 관계에 있는 객체에게는 멤버변수도

마음껏 읽고,쓰도록 해버렸습니다. 질럿 클래스 설계자는 앞으로 이것에 대해서 계속 책임

을 져야합니다.

예를 들어 질럿 클래스에서 체력을 다루는 변수이름을 바꾸고 싶어도 그렇게 못합니다.

왜냐하면 특별한 관계에 클래스서는 변수를 읽고 쓸 수 있게 했기 때문에 어디엔가

직접 변수를 읽고,쓰고 있는 객체가 있을 텐데 질럿 클래스의 변수 이름을 변경하게 되면

변수를 직접 읽고 쓰는 객체는 영향을 받게 되기 때문입니다.

이를 다르게 표현 하다면 private 지정자와 함께 사용된 변수 및 메소드는 클래스 설계자

마음대로 수정 ,변경을 얼마든지 할 수 있습니다. private 지정자가 붙은 변수와 메소드는

외부 객체의 입장에서는 존재자체도 모르게 있기 때문입니다.

기본지정자가 붙은 변수와 메소드의 수정 변경은 같은 패키지에 있는 모든 객체에게

영향을 미칩니다.  굉장한 노력을 하게되면 수정,변경은 할 수 있겠지만 패키지에서

변수,메소드를 읽고,쓰고,호출하는 모든 부분을 함께 수정,변경해야만 합니다.

public으로 지정된 변수,메소드는 거의 수정 변경할 수 없습니다.

수정, 변경시 책임져야할 객체의 범위가 너무 넓기 때문입니다.

Posted by
,