[php] 오버로딩과 오버라이딩

PHP는 객체지향 프로그래밍 언어로 다형성을 지원하는데, 이것은 오버로딩오버라이딩을 통해 구현됩니다. 이 포스트에서는 PHP에서의 오버로딩과 오버라이딩의 개념과 사용법에 대해 살펴보겠습니다.

오버로딩

PHP에서의 오버로딩(overloading)은 하나의 메소드나 함수를 다양한 방식으로 호출할 수 있도록 하는 것을 의미합니다. 이것은 두 가지 형태로 나뉘어집니다.

메소드 오버로딩

메소드 오버로딩은 __call 매직 메소드를 통해 구현됩니다. 이를 통해 존재하지 않는 메소드를 호출할 때 동적으로 처리할 수 있습니다. 다음은 메소드 오버로딩의 예시입니다.

class Sample {
  public function __call($name, $arguments) {
    if ($name == 'test') {
      // 동적으로 처리
    }
  }
}

속성 오버로딩

속성 오버로딩은 __set__get 매직 메소드를 통해 구현됩니다. 이를 통해 존재하지 않는 속성을 읽거나 쓸 때 동적으로 처리할 수 있습니다. 다음은 속성 오버로딩의 예시입니다.

class Sample {
  private $data = [];
  
  public function __get($name) {
    return $this->data[$name];
  }
  
  public function __set($name, $value) {
    $this->data[$name] = $value;
  }
}

오버라이딩

오버라이딩(overriding)은 부모 클래스에 정의된 메소드를 자식 클래스에서 재정의 하는 것을 의미합니다. 이를 통해 자식 클래스에서 부모 클래스의 메소드를 덮어쓸 수 있습니다. 다음은 오버라이딩의 예시입니다.

class ParentClass {
  public function sayHello() {
    echo "Hello from ParentClass!";
  }
}

class ChildClass extends ParentClass {
  public function sayHello() {
    echo "Hello from ChildClass!";
  }
}

$child = new ChildClass();
$child->sayHello(); // "Hello from ChildClass!"

PHP에서의 오버로딩과 오버라이딩을 적절히 활용하여 다형성을 구현할 수 있습니다. 이 두 가지의 차이를 명확히 이해하고 적절히 활용하는 것이 객체지향 프로그래밍의 기본 개념 중 하나입니다.

이상으로 PHP에서의 오버로딩과 오버라이딩에 대해 알아보았습니다. 감사합니다.

참고 자료