컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것입니다. 각각의 객체는 메시지를 주고받고 데이터를 처리할 수 있습니다. 또한, 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게만들기 때문에 대규모 소프트웨어 개발에 많이 이용됩니다.
즉 다형성 입니다.
기존 로직에 대해 영향을 주지 않고 변경이 가능하며, 클라이언트에 영향을 주지 않고 새로운 기능을 제공할 수 있습니다.
역할과 구현으로 구분하면 세상이 단순해지고, 유연해지며 변경도 편리해집니다. 그러므로 확장이 가능한 설계가 가능해집니다.
장점
한계
자바언어
자바언어의 다형성을 활용하기 위해서는 역할은 인터페이스, 구현은 인터페이스를 구현한 클래스, 구현 객체로 객체를 설계할때 명확하게 분리하면됩니다.
즉, 객체를 설계할 때 역할(인터페이스)를 먼저 부여하고, 그 역할을 수행하는 구현 객체를 만들면 됩니다.
인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있습니다. 또한 다형성의 본질을 이해하기 위해서는 협력이라는 객체사이의 관계에서 시작해야합니다.
그러므로 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있습니다.
스프링은 다형성을 극대화해서 이용할 수 있게 도와줍니다. 스프링의 장점인 제어의 역전, 의존관계 주입은 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있습니다.
스프링은 의존성 주입과 DI컨테이너를 제공함으로써 다형성과 OCP, DIP를 가능하게 지원을 해줍니다.