[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에서의 오버로딩과 오버라이딩에 대해 알아보았습니다. 감사합니다.
참고 자료
- PHP 매직 메소드 문서 작성자: 노하우를 나누는 개발자