다형성
하나의 객체에 여러가지 타입을 대입할 수 있다는 것을 의미.
객체 설계시 역할(인터페이스)를 먼저 부여하고, 그 역할을 수행하는 구현체(클래스)를 만듬.
- 클라이언트는 대상의 역할(인터페이스)만 알면 된다.
- 클라이언트는 구현 대상의 내부 구조를 몰라도 된다.
- 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다.
- 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.
이를 통해 서버의 구현 기능을 유연하게 변경 가능
좋은 객체 지향 설계 원칙 : SOLID
- SRP (Single Responsibility Principle) 단일 책임 원칙
- 한 클래스는 하나의 책임만을 가져야 한다.
- 이때 하나의 책임을 구분하는 기준은 변경으로 변경이 있을 때 파급효과가 적으면 단일 책임 원칙을 잘 따른 것으로 볼 수 있음.
- OCP (Open / Closed Principle) 개방 / 폐쇄 원칙
- 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀있어야 한다.
- 순수 자바언어로는 이를 지킬수 없어서, 이를 위한 별도의 조립 및 설정자를 스프링에서 도맡아 한다.
- LSP (Liskov Substitutioin Principle) 리스코프 치환 원칙
- 객체는 프로그램의 정확성을 깨트리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
- ISP (Interface Segregation Principle) 인터페이스 분리 원칙
- 클라이언트는 자산이 이용하지 않는 메서드에 의존하지 않아야한다.
- 인터페이스를 구체적이고 작은 단위로 분리시키도록 구현
- DIP (Dependency Inversion Principle)
- 프로그래머는 추상화에 의존해야한다. 즉, 역할에 의존해야한다.
- 스프링을 통해 이를 해결할 수 있음
스프링 핵심 원리

