스프링 콘셉트에 대해

Dongmin Kim·2024년 11월 12일
0

🎄 Spring Boot

목록 보기
3/3
post-thumbnail

Spring에서 중요한 개념은

  1. IoC : 제어의 역전
  2. DI : 의존성 주입
  3. Bean, Spring Container : 빈, 스프링 컨테이너
  4. AOP : 관점 지향 프로그래밍
  5. PSA : 이식 가능한 서비스 추상화

가 있다.

📌 IoC (Inversion of Control)

제어의 역전이라고도 말하는데, 다른 객체를 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와 사용하는 것이다.

public class A { // 클래스 A에서 new 키워드로 클래스 B의 객체 생성
	b = new B();
}

↑ 이 코드는 클래스 B 객체를 사용하기 위해 클래스 A에서 객체를 직접 생성한다.

public class A { // 코드에서 객체를 생성하지 않음.
	private B b;
}

↑ 하지만 이 코드는 클래스 B 객체를 직접 생성하는 것이 아니고, 어딘가에서 받아와 사용한다. 이것을 IoC 라고 말한다.

📌 DI (Dependency Injection)

의존성 주입이라고 말한다. 앞에 나왔듯이 스프링에서 객체들을 관리하기 위해 제어의 역전을 사용하게 되는데, 제어의 역전을 구현하기 위해 사용하는 방법이 DI이다.
DI는 어떤 클래스가 다른 클래스에 의존한다는 뜻이다.

public class A { // A에서 B를 주입받음
	@Autowired // 빈을 주입하는 어노테이션
    B b;

↑ 이 코드가 객체를 주입받는 모습이다.

이렇게 코드를 작성해도 동작하는 이유는 스프링의 경우 클래스 A에서 B 객체를 쓰고 싶은 경우 객체를 직접 만드는 것이 아니라 스프링 컨테이너에서 객체를 주입받아 사용하기 때문이다.

📌 스프링 컨테이너

스프링 컨테이너는 빈을 생성하고 관리한다.
또한 개발자가 @Autowired 같은 어노테이션을 사용해 빈을 주입받을 수 있게 DI를 지원한다.

📌 빈

빈은 스프링 컨테이너가 생성하고 관리하는 객체이다. 위에 코드에서 B가 빈이다.

빈을 스프링 컨테이너에 등록하는 방법은 XML 파일 설정, 어노테이션 추가 등의 방법 등이 있다.

@Component // 클래스 Bean 빈으로 등록
public class Bean {
}

Bean이라는 클래스에 @Component 어노테이션을 붙이면 Bean 클래스가 빈으로 등록된다. 이후 스스프링 컨테이너에서 이 Bean 클래스를 관리한다. 이때 Bean 클래스의 빈 이름은 bean이다.

📌 AOP (Aspect Oriented Programming)

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

다른 부분에서 계속 반복해서 쓰는 코드들을 볼 수 잇는데 이것을 '흩어진 관심사'라고 부른다.

이런 흩어진 관심사들을 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지이다.

📌 PSA (Portable Service Abstraction)

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

추상화 계층의 인터페이스인 FlatformTransactionManager 인터페이스를 두고 이를 구현하는 다양한 서비스의 비즈니스 로직을 추상화 해두었다는 것이다. 개발자는 단순히 FlatformTransactionManager 를 선언해서 이용하면 되고 언제든지 이를 구현하는 또 다른 구현체로 바꿀 수 있다

0개의 댓글