본문 바로가기

Spring

[인프런 강의 복습] 스프링 핵심 원리 - 객체 지향 설계와 스프링

스프링

자바 언어 기반의 프래임워크

객체 지향 애플리케이션을 개발할 수 있게 도와주는 프래임워크

 

※ 객체 지향 특징 : 추상화, 캡슐화, 상속, 다형성

 

■ 다형성(Polymorphism)

* 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미
역할과 구현으로 구분
하면, 유연해지며 변경도 편리

- 클라이언트는 대상의 역할(인터페이스)만 알면 된다.
- 클라이언트는 구현(인터페이스를 구현한 클래스, 구현 객체) 대상의 내부 구조를 몰라도 된다.
- 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향 받지 않는다.
- 클라이언트는 구현 대상 자체를 변경해도 영향 받지 않는다.

다형성 만으로는 OCP, DIP 원칙을 지킬 수 없다. 
다형성 만으로는 구현 객체 변경이 필요한 경우, 클라이언트의 코드도 함께 변경해야 한다. 
스프링의 제어의 역전(IoC), 의존관계 주입(DI)은 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있도록 지원

 

■ 좋은 객체 지향 설계의 5가지 원칙(SOLID)

SRP 단일 책임 원칙(Single responsibility principle)
한 클래스는 하나의 책임만 가지여한다.
변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것

OCP 개방-폐쇄 원칙(Open/closed principle)
소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 

LSP 리스코프 치환 원칙(Liskov substitution principle)
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
예를 들어, 자동차 인터페이스의 엑셀 함수는 앞으로 가라는 기능, 뒤로 가도록 기능을 개발하면 LSP 원칙을 위반

ISP 인터페이스 분리 원칙
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.

DIP 의존관계 역전 원칙(Dependency inversion principle)
클라이언트는 인터페이스에 의존해야지 구현 클래스에 의존하면 안된다. 인터페이스에 의존해야 유연하게 구현체 변경이 가능

 

스프링의 DI, IoC 기술은 다형성을 활용해서 OCP+DIP 원칙을 지켜 좋은 객체 지향 설계를 가능하도록 지원
즉, 클라이언트의 코드 변경 없이 기능을 확장 할 수 있다.

 

[출처 : 인프런 스프링 핵심 원리 기본편]