일반화 (generalization)


일반화와 특수화(specialization))가 있습니다. 일반화는 개념에서 공통적인 개념을 찾아 정의하는 관계를 말합니다.

일반화의 관계는 A는 B의 일종이다 와 같은 관계를 말합니다.


상속성 (inheritance)


일반적인 것을 상위에 특수한 개념을 하위 두는 방식을 상속성이라고 할 수 있습니다.

상속성을 통하여 객체의 계층성이 발생이 됩니다.

상속을 통하여 코드를 재사용 할 수 있습니다.

확장을 통하여 기존의 클래스에 새로운 기능을 추가 할 수 있습니다.

상속은 크게 구현상속인터페이스 상속으로 구분을 할 수 있습니다.

접근 상속을 받게 되는 접근할 수 속성이 있습니다. private로 속성이 정해저 있는 경우 접근을 제한 받을 수 있습니다. 접근이 가능하기 위해서는 public 또는 protected로 정의해야 합니다.

오버라이딩


매서드 재정의를 할 수 있습니다.

다형성 (ploymorphism)


많다(ploy) + 형태(morphism)의 결합니다.

다형성은 동적 바인딩을 처리 하게 됩니다.

따라서 코드가 실행시에 어떤 메서드가 호출이 되는지를 결정합니다.

다형성은 부모 클래스의 메서드가 자식 클래스에서 재정의 될 확율이 높을 경우 가상메서드를 처리합니다.

다향성을 처리하기 위해서 메소드 테이블을 가지게 됩니다. 이를 통하여 다양성 있는 코드를 생성할 수 있습니다.

다양성은 오버해드가 크다. 잘못된 의도의 결과가 출력될 수 있습니다.

class Bar
{
    public function method1()
    {
        echo "method1 \n";
        $this->method2();
    }

    public function method2()
    {
        echo "method2 \n";
    }
}

class Foo extends Bar
{
    public function method2()
    {
        echo "hello \n";
    }
}

$obj = new Foo;
$obj->method1();

부모클레스 method1()method2()를 호출하여 결과를 출력할려고 했지만, 상속받은 자식이 method2() 오버라이딩을 통하여 method1()이 처음에 워하는 메시지가 출력되지 안습니다. 다향성으로 인하여 결과가 다르게 나올 수도 있습니다.

다형성을 이해하는데 필요한 것이 추상클래스와 추상매서드 추상메서드는 매서드의 원형(prototype)만 제공합니다.

추상클래스는 직접 인스턴스를 생성을 할 수 없습니다. 구체적인 메서드의 내용이 없기 때문입니다.

UML에서 추상매소드와 추상클래스는 이텔릭체 형태로 기울어진 이름명으로 처리합니다.

다중상속 (multiple inheritance)


다중상속이 가능하지만, 사용을 추천하지는 않습니다. 다중상속을 할 경우 여러 문제점이 발생될 수 있습니다.

다중상속이라는 것은 여러 부모클래스로 부터 상속이 이루어 지는 것을 말합니다.

하지만 그 부모의 클래스의 상위 조상이 공통된 경우에는 문제가 발생합니다.