다형성이란 무엇인가요?
다형성은 데이터베이스 추상화 및 상속에 이어 객체지향 언어의 세 번째 특징입니다. 다형성(Polymorphism)은 여러 형태를 의미하며 여러 형태를 표현할 수 있는 능력을 가지고 있습니다. 객체 지향 표현에서는 객체 유형에 따라 다르게 처리됩니다. 다형성을 통해 각 개체는 고유한 방식으로 공통 메시지에 응답할 수 있습니다. 다형성은 소프트웨어 유연성과 재사용성을 향상시킵니다.
doing() 메소드를 생성하면 학생이라면 수업용으로, 회사원이라면 업무용으로 출력합니다.
일반적인 관행
판단이 필요한 경우 사용
/**
* PHP 다형성
* 충타이 블로그
*/
// 학생 클래스 정의
반 학생{
공개 함수 cla(){
echo "학생들이 수업중이에요!
";
}
}
// 직원 클래스 정의
학급 사무실{
공개 함수 Wor(){
echo "직원이 일하고 있어요!
";
}
}
// 객체 유형을 결정하는 방법
함수 수행($obj){
If($obj 인스턴스of 학생){
$obj->cla();
}elseif($obj 인스턴스 오브 오피스){
$obj->wor();
}그 외{
echo "그런 개체는 없습니다!";
}
}
일 중(new Student()); // 학생은 수업 중입니다
일 중(새 사무실()); // 직원이 일하고 있습니다
위 결과 출력:
학생들이 수업 중입니다
직원들이 일하고 있습니다
이 일반적인 방법에는 단점이 있습니다. 즉, 개체가 많으면 if..else..가 매우 길고 유연하지 않다는 것입니다.
다형성 관행
공개 추상 메서드를 정의하면 모든 하위 클래스가 이를 상속합니다.
/**
* PHP 다형성
* 충타이 블로그
*/
//공개 클래스 정의
클래스 펍{
보호된 함수 작동 중(){
echo "이 메소드는 서브클래스에서 오버로드되어야 합니다!";
}
}
// 학생 클래스를 정의하고 공개 클래스 pub을 상속합니다
학급 학생이 술집을 확장합니다{
공개 함수 작업(){
echo "학생들이 수업중이에요!
";
}
}
// 직원 클래스를 정의하고 공개 클래스 pub을 상속합니다
학급 사무실이 술집을 확장했습니다{
공개 기능 작동 중(){
echo "직원이 일하고 있어요!
";
}
}
// 객체 유형을 결정하는 방법
함수 수행($obj){
If($obj 인스턴스 오브 펍){
$obj->작업 중();
}그 외{
echo "그런 개체는 없습니다!";
}
}
일 중(new Student()); // 학생은 수업 중입니다
일 중(새 사무실()); // 직원이 일하고 있습니다
이것이 다형성, 유연한 재사용의 특징입니다.
다른 방법
다형성 구현의 관점에서 보면 통일된 효과를 얻으려면 각 클래스가 상위 클래스의 메서드를 재정의해야 한다는 표준화에 지나지 않습니다. 클래스를 정의할 때 통합 메서드를 직접 추가하는 것도 가능합니다. 따라서 위의 예는 다음과 같이 구현할 수도 있습니다.
코드 복사 코드는 다음과 같습니다.
/**
* PHP 다형성
* 충타이 블로그
*/
// 학생 클래스 정의
반 학생{
// 통합 메소드 pub
정의
공개 함수 pub(){
echo "학생들이 수업중이에요!
";
}
}
// 직원 클래스 정의
수업실{
// 통합 메소드 pub
정의
공개 함수 pub(){
echo "직원이 일하고 있어요!
";
}
}
// 객체 유형을 결정하는 방법
함수 수행($obj){
If($obj){
// 클래스의 통합 메서드 호출
$obj->pub();
}그밖에{
echo '해당 객체가 없습니다';
}
}
일 중(new Student()); // 학생은 수업 중입니다
일 중(새 사무실()); // 직원이 일하고 있습니다
물론 위의 예는 다형성이 이런 방식으로 달성될 수 있다는 것을 의미하지는 않습니다. 결국 다형성은 복잡한 프로그래밍에서 유연한 재사용을 효과적으로 달성할 수 있습니다.
다형성은 프로그래밍 방법으로도 이해될 수 있으며 프로그래밍의 궁극적인 목표는 유연성, 다형성, 재사용 및 효율성에 지나지 않습니다.