오버라이딩된 메서드를 실행하면 런타임 시에 호출해야 될 구체 클래스의 메서드가 결정됩니다. 이것을 다이나믹 메서드 디스패치라고 합니다. 참조변수.메서드()
를 만나면 참조되는 실제 객체의 타입에 따라 오버라이드된 메서드 버전을 결정해 호출합니다.
다이나믹 메서드 디스패치는 다형성의 핵심으로소 슈퍼 타입을 재사용해 여러 하위 타입의 메서드를 호출할 수 있습니다.
절차 지향 프로그래밍에서 발전된 프로그래밍 방법으로서 관련된 변수와 메서드를 객체라는 내부로 은닉하고 객체 간 관계를 정의하고 협력 구조로 필요한 기능을 객체에게 요청하거나 요청 받은 것을 수행해가며 기능을 수행하도록 하는 프로그래밍 방법입니다. 객체 협력은 메세지를 통해 통신합니다.
객체지향의 특성으로 캡슐화, 상속, 추상화, 다형성이 있습니다.
객체지향의 구성 요소는 클래스, 객체, 메세지입니다.
클래스는 여러 객체들을 하나의 관심사로 바라봤을 때 공통된 상태나 행위를 추상화한 모델링의 결과입니다. 이 모델링을 바탕으로 객체를 생성하게 되면 독립된 상태를 갖는 유일한 객체가 됩니다.
객체끼리 협력하며 시스템의 기능을 수행하게 되는데 메세지라는 것을 통해 행위를 요청하거나 요청 받습니다.
동적 바인딩은 객체지향의 다형성과 상속에서 중요한 기술입니다.
상속 관계에 있는 객체의 참조값을 슈퍼 타입의 참조변수에 할당하고 참조값을 통해 오버라이딩 된 메서드 호출 코드가 있을때 컴파일 시점에는 정확히 어떤 구체 클래스 객체 메서드를 호출해야 되는지 몰라도 되고, 런타임시에 결정하는 것을 동적 바인딩이라고 합니다.
타입의 재사용으로 여러 객체의 메서드를 런타임 시에 다이나믹하게 호출하는 것을 동적 바인딩이라고 합니다.
캡슐화는 객체의 상태나 행위를 외부 객체에 공개하지 않고 내부로 숨겨야 하는 원칙입니다. 객체 협력에 필요한 메세지를 수신하고 처리할 메서드를 제외하고는 전부 객체 내부로 숨겨야 합니다. 캡슐화를 하게 되면 객체의 상태가 외부에 의해 의도치 않게 변경되는 것을 방지할 수 있으며, 객체는 자신의 상태를 스스로 변경해야 하는데 이때 사용하는 행위 메서드도 객체 내부로 캡슐화 함으로써 해당 메서드를 통해 스스로 상태를 변경한다는 안전성을 보장받게 됩니다.