프로그램을 여러개의 독립된 단위(객체)들의 모임으로 파악한다
각 객체는 서로 메시지를 주고 받아 데이터를 처리할 수 있다(협력)
유연하고 변경이 용이하기 떄문에 대규모 소프트웨어 개발에 많이 사용된다
객체를 사용하는 다른 객체를 클라이언트라고 한다
프로그램을 역할과 구현으로 구분하면 단순해지고 유연해져 변경이 용이하다
다형성을 활용하여 역할은 인터페이스, 구현은 인터페이스의 구현 객체(클래스)
객체는 항상 협력하는 대상이 되고
메시지로 소통한다는 것을 항상 기억해야 한다
클라이언트가 요청을 하면
인터페이스를 호출하고
인터페이스를 구현하여 의존하고 있는 다형성 객체의 메서드가 실행된다
인터페이스는 껍데기라면서 왜 인터페이스에 의존한다고 표현하는지 궁금했는데
실제 사용도 메모리 관점에서도 다형성에 의해 인터페이스에 의존한다라고 표현하는게 정확하네..
이런 장점들을 위해서는 인터페이스를 안정적으로 잘 설계하는 것이 중요하다
운전자는 자동차의 모델이 뭔지 몰라도
자동차를 운전할 수 있다
운전자가 차를 바꿔도 다른 차를 운전할 수 있듯이 하는 것
아반뗴를 운전하는데 아반뗴 면허증을 발급받는 것이 아니라
자동차 운전면허증을 발급 받는 것과 같다
운전자 -> 자동차(인터페이스) 의 관계가 있고
아반떼, K3 등은 자동차 인터페이스를 구현한 구현 객체가 된다
자동차라는 인터페이스를 구현만 하면
운전자와 자동차의 관계는 어떤 차종이 와도 계속 유지될 수 있다
이게 다형성의 강력한 장점이다
다른 인스턴스에서 제공하는 set 메서드를 사용하여
객체의 참조를 다른 객체에서 하도록 하는 것