반응형
<출처 : http://javaora.tistory.com/entry/Learning-the-JavaFX-Script-Programming-Language-Lesson-11-Access-Modifiers >

목차
- 기본 접근자
- package 접근자
- protected 접근자
- public 접근자
- public-read 접근자
- public-init 접근자


- 기본 접근자
기본접근자는 "scipt-only"로서 특별한 접근자 키워드를 제공하지 않는다. 

var x;
var x : String;
var x = z + 22;
var x = bind f(q);

기본 접근자는 같은 스크립트 파일 내에서는 얼마든지 접근이 가능하며 그외에는 모든 접근이 불가능하다.


- package 접근자
package 접근자는 이름에서 알 수 있듯 같은 패키지 내에서는 변수, 함수, 클래스의 접근이 가능하다.

// Inside file tutorial/one.fx
package tutorial; // places this script in the "tutorial" package
package var message = "Hello from one.fx!"; // this is the "package" access modifier
package function printMessage() {
     println("{message} (in function printMessage)");
}

// Inside file tutorial/two.fx
package tutorial;
println(one.message);
one.printMessage();

위 소스를 tutorial 이라는 디렉토리를 만들어 각각 one.fx 와 two.fx라는 파일로 저장하자.

javafxc tutorial/one.fx tutorial/two.fx
javafx tutorial/two

두개의 파일을 컴파일후 two 파일을 실행해보자.

Hello from one.fx!
Hello from one.fx! (in function printMessage)

예를 보면 둘다 tutorial이란 패키지 명을 생성되어있으며 two.fx 파일에서 one.fx 파일의 변수와 함수를 사용함에 있어 문제가 없음을 알 수 있다.


- protected 접근자
protected 접근자는 같은 패키지 내에서 또한 해당 클래스를 상속받은 서브클래스에서의 접근만을 허용한다.


- public 접근자
public 접근자는 이전 레슨을 통해서 보았듯이 접근에 제한이 없다.


- public-read 접근자
public-read 접근자는 변수의 읽기 기능만 public으로 선언하며 쓰기 기능은 같은 스크립트 파일내에서만 가능하다. 추가적으로 두개의 접근자를 이용하여 쓰기 기능의 접근자를 지정 할 수도 있다. 가령 package public-read 또는 protected public-read 와 같이 접근자를 쓴다면 쓰기기능에 있어서는 package나 protected의 접근성을 제공한다는 의미이다. 예를 보도록 하자.

// Inside file tutorial/one.fx
package tutorial;
public-read var x = 1;

// Inside tutorial/two.fx
package tutorial;
println(one.x);

아까 작성한 예제 파일 one.fx와 two.fx를 다음과 같이 수정해 보자. 그리고 컴파일 후 실행해보자.

javafxc tutorial/one.fx tutorial/two.fx
javafx tutorial/two

1

그 결과는 쉽게 예상 가능 할 것이다. 그럼 two.fx 예제를 다음과 같이 수정해보자.

// Inside tutorial/two.fx
package tutorial;
one.x = 2; 
println(one.x);

public-read 접근자 속성이 부여된 변수를 수정해보려고 하면 어떻게 될까? 컴파일하면 다음과 같은 에러메시지가 나온다.

tutorial/two.fx:3: x has script only (default) write access in tutorial.one
one.x = 2;
   ^
1 error

그럼 이번엔 one.fx 파일의 x 변수의 쓰기 권한을 package로 바꿔보자.

// Inside file tutorial/one.fx
package tutorial;
package public-read var x = 1;

// Inside tutorial/two.fx
package tutorial;
one.x = 2;
println(one.x);

컴파일후 실행하면 바뀐 값인 "2"가 출력될 것이다. 위에 언급한대로 쓰기에 package 접근속성을 부여 하였으므로 같은 tutorial 패키지 내 이므로 그 수정이 가능하다.


- public-init 접근자
public-init 접근자는 변수에 초기화 기능에만 public 접근 속성을 부여한다. 그러나 처음 초기화 이외의 쓰기 권한은 public-read와 같은 방식으로 이용해야 한다. 또한 이 변수의 읽기 접근 속성값은 public 이다. 예를 보도록 하자.

// Inside file tutorial/one.fx
package tutorial;
public class one {
     public-init var message; //초기화 접근 속성만을 제공함.
}

// Inside file two.fx
import tutorial.one;
var o = one {
     message: "Initialized this variable from a different package!"
}
println(o.message);//읽기 속성은 public 이므로 아무런 문제가 없다.

컴파일후 실행하면 예상하듯 "Initialized this variable from a different package!" 가 출력된다.

그럼 이미 초기화된 값을 수정하려 한다면 어떻게 될까?

// Inside file two.fx
import tutorial.one;
var o = one {
     message: "Initialized this variable from a different package!"
}
o.message = "Changing the message..."; // WON'T COMPILE
println(o.message);

two.fx:12: message has script only (default) write access in tutorial.one
o.message = "Changing the message..."; // WON'T COMPILE
 ^
1 error

예상대로 해당 수정부분에서 에러가 발생한다. 이부분에 에러가 발생되지 않도록 하려면 위 public-read 예에서 봤듯 쓰기 가능한 접근 권한인 package나 protected 접근 속성을 부여하면 된다.


이것으로 10회에 걸친 JavaFX의 간단한 문법에 대해 알아 보았다. 대부분 Java나 Javascript와 비슷한 문법을 택하였기 때문에 원문의 설명과 그 예제 또한 간단간단하게만 나와있다. 

작성된 글이 믿음직스럽지 않다면.. ^^;; 원문으로 읽어보는 것도 도움이 될 듯 싶다.

참고 :
1. Learning the JavaFX Script Programming Language

+ Recent posts