가시성 – 1.정보 은닉

정보 은닉(information hiding; data hiding)

관련된 구성요소(상수, 프로퍼티, 메소드)들을 캡슐화(encapsulation)시켜 하나의 객체로 정의하였을 때, 정보 은닉은 객체가 가지고 있는 데이터(상수, 프로퍼티, 메소드)를 외부에서 임의로 접근하지 못하도록 숨겨놓는 기능입니다. 캡슐 내부의 데이터는 사전에 접근이 허용된 문(인터페이스)을 통해서만 접근할 수 있습니다.

캡슐 내부의 데이터(상수, 프로퍼티, 메소드)에 대하여 접근 권한(access right)을 부여하는 지정자(modifier)가 접근제한자(visibility modifier; access modifier)이며, 접근제한자는 객체 내부에 정의된 상수, 프로퍼티와 메소드의 노출 정도(누구에게 접근을 허용할지)를 지정하는 키워드입니다.

이와 같은 클래스 멤버(상수, 프로퍼티와 메소드)의 노출 정도를 가시성(visibility)이라고 하며, 노출 정도를 지정하도록 PHP는 public, private, protected의 세 가지 접근제한자를 지원합니다.

(참고) visibility는 사전적 의미로는 시계(視界), 즉 눈으로 볼 수 있는 범위(visible area; visibility range)를 의미하며, CSS visibility 속성에서는 visible(보임)과 hidden(숨김)으로 구분되며, 객체지향 프로그래밍에서는 ‘클래스 멤버에게 접근(access)할 수 있는 대상의 범위’라는 의미를 가지며, 대부분 가시성(可視性)으로 번역되고 있으나, 의미에 따라 가시도(可視度), 가시범위(可視範圍), 가시거리(可視距離) 등으로 번역되기도 합니다.

(참고) visibility modifier는 access modifier와 같은 의미를 갖고 있으며, 접근제어자, 접근지정자, 접근제한자, 가시성 명시자, 가시성 지시자 등 여러 가지 용어로 번역되고 있습니다.

가시성(visibility) vs 유효 범위(scope)

가시성과 비슷한 의미의 유효 범위는 많은 경우 가시성와 같은 의미로 통용되기도 하지만, 다형성(polymorphism)과 같은 다양한 접근 방법의 확대로 인해 두 언어의 의미가 점점 벌어지고 있는 것 같습니다.

유효 범위(scope)는 클래스 멤버에 한정하지 않고 프로그램 내의 모든 부분에서 접근할 수 있는 범위(사용 범위)를 의미하며, 이 개념은 객체지향 프로그래밍뿐만 아니라 구조화 프로그래밍에서도 일반적으로 사용되고 있습니다. 어찌 보면 구조화 프로그램 내에서의 가시성이 곧 유효 범위였지 않나 생각됩니다.

현재 시점에서 개념상 가시성과 유효 범위를 다시 정리하자면, 가시성(visibility)은 노출시키는 범위이며, 유효 범위(scope)는 접근할 수 있는 범위입니다. 멤버를 노출시키는 주체와 이를 접근하는 주체는 다르며, 노출 시키는 방법과 이를 접근하는 방법도 다를 수밖에 없습니다.

유효 범위는 구조화 프로그래밍에서도 경우에 따라 매우 다양했었고 객체지향 프로그래밍이 도입되면서 더욱 다양해졌습니다. 사실 유효 범위를 다룬다는 것은 프로그램 언어 전체를 다룬다는 얘기와 거의 동일합니다.

이 문서에서는 가시성(visibility)을 유효 범위(scope)와는 다른 개념으로 보고, PHP 매뉴얼에서 다루고 있는 내용을 가지고 정리하고자 합니다.

답글 남기기