Spring Boot

스프링 프레임워크를 쉽게 사용할 수 있도록 지원

객체지향 프로그래밍

유연하고, 변경이 용이하다 -> 다형성

다형성

다형성이 왜 중요한가?
역할 - 구현
클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다

SOLID

SRP 단일 책임 원칙

변경이 있을 때 하나의 클래스 / 하나의 지점만 고치면 됨

OCP 개방-폐쇄 원칙

확장에는 열려있으나, 변경에는 닫혀 있어야 함
구현 객체를 변경하려면 > 클라이언트 코드를 변경해야 함

LSP 리스코프 치환 원칙

ISP 인터페이스 분리 원칙

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

DIP 의존관계 역전 규칙

역할에 의존하게 해야 한다 > 구현체
e.g. 로미오 역할을 맡은 배우는 줄리엣 역할(역할)에 의존해야지, 줄리엣 역을 하는 배우(구현)에 의존하면 안된다!

구현 클래스를 직접 선택


하지만,

다형성 만으로는 앞서 나온 OCP, DIP 규칙에 위반됨

MemberService는 구현체를 바꾸려할 때 코드를 변경해야 함.
추상화 인터페이스에 의존 & 구현체에도 동시에 의존하고 있음.

OCP -> 변경에 닫혀 있어야 하나, 구현체를 변경할 때 코드를 수정해야 함
DIP -> 역할(인터페이스)에만 의존해야 하나, 동시에 구현체에도 의존하고 있음 (MemoryMemberRepository, JdbcMemberRepository)

! 다형성만으로는 구현 객체를 변경할 때 클라이언트 코드를 변경해야 함
! 다형성만으로는 OCP, DIP를 지킬 수 없음
=> 뭔가 더 필요하다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN