스프링
- 스프링은 JAVA 기반의 프레임워크이다
- JAVA 의 큰 특징은 객체 지향 언어라는 점
- 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크
- 스프링은 좋은 객체 지향 어플리케이션을 개발할 수 있게 도와주는 프레임워크이다.
POJO
POJO란 특정 기술및 환경에 종속되지 않는 순수한 자바 객체를 의미합니다.
사용 시 장점
- 깔끔한 코드
- 간편한 테스트
- 객체지향적인 설계를 자유롭게 적용
스프링의 핵심인 POJO
스프링에서 어떻게 POJO를 지킬 수 있었을까.
스프링의 주요 기술인 IoC/DI, AOP, PSA 를 지원하여 POJO 프로그래밍을 지향한다.
IoC/DI
Inversion of Control 과 Dependency Injection을 뜻한다.
스프링에서는 프로그램의 흐름을 프레임워크가 주도한다.
스프링에서는 모든 의존성 객체를 스프링 컨테이너에서 직접 관리하여 필요한 곳에 주입해준다.
이것을 IoC라고 한다.
일반적인 프로그램의 코드를 보자.
public class A
{
private B b = new B();
private C c = new C();
private D d = new D();
}
다음은 IoC가 적용된 코드이다.
public class A
{
private final B b;
private final C c;
private final D d;
@Autowired
public A(B b, C c, D d)
{
this.b = b;
this.c = c;
this.d = d;
}
}
의존 관계를 외부에서 결정하는 것을 DI(의존 관계 주입)이라고 한다.
스프링에서는 생성자 주입을 추천하는데 이렇게 사용하면,
객체를 클래스내부에서 생성하여 사용하는것이 아닌, 주입받아 사용하게 된다.
DI의 장점
- 의존성이 줄어든다.
- 재사용성이 높은 코드가 된다.
- 테스트하기 좋은 코드가 된다.
- 가독성이 높아진다.
AOP
Aspect-Oriented Programming
애플리케이션 전체에 걸쳐 사용되는 부가 기능을 모듈화하여 재사용할 수 있도록 지원하는 것
PSA
환경의 변화와 관계없이 일관된 방식의 기술로의 접근 환경을 제공하는 추상화 구조를 말합니다.
스프링에서 @Controller와 같은 어노테이션을 어떻게 동작하는지 자세히 몰라도 해당 기능이 필요하면 클래스나 메서드에사용하면 동작한다.
이것이 PSA개념이다.
추상화 계층을 사용하여 어떤 기술을 사용하는지 내부에 숨기고 편의성을 제공한다.
SOLID
SRF ( 단일책임의 원칙 : Single responsibility principle )
클래스는 하나의 기능만 가지며 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하는데 집중되어야 한다.
OCP ( 개방 폐쇄의 원칙 : Open Close Principle : Single Responsibility Principle )
소프트웨어의 구성요소는 확장에는 열려있고 변경에는 닫혀있어야한다.
LSP( 리스코브 치환의 원칙 : The Liskov Substitution Principle )
부모객체와 이를 상속한 자식 객체가 있을 때 부모 객체를 호출하는 동작에서 자식 객체가 부모 객체를 완전히 대체할 수 있다.
ISP( 인터페이스 분리의 원칙 : Interface Segregation Principle )
클라이언트는 사용하지 않는 인터페이스에 강제로 의존해서는 안된다.
큰 덩어리의 인터페이스를 구체적이고 작은단위로 분리시키며 클라이언트가 꼭 필욯나 메서드만 이용할 수 있게 한다.
DIP ( 의존성 역전의 원칙 : Dependency Inversion Principle )
상위모듈은 하위 모듈에 의존하면 안된다.
의존관계를 맺을때 변화하기 쉬운 것에 의존하기보다, 변화하지 않는것에 의존하라.
정리
- 모든 설계에 역할과 구현을 분리하자.
- 언제든 유연하게 변경할 수 있도록 만드는것이 좋은 객체지향 설계다.
기능을 확장할 가능성이 없다면 구체 클래스를 직접 사용하고,
향후 꼭 필요할 때 리팩터링 해서 인터페이스를 도입하자.
'스터디 > 2023_스프링부트' 카테고리의 다른 글
[study] HTTP 웹 기본 지식 (1) | 2023.07.23 |
---|---|
[study]자바의정석 11~14 chapter (0) | 2023.07.18 |
[study] 자바의 정석 - chapter 6~9 (0) | 2023.07.09 |
[study] http 멱등성 알아보자 (0) | 2023.07.03 |
[study]Spring IOC와 DI (0) | 2023.06.26 |