현재 위치: > 최신 기사 목록> PHP 객체 지향 캡슐화 구현 가이드: 액세스 제어, Getter/Setter 및 매직 메소드

PHP 객체 지향 캡슐화 구현 가이드: 액세스 제어, Getter/Setter 및 매직 메소드

M66 2025-11-01

PHP의 캡슐화 이해

캡슐화는 객체 지향 프로그래밍의 핵심 개념 중 하나로, 코드의 유지 관리성과 재사용성을 향상시키는 데 도움이 됩니다. PHP에서 캡슐화를 달성하는 것은 주로 액세스 제어, Getter/Setter 메소드, 매직 메소드 및 래퍼 클래스에 의존합니다.

접근 제어

PHP는 클래스 멤버의 액세스 범위를 제어하기 위해 세 가지 액세스 한정자를 제공합니다.
public: 멤버는 어디에서나 접근 가능
protected: 멤버는 현재 클래스와 해당 하위 클래스에서만 액세스할 수 있습니다.
private: 멤버는 현재 클래스 내에서만 액세스할 수 있습니다.

 class MyClass {
    public $publicVar;
    protected $protectedVar;
    private $privateVar;

    public function publicMethod() {
        // 어디서나 접근 가능
    }

    protected function protectedMethod() {
        // 현재 클래스와 하위 클래스 내에서만 액세스할 수 있습니다.
    }

    private function privateMethod() {
        // 현재 클래스 내에서만 접근 가능
    }
}

Getter 및 Setter 메서드 사용

멤버 변수에 대한 액세스를 보다 세밀하게 제어하기 위해 Getter 및 Setter 메서드를 사용할 수 있습니다. Getter 메서드는 멤버 변수의 값을 가져오는 데 사용되고 Setter 메서드는 멤버 변수의 값을 설정하는 데 사용됩니다. 동시에 프로세스 중에 데이터 검증이나 처리가 수행될 수 있습니다.

 class MyClass {
    private $name;

    public function getName() {
        return $this->name;
    }

    public function setName($name) {
        $this->name = $name;
    }
}

매직 메서드를 사용하여 속성 액세스를 캡슐화합니다.

PHP는 객체 생성, 파괴 및 속성 액세스를 위한 몇 가지 특별한 마법 메서드를 제공합니다. __get 및 __set 메서드는 존재하지 않거나 액세스할 수 없는 멤버 변수에 액세스할 때 캡슐화를 제공합니다.

 class MyClass {
    private $data = [];

    public function __get($name) {
        if (isset($this->data[$name])) {
            return $this->data[$name];
        } else {
            throw new Exception("Property '$name' does not exist.");
        }
    }

    public function __set($name, $value) {
        $this->data[$name] = $value;
    }
}

상위 수준 캡슐화를 구현하기 위한 래퍼 클래스 만들기

래퍼 클래스는 하나 이상의 기본 클래스를 캡슐화하고 더 높은 수준의 인터페이스를 제공함으로써 특정 구현 세부 정보를 숨기고 코드를 더 쉽게 사용할 수 있도록 합니다.

 class Database {
    public function connect() {
        // 데이터베이스에 연결
    }

    public function query($sql) {
        // 쿼리 실행
    }

    public function close() {
        // 데이터베이스 연결 닫기
    }
}

class DatabaseWrapper {
    private $database;

    public function __construct(Database $database) {
        $this->database = $database;
    }

    public function fetchData($sql) {
        $this->database->connect();
        $result = $this->database->query($sql);
        $this->database->close();
        return $result;
    }
}

요약

PHP에서 캡슐화를 달성하는 것은 주로 액세스 제어, Getter 및 Setter 메소드, 매직 메소드 및 래퍼 클래스에 의존합니다. 이러한 방법은 간단하고 사용하기 쉬운 인터페이스를 제공하면서 객체의 내부 세부 사항에 대한 액세스를 효과적으로 제한할 수 있으므로 코드의 유지 관리성, 재사용성 및 개발 효율성이 향상됩니다.