[Spring] 스프링의 기반

yoon·2024년 2월 21일

spring-boot

목록 보기
18/41
post-thumbnail

📌 spring은 DI 패턴을 사용하여 IoC 설계 원칙을 구현하고 있다.

✅ 1. DI(Dependency Injection)

의존 관계 주입 기능으로, 객체를 직접 생성하는게 아니라 외부에서 생성한 후 주입시켜주는 방식이다.

이를 통해, 모듈 간의 결합도가 낮아지고 유연성이 높아진다.

1) 생성자를 통해 전달 받음

public class Consumer {
   private Food food;
   public Consumer(Food food){
   	this.food = food;
	}
}

2 setter를 통해 전달 받음

public class Consumer {
   private Food food;
   public void setFood(Food food){
   	this.food = food;
	}
}

✅ 2. IoC(Inversion of Control)

"제어의 역전" 말 그대로 메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라 외부에서 결정되는 것을 의미한다.

즉, 의존성 객체를 개발자가 만드는 것이 아니라 제어권을
스프링에게 넘겨주어 스프링이 만들어놓은 객체를 주입하는 것이다.

스프링이 모든 의존성 객체를 스프링이 실행될 때 마다 만들어주고 필요한 곳에 주입시켜 줌으로써 Bean들은 싱글턴패턴의 특징을 가진다.

✅ 싱글턴 패턴(Singleton pattern)

생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고, 최초 생성 이후에 호출된 생성자는 최조의 생성자가 생성한 객체를 반환한다.

✔ 단점

  • 싱글턴 패턴을 구현하는 코드 자체가 많다.
  • 의존관계상 클라이언트가 구체 클래스에 의존한다.
  • 테스트하기 어렵다.
  • 내부 속성을 변경하거나 초기화 하기 어렵다.
  • private 생성자로 자식 클래스를 만들기 어렵다.

✔ 스프링의 싱글턴 패턴

스프링 컨테이너는 싱글턴 패턴을 적용하지 않아도 객체 인스턴스를 싱글톤으로 관리한다. 이러한 기능 덕분에 싱글턴 패턴의 단점을 해결하고 객체를 싱글턴으로 유지할 수 있다.

주의할 점

싱글턴 패턴은 객체 인스턴스를 하나만 생성해서 공유하여 사용하기 때문에 객체 상태를 유지하게 설계하면 안된다.

✅ 3. AOP(Aspect Oriented Programming)

즉, 관점 지향 프로그램이다.
프로그램에 대한 관심을 핵심 관점, 부가 관점으로 나누어서 관심 기준으으로 모듈화하는 것을 의미한다.

✅ 4. PSA(Portable Service Abstraction)

이식 가능한 서비스 추상화를 말한다.
즉 스프링에서 제공하는 다양한 기술들을 추상화해 개발자가 쉽게 사용하는 인터페이스를 말한다.

profile
하루하루 차근차근🌱

0개의 댓글