java

자바 객체 지향의 원리와 이해_Chapter07_스프링 삼각형과 설정 정보

강용민 2023. 3. 22. 15:54

스프링을 이해하는 데는 POJO(Plain Old Java Object)를 기반으로 스프링 삼각형이라는 애칭을 가진 IoC/DI, AOP, PSA라고 하는 스프링의 3대 프로그래밍 모델에 대한 이해가 필수다. 그럼 이 삼각형에 대해 알아보자.

 

IoC(Inversion Of Control)/DI(Dependency Injection) - 제어의 역적/ 의존성 주입

스프링은 DI를 통해 IoC가 일어난다. 그럼 DI는 뭘까? DI는 '의존성 주입'이다. 그럼 또 의존성은 무엇일까?

이 책의 저자는 의존성은 new라 설명한다. 추가적인 설명을 들자면 '의존한다'는 것은 의존대상, B라는 클래스가 변하면 그것이 A라는 클래스에 영향을 미친다는 뜻이다. 이는 하나의 모듈이 바뀌면 의존한 다른 모듈까지 변경이 일어날 수 있다는 단점이 있다.

그래서 탄생한게 바로 '의존성 주입'인데 B모듈(클라이언트)이 A모듈이 필요하다면 해당 메서드 내에서 A모듈을 생성하는 것이 아닌 클라이언트 외부에서 A모듈을 생성하고 B모듈은 외부에서 만들어진 A모듈을 주입받는 것이다.

주입 방법은 보통 3가지로 나눌 수 있는데 다음과 같다.

  • Constructor Injection : 생성자 삽입
  • Field Injection : 멤버 변수 삽입(비공개 안됨)
  • Method Injection : 메소드 매개 변수 삽입

 스프링에서는 이른 @Autowired, @Resource 애노테이션으로 삽입시킨다.

  @Autowired @Resource
출처 스프링 프레임워크 표준 자바
소속 패키지 org.springframework.beans.factory.annotation.Autowired javax.annotation.Resource
빈 검색 방식 by Type 먼저. 못 찾으면 byName byName 먼저. 못 찾으면 by Type
특이사항 @Qualifier("")협업 name 애트리뷰트
byName 강제하기 @Autowired
@Qualifier("tire1")
@Resource(name="tire1")

 

AOP - Aspect Oriented Programming

AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이다. 스프링 DI가 의존성(new)에 대한 주입이라면 스프링 AOP는 로직(code) 주입이라 할 수 있다. 그럼 로직을 주입한다면 어디에 주입해야할까??

객체 지향에서 로직이 있는 곳은 당연히 메서드 안쪽이다. 그럼 메서드에서 코드를 주입할 수 있는 곳은 몇 군데일까??

  • Around
  • Before
  • After
  • AfterReturning
  • After Throwing

 

PSA - 일관성 있는 서비스 추상화

PSA는 Portable Service Absraction의 약자로 일관성 있는 서비스 추상화이다.