Spring Basic : SOLID 원칙
1. SOLID는 객체지향 프로그래밍에서 지켜야 할 더 나은 소프트웨어를 개발을 위한 필수 지침이다.
1-1 5가지의 원리는 의존성 관리에 대해 초점을 맞추고 있다.
1-2 잘못설계된 의존성 관리는 코드 확장과 수정을 힘들게 만든다.
1-3 스프링은 이 의존성에 작성에 대한 최소한의 제약만 제공하기 위한 프레임워크이다.
2. Single Responsibility - 하나의 클래스는 하나의 책임만 가져야 한다는 원리
3. Open Close - 확장에는 열려있고 수정에는 닫혀있어야 한다는 원리
3-0 프로그램의 기능이 확장되거나 변경될 때 기존의 소스는 수정하지 않고 추가로 코드를 작성한다.
3-1 인터페이스를 두고 다양하게 확장 가능하도록 구현
3-2 변경될 것과 고정될 것을 구별한다. 변경될 것은 하나의 기능만을 가지는 하나 이상의 클래스로 작성한다.
4. Liskov Substitution - 클래스가 확장되더라도 기존의 기능과 호환성을 유지해야 한다는 원리
4-1 기능을 추가하면 추가된 기능을 지원하는 인터페이스를 추가하여 제공한다. (Interface Segregation원리)
4-2 성능이 향상되더라도 인터페이스를 통해 제공하는 기능은 동일해야 한다.
5. Interface Segregation - 하나의 클래스를 다양한 관점에서 사용하는 경우 다양한 관점에 적합한 세부적인 인터페이스를 제공하는 것이 바람직하다.
6. Dependency Inversion - 추상화 클래스와 인터페이스는 최대한 모호하게 정의하여 구현과 분리해야 한다는 원리
6-1 구현에 따라서 추상화된 인터페이스가 변경되지 않아야 한다.
6-2 구현에 따라 적절하게 변경하기 위해 추상인터페이스를 구현하는 Adapter클래스를 작성할 수 있다.
의존성 주입에 대한 몇 가지 권고사항
1. 생성자를 통한 의존성 주입을 권장한다. 스프링 4.2 부터는 생성자에 별도의 annotation없이도 주입을 자동 수행한다.
2. 주입받는 객체는 final로 설정하여 변경을 예방한다.
3. 객체를 주입받을 때는 Interface를 통하여 주입받는다.