김영한 강사님 - 스프링 핵심 원리 기본편
을 수강하고 정리한 글 입니다.
웹 애플리케이션을 쉽게 만들어주고 DB 접근을 편리하게 해주는 것만이 아님, 이건 그저 스프링은 사용해서 얻어지는 부가적인 결과일 뿐,
스프링의 진짜 핵심은 아래에 있음
레고 블럭을 조립하듯, 컴퓨터 부품을 갈아 끼우듯, 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법이 객체 지향 프로그래밍의 핵심임
이를 실현시켜주는 객체 지향의 특징이 다형성
--> 역할과 구현을 구분하면 유연해지며 변경도 편리해짐
이를 위해서는 역할(인터페이스)를 안정적으로 잘 설계하는게 중요함 역할 자체가 변하면 클라이언트, 서버 모두에 큰 변경이 발생하기 때문임 즉 인터페이스 설계를 안정적으로 잘 설계하는것이 좋은 개발자
클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리한게 SOLID
SRP 단일 책임 원칙
OCP 개방-폐쇄 원칙
MemberService 클라이언트가 구현 클래스를 직접 선택하게되면?
MemberRepository m = new MemoryMemberRepository(); //기존 코드 메모리로 저장하는 구현체
MemberRepository m = new JdbcMemberRepository(); // 변경 코드 jdbc로 저장하는 구현체
구현 객체를 변경하려면 클라이언트의 코드(MemberService)를 변경해야됨
다형성을 활용했으나 OCP 원칙이 지켜지지 않았음
이를 해결하기 위해 객체를 생성하고 연관관계를 맺어주는 별도의 조립, 설정자가 필요함 --> 이걸 스프링 컨테이너가 해줌
LSP 리스코프 치환 원칙
ISP 인터페이스 분리 원칙
DIP 의존관계 역전 원칙
결론