phpclass/클래스활용2000. 7. 13. 14:05
부모클래스의 메소드 호출
보통 부모클래스에서 선언된 메소드를 자식클래스에서 재정의하는 이유는 크게 두가지가 있습니다.
1. 부모클래스 메소드를 완전히 새롭게 정의하기 위하여
2. 부모클래스 메소드의 기능에 새로운 기능을 추가하기 위하여
첫 번째 기능은 부모클래스의 메소드를 무시하고 메소드에 새로운 정의를 함으로써 부모클래스의 메소드 정의를 숨기는 것입니다. 그러나 때로는 부모클래스의 메소드를 모두 지우는 것보다는 추가적인 기능이 필요한 경우가 있습니다. 이같은 경우에는 부모클래스의 메소드와 자식클래스에서 재정의된 메소드를 모두 수행하게 될 것입니다. 즉, 재정의된 메소드 구문 내에서 부모클래스의 메소드를 호출할 수 있어야 하며 필요한 기능만 추가적으로 작성하면 될 것입니다. 이럴 때 부모클래스의 메소드를 호출하기 위해서 사용하는 키워드가 parent입니다. 자바에서의 키워드 super와 같은 역할을 하며 이것은 그 메소드 호출을 상위클래스로 전달합니다.
부모키워드 parent는 $this 키워드와 비슷하게 이 클래스의 부모클래스를 나타내는 위치 지정자입니다. 현재 클래스의 부모클래스를 참조해야 되는 경우에는 부모키워드 parent를 사용할 수 있습니다.
[code php;gutter:false] class A {
function example() {
echo "클래스 A에 정의된 메소드 example. \n";
}
}

class B extends A {
function example() {
echo "클래스 B에서 재정의된 메소드 example. \n";
parent::example();
}
}

$b = new B;

$b->example(); [/code]
이 예의 출력결과를 보면 아래와 같이 나타날 것입니다.
클래스 B에서 재정의된 메소드 example.
클래스 A에 정의된 메소드 example.
앞장 범위연산자에서 설명한 대로 키워드 parent 대신에 extends 다음에 기술된 부모클래스명을 직접 사용해도 됩니다.
parent::example();  ------>  A::example();
키워드 parent를 써야 될 이유
위의 예에서 부모클래스를 A가 아닌 A1으로부터 상속받도록 수정하여야 한다면 아래와 같이 extends 다음에 있는 부모클래스명을 변경하는 것으로 모든 작업은 끝나게 됩니다. 만약 parent::example()가 아닌 A::example()라고 작성하였었다면 이 부분도 A1::example()라고 수정하여야 할 것입니다. 결국 수정할 때 손이 더 많이 가야 하는 것이지요. 그러니 부모클래스에 있는 메소드에 접근하는 경우라면 키워드 parent를 이용하는 것이 소스 코드를 관리하는데 훨씬 유리할 것입니다.
[code php;gutter:false] class B extends A1 {
function example() {
echo "클래스 B에서 재정의된 메소드 example. \n";
parent::example();
}
}

$b = new B;

$b->example(); [/code]

Posted by 방글24