phpclass/객체모델2005. 10. 11. 12:03
written: Sep 30 2005
last modified: Oct 11 2005
유효범위(scope)와 가시범위(visibility)
"www.php.net >> online document > Classes and Objects(PHP5)"를 보면 "Visibility"라는 항목에 PPP 접근제한자(Private/Protected/Public access modifier)를 설명하고 있습니다. 그래서 우선 "visibility"라는 용어부터 이해하고 넘어가도록 하겠습니다.
거의 모든 국내서적에서 "visibility"를 "가시성(可視性)"이라고 번역하고 있습니다. "가시성"이라는 용어자체에는 문제가 없습니다만 본 문서에서는 "visibility"라는 용어를 좀 더 쉽게 이해하기 위하여 "가시성" 대신에 "가시범위"라는 용어를 사용하겠습니다. 그리고 가시범위를 좀 더 잘 이해하기 위해서 유효범위(scope;스코프,사용범위)를 먼저 설명하겠습니다.
유효범위(scope)
선언된 멤버(변수, 메쏘드)가 프로그램의 어떤 부분에서 접근할 수 있는지 나타내는 것을 유효범위(scope)라고 합니다.
[code php;gutter:false] <?php $global_var; class my_class { var $class_var; function my_function() { static $local_var; } } ?> [/code]
위의 예제에서 $global_var는 프로그램의 모든 곳에서 접근할 수 있으므로 $global_var의 유효범위는 프로그램 전체가 되며, $class_var는 클래스 my_class에서만 접근할 수 있으므로 $class_var의 유효범위는 클래스 my_class가 되며, $local_var는 메쏘드 my_function에서만 접근할 수 있으므로 $local_var의 유효범위는 메쏘드 my_function이 됩니다.
(수정/추가 2005.10.11)
< 각 변수의 유효범위 >

 \

유효범위

------------------

 변수

\

전역영역 다른 클래스

클래스

my_class

메쏘드

my_function

$global_var

O

O

O

O

$class_var

X

X

O

O

$local_var

X

X

X

O

[ 참고 ]
  1. 메쏘드 my_function이나 다른 전역함수 내에서 전역변수를 사용하기 위해서는 global이라는 키워드로 미리 전역변수임을 선언해주어야 합니다.
  2. 전역변수를 클래스에 정의된 변수에 직접 사용할 수는 없습니다. 그러나 생성자를 이용하면 클래스 유효범위에서 사용하는 것과 같은 효과를 얻을 수 있습니다(이러한 이유로 O를 X로 수정하려다가 △로 수정합니다).
가시범위(visibility)
유효범위가 멤버를 기준으로 그 멤버를 사용할 수 있는 프로그램 영역이라 한다면, 가시범위는 그 반대로 프로그램의 특정영역을 기준으로 그 영역에서 사용할 수 있는 멤버가 무엇인가를 나타내는 것입니다.
위의 예제를 가지고 변수에 대한 가시범위를 나타내면 전역영역의 가시범위는 $global_var이고, 클래스 my_class의 가시범위는 $global_var, $class_var이고, my_function의 가시범위는 $global_var, $class_var, $local_var입니다.
< 각 프로그램영역의 가시범위 >

 \

가시범위

----------------

 프로그램영역

\

$global_var

$class_var

$local_var

전역영역

O

X

X

다른 클래스

O

X

X

클래스 my_class

O

O

X

메쏘드 my_function

O

O

O

유효범위와 가시범위는 보는 관점이 다를 뿐이지 그 본질에 있어서는 동일한 개념입니다.
< 유효범위와 가시범위 >

Posted by 방글24