Back End/Spring

Spring의 기본개념들 - IoC(Inversion of Control), DI(Dependency Injection), Bean, Spring Container, AOP(Aspect of Programming), PSA(Portable Service Abstraction)

DevHam94 2024. 6. 24. 06:33

IoC는 Inversion of Control 즉 제어의 역전이라는 뜻이다. 

이전까지는 클래스 객체를 사용하기위해서 다른 클래스 내에서 객체를 직접 생성했다. 

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

 

IoC는 객체를 직접 생성하거나 제어하는것이 아닌 외부에서 관리하는 객체를 가져와 사용하는 것이다. 이는 스프링 컨테이너에서 객체를 제공하고 관리하게된다. 

public class A {
	private B b; // 코드에서 객체를 생성하지 않고, 외부에서 가져온 객체를 할당한다.
}

 

 

DI는 Dependency Injection, 의존성 주입이라고하고. 위에서 언급한것처럼 제어의 역전을 구현하기 위해 사용하는 방법이다. 

한 클래스가 다른 클래스에 의존한다고 생각하면된다. 

@Autowired라는 애노테이션은 스프링 컨테이너에 있는 빈(스프링 컨테이너에서 관리하는 객체)을 주입하는 역할을 한다. \

아래 코드에서 B 객체는 선언했지만 new로 생성된 것이 아닌 다른 곳(스프링 컨테이너)에서 생성되어 주입받은 형태이다. 

public class A {
	// A에서 B를 주입받는다.
    @Autowired
    B b;
}

 

 

스프링 컨테이너(Spring Container)는 빈(객체)를 생성하고 그 생성부터 소멸까지의 생명주기를 관리한다. @Autowired 애노테이션을 통해 DI를 받을 수 있게 한다. 여기서 Bean이란 스프링 컨테이너가 생성하고 관리하는 객체를 말하고 이 Bean을 Spring Container에 등록하기 위해서는 xml을 통하여 파일을 설정하거나 annotation 추가 등의 방법들이 있다. 

아래의 @Component 애너테이션을 통하여 클래스를 빈으로 등록할 수 있는데. 등록될때 클래스 이름의 첫글자는 소문자로 변하여 관리된다. 간단하게 빈은 스프링에서 제공해주는 객체이다. 

@Component 
public class MyBean {
}

 

 

AOP(Aspect Oriented Programming)은 관점 지향 프로그램으로 핵심 관심, 부가 관심으로 나누어서 프로그래밍에 대한 관심을 관심 기준으로 모듈화하는것이다. 핵심 관점 코드에서 부가 관점 코드를 분리하는것인데. 개발자가 핵심 관점 코드에 집중할 수 있게하고 변경과 확장에서도 유연해질 수 있다. 

예로는 은행어플에서 고객관리, 계좌이체가 핵심 관심이 될 수 있고 이에 필요한 로깅과 데이터베이스 연결은 부가 관점이 될 수 있다. 

 

PSA는 Portable Service Abstraction으로 이식가능 서비스 추상화이다. 스프링에서 제공하는 기술들을 추상화하여 개발자가 쉽게 사용하는 인터페이스를 뜻한다. client의 mapping과 class, method의 mapping을 하기위한 annotation이 있는데 JPA, MyBatis, JDBC같이 스프링에서 DB에 접근하기위한 기술은 어떤 것을 사용하던지 일관적이게 DB에 접근되도록 인터페이스를 지원한다. WAS도 톰캣과 언더토우, 네티와 같이 다른 곳에서 실행해도 기존 코드를 그래도 사용할 수 있다. 

'Back End > Spring' 카테고리의 다른 글

윈도우에서 내장톰캣(embed-tomcat)을 만들고 실행시 오류  (0) 2024.03.16
war방식의 단점  (0) 2024.03.16
Spring MVC  (0) 2023.08.22
Gradle  (0) 2023.08.02
POJO (Plain Old Java Object)  (0) 2023.07.31