Categories
Algorithm🧩
백준 📝
BookReview📕
CleanCode✨
Network 📨
Database 🗄
DevOps☁️
에러 일기📕
Etc💬
Fishy Fish 🎣
Spring🌱
Spring과 객체 지향
스프링 생태계
- 필수: 스프링 프레임 워크 & 스프링 부트
- 선택: 스프링 데이터, security 등등
스프링 프레임 워크
- 핵심 기술: 스프링 DI 컨테이너, AOP, 이벤트 등
- 웹 기술: 스프링 MVC
- 언어: 코틀린, 그루비 등
스프링 부트: 스프링을 쉽게 사용할 수 있도록 도움
- 장점
- 단독 실행 가능한 스프링 애플리케이션 생성
- 별도의 웹서버 필요 X
- 손쉬운 빌드 구성을 위해 스타터 종속성 제공
그래서 스프링이란?
: 자바 기반의 프레임워크
- 자바 언어의 가장 특징은
객체 지향-> 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크! - 객체 지향 프로그래밍: 프로그램을 유연하고 변경이 용하게 만들어 대규모 소프트웨어 개발에 많이 사용
- 객체 지향 프로그래밍의 특징: 다형성
다형성: 역할과 구현으로 세상을 구분
- 클라이언트에게 영향을 주지 않고 새로운 기능을 제공하는 것
- 장점
1. 클라이언트는 대상의 역할만 알면 된다. 2. 클라이언트는 구현 대상의 내부 구조를 몰라도 사용할 수 있다. 3. 클라이언트는 구현 대상의 내부 구조가 변경되어도 영향을 받지 않는다. 4. 클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다. - 자바 언어에서의 다형성: 오버라이딩
- 본질
1. 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다. 2. 본질 이해를 위해 협력이라는 객체 사이 관계에서 시작 3. 클라이언트를 변경하지 않고 서버 구현 기능을 유연하게 변경할 수 있도록 함.스프링과 객체 지향
- 다형성이 중요함
- 다형성을 극대화해서 이용할 수 있도록 도움
- 제어의 역전(IoC), 의존 관계 주입(DI)은 다형성을 활용해 역할과 구현을 편리하게 다룰 수 있도록 한다.
좋은 객체지향 설계의 5가지 원칙(SOLID)
- SRP: 단일 책임 원칙
- 하나의 클래스는 하나의 책임만 갖는다
- 그런데 하나의 책임이라는 것은 무엇일까? → 변경이 있을 때 파급 효과가 적은것
- 변경이 있을 경우 파급 효과가 적으면 SRP원칙을 잘 따른 것
- OCP: 개방-폐쇄 원칙
- 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀있어야 한다.
- 인터페이스를 구현한 새로운 클래스를 하나 만들어 새로운 기능을 구현
- 기존 코드의 변경 없이 기능 코드를 추가할 수 있어야 함
- 문제점: 객체를 생성하고 연관 관계를 맺어주는 별도의 설정자가 필요함 = 스프링 컨테이너의 역할
- LSP: 리스코프 치환 원칙
- 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으며 하위 타입의 인스턴스로 바꿀 수 있어야 함
- 단순 컴파일 성공을 넘어서는 이야기
- ISP: 인터페이스 분리 원칙
- 특정 클라이언트를 위한 인터페이스가 여러 개의 범용 인터페이스 하나 보다 낫다
인터페이스가 명확해지고대체 가능성이 높아진다.
- DIP: 의존 관계 역전 원칙
- 프로그래머는 추상화에 의존해야지 구체화에 의존하면 안된다.
- 의존성 주입인 이 원칙을 따르는 방법 중 하나
- 구현 클래스에 의존하지 않고
인터페이스에 의존하라는 뜻 - 구현체에 의존하게 되면 변경이 어려워지기 때문!
하지만 다형성 만으로는 OCP, DIP 원칙을 지킬 수 없다
→ 구현 객체 변경 시 클라이언트 코드도 함께 변경되기 때문
∴ 스프링 사용
- 스프링의 지원 기술
- DI: 의존 관계, 의존성 주입
- DI 컨테이너 제공 따라서 클라이언트 코드의 변경 없이 기능 확장을 가능하게 한다!
[출처]