객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만든다.
유연하고 변경이 용이하다?
=> 다형성(Polymorphism)
다형성의 실세계 비유
ex1) 운전자와 자동차
▸ 운전자는 자동차의 종류에 관계없이 운전이 가능하다.
⁕ 자동차의 변경은 운전자에게 영향이 없다.
⁕ 운전자는 자동차의 내부 구조를 몰라도 지장이 없다.
ex2) 공연(로미오와 줄리엣)
▸로미오 역할을 맡을 배우는 누구나 가능
▸줄리엣 역할을 맡을 배우는 누구나 가능
⁕ 상대 배우의 변경은 공연에 영향이 없다.
역할과 구현을 분리?
JAVA의 다형성을 활용
▸ 역할 == 인터페이스
▸ 구현 == 인터페이스를 구현한 클래스 or 구현 객체
객체를 설계할 때 역할과 구현을 명확히 분리해야함
⁕ 중요도: 역할>>>구현
다형성의 본질
클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다.
역할과 구현을 분리
⁕ 정리
▸ 유연하고 변경이 용이
▸ 확장 가능한 설계
▸ 클라이언트에 영향을 주지 않는 변경
▸ 인터페이스를 안정적으로 잘 설계하는 것이 중요
⁕ 한계
▸ 역할(인터페이스) 자체가 변하면?
▸ 클라이언트, 서버 모두에 큰 변경이 발생
▸ ex) 자동차가 비행기로 변경, 공연의 대본 자체가 변경
스프링과 객체 지향
▸ 결국 다형성이 가장 중요하다.
▸ 스프링은 다형성을 극대화해서 이용할 수 있게 도와준다.