[Spring] 스프링의 컨셉

JinKyung·2023년 6월 10일
0

Spring

목록 보기
5/5

스프링의 모든 기능의 기반은 제어의 역전(IOC)과 의존성 주입(DI)에 있다.

IoC (Inversion of Control)

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

지금까지 자바에서 객체를 생성할 때 객체가 필요한 곳에서 직접 생성을 해왔다. 예를 들면, 클래스B 객체를 사용하려면 클래스A에서 아래와 같이 객체를 직접 생성한다.

public class A {
	b = new B();
 }

스프링 컨테이너가 객체를 관리하는 방식에서는

public class A {
	private B b;
}

위와 같이 코드에서 코드를 직접 생성하지 않고, 어디선가 받아온 객체를 b에 할당하는 방식으로 사용된다.


DI (Dependency Injection)

의존성 주입. 제어의 역전(IoC)을 구현하기 위해 사용하는 방법.

예시코드

public class A {
	@AutoWired
   B b;
}

- @AutoWired : 스프링 컨테이너에 있는 빈이라는 것을 주입하는 역할.
- 빈: 스프링 컨테이너에서 관리하는 객체


스프링 컨테이너

  • 빈을 생성하고 관리하는 역할
  • 빈이 생성되고 소멸되기까지의 생명주기를 관리!
  • @AutoWired 같은 애너테이션을 사용해 빈을 주입받을 수 있도록 DI 지원.
  • 위의 코드에서 .. 스프링 컨테이너에서 B 객체를 만들어 클래스 A에 주입

스프링 컨테어니가 생성하고 관리하는 객체. 바로 위의 예제 코드에서 B가 바로 빈!

빈으로 등록하는 방법을 여러 가지가 있다. (XML 파일 설정, 애너테이션 추가..등등)

ex)
@Component 애너테이션을 붙이면 MyBean 클래스가 빈으로 등록되고, 이후 스프링 컨테이너에서 이 클래스를 관리함.


AOP

Aspect Oriented Programming, 관점 지향 프로그래밍.

쉽게 말하자면,
프로그래밍에 대한 관심을 핵심관점부가관점으로 나누어서 모듈화 하는 것 (이것도 어려운 설명 같긴한데)

예를 들어보면,

계좌 이체와 고객을 관리하는 프로그램이 있다고 하자. 각 프로그램의 기능을 아래 사진으로 나눌 수 있다고 해보면, 로깅과 데이터베이스 연결은 두 프로그램에 모두 필요하다! 여기에 AOP 관점을 적용하면 부가 관점에 해당하는 로직을 모듈화할 수 있다.

  • 프로그래머가 핵심 관점 코드에만 집중할 수 있게 된다.
  • 프로그램의 변경과 확장에 유연하게 대응할 수 있다!

PSA

Portable Service Abstraction, 이식 가능한 서비스 추상화

그래서 이게 뭔데?

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

예시

  • 스프링에서 데이터베이스에 접근하기 위한 기술로는 JPA, MyBatis, JDBC 등이 있다. 여기에서 어떤 기술을 사용하든 일관된 방식으로 데이터베이스에 접근하도록 인터페이스를 지원한다!

단순히 개념에 대해서는 어떤 느낌인지 감이 오지만, 실제로 사용해보면 또 다르겠지. 얼른 스프링에 익숙해져서 스프링이 어떤 컨셉으로, 또 어떤 방식으로 돌아가는지 제대로 이해하자!!!!

참고

https://shinsunyoung.tistory.com/133

0개의 댓글