관리 메뉴

여름 언덕에서 배운 것

[스프링 핵심원리 기본편] SOLID 원칙, 객체지향 설계와 스프링 본문

가랑비에 옷 젖는 줄 모른다 💻/스프링

[스프링 핵심원리 기본편] SOLID 원칙, 객체지향 설계와 스프링

잔뜩 2023. 10. 9. 18:42

SRP - 단일책임원칙

중요한 기준은 변경으로 변경이 있을 때 파급효과가 적으면 단일 책임 원칙을 잘 따른 것

ex ) UI 변경 , 객체의 생성과 사용을 분리

 

OCP - 개방-폐쇄 원칙 (중요 )

소프트웨어 요소에는 확장에는  열려 있으나 변경에는 닫혀 있어야 한다.

다형성을 생각해보자, 지금까지 배운 역할과 구현의 분리를 생각하면 된다.

로미오와 줄리엣 대본은 그대로지 배우가 바뀌어도 상관 없다.

 

 문제점 ) 구현 객체를 변경하려면 클라이언트 코드를 변경해야 한다.

분명 다형성을 사용했지만 OCP 원칙을 지킬 수 없다.

그래서 객체를 생성하고 연관관계를 맺어주는 별도의 조립, 설정자가 필요한데

이걸 스프링 컨테이너가 해준다 .

 

LSP 리스코프 치환 원칙

프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 다 바꿀 수 있어야 한다.

다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야 한다.

자동차 인터페이스의 엑셀 기능은 앞으로 가는 것인데 , 뒤로 가게 구현한다면 이는 LSP 위반이다

 

ISP  인터페이스 분리 원칙

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

자동차 인터페이스를 운전 인터페이스 , 정비인터페이스로 분리하면

사용자 인터페이스를 운전자와 정비사 클러이언트로 분리를 할 수 있다.

-> 분리하면 정비인터페이스가 변해도 운전자 클라이언트에 영향을 안준다!

인터페이스를 적당하게 쪼개는 것도 좋음! 인터페이스가 명확해짐

 

DIP 의존관계 역전 원칙

구현클래스에 의존하지 말고! 인터페이스에 의존하기

구현이 아닌 역할(ROLE)에 의존하게 해야합니다.

 

그런데 !

멤버서비스는 멤버 리포지토리라는 인터페이스에도 의존하지만 , 구현클래스 메모리멤버 리포지토리에도 의존한다.

역할(인터페이스)가 아닌 구현에 의존 DIP 위반이 보임

 

 

정리

객체지향의 핵심은 다형성입니다.

다형성만으는 쉽게 부품 갈아 끼우듯이 개발 할 수 없다

다형성만으로는 OCP와 DIP를 지킬 수 가 없다..

뭔가 더 필요하다... 그래서 스프링 필요!

 

 

스프링은DI , DI컨테이너 제공으로 OCP,DIP를 가능하게 해줍니다!

DI 는 Dependency Injection으로 의존관계 의존성 주입을 말합니다.

DI 컨테이너는 자바 객체를 컨테이너 안에 넣어놓고 의존관계를 연결하고 주입할 수 있도록한다.

이것들을 해야 클라이언트 코드 변경없이 기능이 확장됩니다

 

정리

모든 설계에 역할과 구현을 분리하자

애플리케이션 설계도 공연을 설계하듯이 배역만 만들어두고 ,배우는 언제든지 유연하게 교체될 수 있어야합니다

(스프링 컨테이너 필요)

 

할인 정책 - 간단하게 인터페이스 만들고

개발이 진행되면서 기획이 정리되면 기능 확장해가고

 

인터페이스 설계가 참 중요합니다

 

 

728x90