written: Sep 30 2005
last modified: Oct 11 2005
PPP 접근제한자(Private/Protected/Public access modifier)
C++ 또는 자바와 같은 프로그래밍 언어에는 멤버에 대한 접근 권한(access right)을 지정하는 private, protected, public라는 접근제한자(access modifier;접근지정자, 접근변경자, 접근수정자)가 있습니다. 여러분이 작성하고자 하는 코드를 더 잘 캡슐화(encapsulation)하기 위하여 접근제한자를 통해 멤버에 대한 접근을 제어하는 것입니다.
PHP에서도 버전 5.0부터 PPP 접근제한자를 이용할 수 있게 되어 객체지향 프로그램으로써 한 발 더 다가설 수 있게 되었습니다.
private : 해당 클래스 내에서만 접근할 수 있으며 하위클래스 또는 다른 클래스에서는 접근할 수 없다.
protected : 해당 클래스 및 클래스를 상속받은 하위클래스에서만 접근할 수 있다.
public : 모든 프로그램 영역에서 접근할 수 있다.
protected : 해당 클래스 및 클래스를 상속받은 하위클래스에서만 접근할 수 있다.
public : 모든 프로그램 영역에서 접근할 수 있다.
아래의 표는 각각의 접근제한자들이 각 프로그램 영역에서의 가시범위에 어떻게 포함되는지를 보여줍니다.
\ 가시범위 ---------------- 프로그램영역 \ |
private |
protected |
public |
---|---|---|---|
동일클래스 |
O |
O |
O |
하위클래스 |
X |
O |
O |
다른클래스 |
X |
X |
O |
전역영역 |
X |
X |
O |
멤버의 PPP 보호 및 상속
(추가 2005.10.11)
하위클래스에서 상위클래스의 멤버를 재정의할 때는 원래 멤버에 지정된 PPP 접근제한자와 동일하거나 더 public하게 만들어야 합니다. 상위클래스에서보다 더 private한 멤버는 만들 수 없습니다.
- 상위클래스에서 public로 지정된 멤버는 모든 하위클래스에서도 public 멤버로 지정하여야 합니다.
- 상위클래스에서 protected로 지정된 멤버는 하위클래스에서 protected 또는 public 멤버로 지정하여야 합니다.
- 상위클래스에서 private로 지정된 멤버는 상속되지 않으므로 하위클래스에서 동일한 이름의 멤버를 지정하더라도 상위클래스의 멤버와는 전혀 다른 새로운 멤버이므로 PPP 지정에 제한이 없습니다.
상위클래스에서 지정된 접근제한자 | private | protected | public |
---|---|---|---|
하위클래스에서 지정할 수 있는 접근제한자 |
상속안됨 |
protected public |
public |
접근제한자와 관련된 코딩지침
- 변수는 private로 선언하여 외부에서 접근할 수 없도록 하며, private 변수에 대한 작업이 필요하면 이들에 접근할 수 있는 메쏘드를 작성합니다.
- 메쏘드도 외부에서 접근할 필요가 없다고 판단되면 private로 선언합니다. 즉, public 메쏘드를 최소화할 수 있도록 클래스를 설계합니다.
캡슐화(encapsulation)와 정보은닉(information hiding)
클래스에는 많은 변수와 메쏘드가 존재합니다만 이들 모두가 외부에서 접근할 필요가 있는 것은 아닙니다. 외부에서 접근해야 하는 메쏘드(이를 accessor method라 함)만을 public로 지정해주며, 나머지 모든 멤버는 private로 지정하여 클래스 내부 동작을 숨기게 됩니다. 이와 같이 내부 동작을 숨기는 것을 정보은닉(information hiding)이라 하며 이와같이 내부의 세부동작을 외부로부터 숨기므로 클래스를 사용하는 외부의 동작과 관계없이 클래스 내부 동작을 쉽게 변화시킬 수 있습니다.
클래스를 설계할 때는 외부에서 접근할 수 있는 멤버와 클래스 내부에서만 접근할 수 있는 멤버를 구분하여 클래스 내부에서 수행되는 부분을 감추게 되는데 이러한 작업을 캡슐화(encapsulation)라고 합니다. 캡슐화는 객체의 내부 동작을 숨기며, 객체가 정의한 인터페이스를 통해서만 접근할 수 있도록 하는 것입니다.
PPP 접근제한자를 이용하여 클래스 멤버의 가시범위를 적절히 제한함으로 정보은닉을 통해 클래스를 캡슐화하여 객체간의 상호의존성을 줄일 수 있으며 코드의 유지관리와 재사용을 높일 수 있습니다.
'phpclass > 객체모델' 카테고리의 다른 글
{PHP5 객체모델}04.Protected 멤버 (0) | 2005.10.11 |
---|---|
{PHP5 객체모델}03.Private 멤버 (0) | 2005.10.11 |
{PHP5 객체모델}01.가시범위 (0) | 2005.10.11 |
{Zend 엔진 2.0 설계초안}13.다중 상속 (0) | 2002.12.21 |
{Zend 엔진 2.0 설계초안}12.이름공간 (0) | 2002.12.21 |