스프링

SOLID 설계 원칙

발전생 2022. 1. 25. 18:32

이 글은 김영한 강사님의 강의와 자료를 학습한 뒤 정리하는 글입니다


객체지향 설계 원칙으로 유명한 SOLID에 대해 알아보자.

 

S - single responsiblity principle : 단일 책임 원칙

O - open / closed principle : 개방 폐쇄 원칙

L - Liskov substituion principle : 리스코프 치환 원칙

I - Interface segregatino principle : 인터페이스 분리 원칙

D - Dependency inversion principle : 의존관계 역전 원칙

 

설명 참고 코드

MemberRepository m = new MemoryMemberRepository()

 

SRP

한 클래스는 하나의 책임만 가져야 한다 -> 하나의 기능만 수행하게 만들어라

 

OCP

확장에는 열려 있고 변경에는 닫혀 있어야 한다.

인터페이스를 통해 역할과 구현을 분리해주면 확장에 열려있게 해줄 수 있다.

위 코드처럼 클라이언트에서 구현체를 갈아끼워야 한다면 변경에 열려 있는 것이다.

변경에 닫혀있게 하기 위해( = 클라이언트 코드의 변경이 일어나지 않게 하기 위해) 스프링의 의존관계 주입을 사용한다.

 

LSP

하위 타입의 인스턴스로 바꿀 때 프로그램의 정확성이 깨지지 않아야 한다.

인터페이스 구현체가 인터페이스에서 기대한 대로 구현을 해야한다는 것이다.

가령 자동차 인터페이스가 있고 액셀 밟았을 때 작동하는 메소드가 있는데 이 메소드를 뒤로 가거나 자동차가 빙빙 회전하게 구현하면 LSP를 위반한 것이다.

 

ISP

인터페이스 여러 개가 범용 인터페이스 하나보다 낫다

-> 인터페이스를 논리적으로 쪼갤 수 있으면 쪼개는 게 유지보수가 좋다

 

DIP

구체화에 의존하지 말고 추상화에 의존하라.

= 구현 클래스에 의존하지 말고 인터페이스에 의존해라

위 코드는 구현 클래스에 의존하고 있으므로 DIP를 위반한 것이다. 이 또한 의존관계 주입을 통해 해결된다. 

 

다형성만으로는 OCP, DIP를 지킬 수가 없다. 의존관계 주입을 써야 한다.

'스프링' 카테고리의 다른 글

의존관계 주입(DI)을 통해 DIP, OCP 문제를 해결하자  (0) 2022.02.03
객체 지향이란  (0) 2022.01.25
스프링 부트를 사용하는 이유  (0) 2022.01.25
스프링의 역사  (0) 2022.01.25