스프링이란?
이런 애들을 모두 통틀어 스프링 생태계라고 부른다.
스프링 부트를 통해서 스프링 프레임워크의 기술들을 편리하게 사용할 수 있다.
'스프링' 이라는 단어는 문맥에 따라 달리 사용한다.
- 스프링 DI 컨테이너 기술
- 스프링 프레임워크
- 스프링 생태계
스프링의 핵심: 스프링은 자바 기반이고 자바는 객체 지향 언어 -> 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크
좋은 객체 지향 프로그래밍?
캡 상 추 다
캡슐화 상속 추상화 다형성
객체 지향 프로그래밍은 유연하고 변경이 용이함.
스프링은 다형성이 가장 중요!
역할(인터페이스)과 구현(인터페이스를 구현한 클래스, 구현 객체)를 분리.
클라는 인터페이스만 알면 된다. 내부 구조는 몰라도 됨=내부구조가 바뀌어도 영향 x -> 변경 편리
자바에서의 다형성: 오버라이딩, 오버로딩.
🔎 단 인터페이스가 바뀌면 줄줄히 다 변경해야 한다. 인터페이스를 안정적으로 설계하는게 중요
좋은 객체 지향 설계의 5가지 원칙(SOLID)
SRP: 단일 책임 원칙: 한 클래스는 하나의 책임만 가져야 한다.
OCP: 개방 폐쇄 원칙: 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
LSP: 리스코프 치환 원칙: 객체는 정확성을 깨트리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.(=부모가 할 수 있는 일은 자식도 똑바로 할 수 있어야..)
ISP: 인터페이스 분리 원칙: 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
DIP: 의존관계 역전 원칙: 구현 클래스에 의존하지 말고, 인터페이스에 의존하라.
문제점
이 코드를 보자.
스프링 입문편에서 MemberRepository 인터페이스를 구현한 MemoryMemberRepository, JdbcMemberRepository 등을 만들었다. 인터페이스를 활용하여 다형성을 사용한 예이다.
하지만 현재 구현 객체를 변경하려면 클라이언트를 변경해야 하는 상황이다. 또한 MemberService는 인터페이스에 의존하지만 구현 객체도 동시에 의존하고 있다. 이 코드는 다형성을 사용했는데도 OCP, DIP를 위반하고 있는 것이다.
= 다형성만으로는 OCP, DIP를 지킬 수 없다.
객체 지향 설계와 스프링
스프링은 다음 기술로 다형성 +OCP, DIP를 가능하게 지원한다.
- DI: 의존관계, 의존성 주입
- DI 컨테이너 제공
이를 활용하면 클라이언트 코드의 변경 없이 기능 확장이 가능하다.
순수하게 자바로 OCP, DIP 원칙들을 지키며 개발하다 보면 스프링 프레임워크(더 정확히는 DI 컨테이너)를 만들게 된다...그래서 사용하기 편하게 스프링이라는 프레임워크로 만들어버린 것이다.
참고: 이상적으로는 모든 설계에 인터페이스를 부여하는 게 좋지만, 추상화라는 비용이 발생한다.기능을 확장할 가능성이 없다면, 구체 클래스를 직접 사용하고, 향후 꼭 필요할 때 리팩터링해서 인터페이스를 도입하는 것도 방법이다.
이 포스팅은 인프런 김영한님의 '스프링 핵심 원리 기본편'을 듣고 정리한 것입니다.
강의 링크: https://url.kr/udopsk
'개발 관련 공부 > 스프링 김영한 로드맵' 카테고리의 다른 글
[스프링 기본] 3. 스프링 핵심 원리 이해2 -객체 지향 원리 작용 (0) | 2022.10.10 |
---|---|
[스프링 기본] 2. 스프링 핵심 원리 이해1-예제 만들기 (0) | 2022.10.07 |
[스프링 입문] 섹션 7 AOP (0) | 2022.09.29 |
[스프링 입문] 섹션 6. 스프링 DB 접근 기술 (0) | 2022.09.27 |
[스프링 입문] 섹션5. 회원 관리 예제 - 웹 MVC 개발 (0) | 2022.09.21 |
댓글