공부중 배운 스프링의 진짜 핵심

justindevcode·2023년 4월 19일
0

스프링부트

목록 보기
31/39
post-thumbnail

공부중 배운 스프링의 진짜 핵심


스프링이란

• 스프링은 자바 언어 기반의 프레임워크
• 자바 언어의 가장 큰 특징 - 객체 지향 언어
• 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크
• 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크


객체지향의 특징

• 추상화 - 인터페이스
• 캡슐화 - 생성자 getter setter
• 상속
다형성

다형성

객체지향이란 레고조립하듯이 컴퓨터 부품조립하듯이 유연하게 구현 인스턷스를 교체할수있는것

역할과 구현을 분리

객체 설계시 역할(인터페이스)을 먼저 부여하고, 그 역할을 수행하는 구현 객체 만들기

다형성의 본질

어떤 클레스에서 다른 구현체를 사용할때 그 구현 클레스에도 의존하면 안되고 생성된 인터페이스에도 의존하면 안된다.

오직 인터페이스만 장착해야한다. 이때 결국 이 클레스는 어떻게 실체 인스턴스를 받느냐?

이 사용클레스와 사용될 기능이 구현된 클레스들을 조립해주는 녀석이 따로 있으면 되는것이다.

public class OrderServiceImpl implements OrderService{

	private final MemberRepository memberRepository;
	private final DiscountPolicy discountPolicy;

OrderServiceImpl은 어떤 할인 정책을 써야한다. 그종류가 어려가지 이겠지만 지금 어떤것을 쓸지 알지 못해야한다.
DiscountPolicy인터페이스로 구현된 어떤 클레스가 들어오는지 그 인스턴스도 몰라야한다.

그럼 OrderServiceImpl는 작동을 결국 어떻게 하느냐

OrderServiceImplDiscountPolicy들중 무엇을 연결할지 총괄해주고 연결해주는 기능을 가진 클레스가 있으면 되는것이다.

이것을 해주는것이 스프링의 본질

스프링에서 이야기하는 제어의 역전(IoC), 의존관계 주입(DI)은 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있도록 지원한다.


좋은 객체 지향 설계의 5가지 원칙(SOLID)

• SRP: 단일 책임 원칙(single responsibility principle)
• OCP: 개방-폐쇄 원칙 (Open/closed principle)
• LSP: 리스코프 치환 원칙 (Liskov substitution principle)
• ISP: 인터페이스 분리 원칙 (Interface segregation principle)
• DIP: 의존관계 역전 원칙 (Dependency inversion principle)

SRP 단일 책임 원칙

한 클래스는 하나의 책임만 가져야 한다. 기준이 모호하지만
중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것

OCP 개방-폐쇄 원칙

위의 다형성을 참고하자 저것이 가장 핵심

LSP 리스코프 치환 원칙

인터페이스로 구현된 클레스들은 명확히 인터페이스의 모든 규약을 지켜야하는것 그래야지 모든 구현 클레스에 대해 믿고 OCP를 사용할 수 있다.

ISP 인터페이스 분리 원칙

• 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다
• 자동차 인터페이스 -> 운전 인터페이스, 정비 인터페이스로 분리
• 사용자 클라이언트 -> 운전자 클라이언트, 정비사 클라이언트로 분리
• 분리하면 정비 인터페이스 자체가 변해도 운전자 클라이언트에 영향을 주지 않음

DIP 의존관계 역전 원칙

프로그래머는 “추상화에 의존해야지, 구체화에 의존하면 안된다.” 의존성 주입은 이 원칙을 따르는 방법 중 하나다.
쉽게 이야기해서 구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻

다형성을 잘지켜라 하는것

profile
("Hello World!");

0개의 댓글