
이 책은 골든래빗의 <스프링 부트 3 백엔드 개발자 되기>(2판)을 읽고 쓴 TIL입니다.
이 책을 읽고 배운 내용을 정리해보았습니다.
IoC란?
IoC: 제어의 역전 (Inversion of Control)
자바 코드를 작성할 때는 객체가 필요한 곳에서 직접 생성을 했었습니다.
클래스 A에서 클래스 B 객체 생성 예시:
public class A {
b = new B(); //클래스 A에서 new 키워드로 클래스 B의 객체 생성
}
IoC는 다른 객체를 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와 사용하는 것을 말합니다. 위 예제에 제어의 역전을 적용하면 다음과 같이 코드의 형태로 바뀝니다.
public class A {
private B b;
}
이전과는 다르게 클래스 B 객체를 직접 생성하는 것이 아니므로, 어딘가에서 받아와 사용하고 있다고 추측해볼 수 있습니다. 실제로 스프링은 스프링 컨테이너가 객체를 관리, 제공하는 역할을 합니다.
DI란?
DI: 의존성 주입 (Dependency Injection)
DI는 IoC를 구현하기 위해 사용하는 방법입니다. DI는 어떤 클래스가 다른 클래스를 의존한다는 뜻입니다.
IoC와 DI를 기초로 하는 코드 예시:
public class A {
//A에서 B를 주입 받음
@Autowired
B b;
}
'@Autowired'라는 애너테이션은 스프링 컨테이너에 있는 빈을 주입하는 역할을 합니다. 빈은 쉽게 말해 스프링 컨테이너에서 관리하는 객체입니다. 이전 코드에서는 직접 B 객체를 생성했지만, 다음 코드는 어딘가에서 B b;라고 선언했을 뿐 직접 객체를 생성하지 않고 주입받고 있습니다.
이렇게 코드를 작성해도 스프링 컨테이너가 B 객체를 만들어서 클래스 A에게 주기 때문에 프로그램은 잘 작동합니다.
빈과 스프링 컨테이너
스프링 컨테이너란?
스프링 컨테이너는 빈을 생성하고 관리합니다. 즉, 빈이 생성되고 소멸하는 것을 관리하고 애너테이션을 사용해 빈을 주입받을 수 있게 DI를 지원해줍니다.
빈이란?
빈은 스프링 컨테이너가 생성하고 관리하는 객체입니다. 여러 가지 방법으로 빈을 등록할 수 있습니다. 예를 들어 XML 파일 설정, 애너테이션 추가 등 여러 가지 방법이 있습니다.
관점 지향 프로그래밍
AOP: 관점 지향 프로그래밍 (Aspect Oriented Programming)
프로그래밍에 대한 관심을 핵심 관점과 부가 관점으로 나누어 관심 기준으로 모듈화하는 것을 의미합니다. AOP를 사용하면 부가 관점 코드를 핵심 관점 코드에서 분리할 수 있게 해줍니다. 그 결과 핵심 관점 코드에만 집중할 수 있게 되고, 프로그램의 변경과 확장에도 유연하게 대응할 수 있습니다.
이식 가능한 서비스 추상화
PSA: 이식 가능한 서비스 추상화 (Portable Service Abstraction)
스프링에서 제공하는 다양한 기술들을 추상화해 개발자가 쉽게 사용하는 인터페이스를 제공합니다. 대표적인 예로는 클라이언트의 매핑과 클래스, 메서드의 매핑을 위한 애너테이션이 있습니다. 예를 들어 스프링에서 데이터베이스로 접근하기 위한 기술로는 JPA, MyBatis, JDBC 같은 것들이 있는데, 여기에서 어떤 기술을 사용하든 일관된 방식으로 데이터베이스에 접근하도록 인터페이스를 지원합니다.
정리
- IoC :객체의 생성과 관리를 개발자가 하는 것이 아니라 프레임워크가 대신 하는 것
- DI : 외부에서 객체를 주입받아 사용하는 것
- AOP : 프로그래밍을 할 때 핵심 관점과 부가 관점으로 나누어서 개발하는 것
- PSA : 어느 기술을 사용하던 일관된 방식으로 처리하도록 하는 것
스프링에서 IoC, DI, AOP가 중요한 것은 알았지만 자세하게는 잘 몰랐는데 이번에 잘 알게 되었고, PSA도 알게 되었습니다!