3-1. 스프링 프레임워크의 핵심기능
의존성 주입 (Dependency Injection), 약어로는 DI
- 의존하는 부분을 외부에서 주입하는 것.
관점 지향 프로그래밍 (Aspect Oriented Programming) 약어로는 AOP
- 프로그램이 두 가지 요소로 구성된다.
- 1. 중심적 관심사 (Primary Concern) : 실현해야 할 기능을 나타내는 프로그램
- 2. 횡단적 관심사 (Crosscutting-Concerns) : 본질적인 기능은 아니지만 품질이나 유지보수 등의 관점에서 반드시 필요한 기능을 나타내는 프로그램
DI 컨테이너 알아보기
3-2-1. 의존성
- 사용하는 객체와 사용되는 객체를 각각 A 클래스, B 클래스 로 가정.
- A 가 B 를 사용하려면 new 키워드를 이용해 B 클래스의 인스턴스를 생성하고 B 클래스의 메소드를 사용하게 된다. 이때 B 클래스에서 구현했던 메소드를 변경하면 그로인해 A 클래스에서도 해당 메소드를 변경해야 한다. 이런 관계를 A 클래스는 B 클래스에 의존한다 라고 한다.
- 의존에는 두 가지 유형이 있다.
- 1. 클래스 의존 (구현 의존)
- 2. 인터페이스 의존
클래스 의존.
- '사용하는 객체' 클래스에서 '사용되는 객체' 클래스의 타입을 직접 지정해 버리면 '사용되는 객체' 클래스를 변경할 경우 이를 이용하고 있는 곳을 모두 수정해야 한다. 한두 군데면 문제가 없을 수 있지만 수정한 부분이 늘어나면 실수가 발생할 위험이 높아진다.
인터페이스 의존.
- 전제조건 : I 인터페이스가 있고 그것을 구현한 '사용되는 객체'인 B 클래스가 있다. '사용하는 객체'인 A 클래스에서 B 클래스의 methodX 메소드를 호출한다.
- A 클래스에서 new 키워드를 사용하여 B 클래스의 인스턴스를 생성한다.
- 인스터스에서 methodX 메서드를 호출한다.
- 위 과정에서 주의할 것은 A 클래스에서는 인터페이스로 추상화된 I 를 이용한다는 점.
- 이 과정에서 설계 변경이 발생, A 클래스를 변경하게 되었음. 새롭게 작성된 '사용되는 객체' C 클래스 (I 인터페이스를 구현) 를 호출해 methodX 메소드를 호출하도록 변경.
- 위 과정을 통해 이러한 이점을 갖는다.
- 1. 인터페이스는 참조를 받는 유형으로 사용할 수 있으므로 변수의 이름을 변경하지 않아도 된다.
- 2. 인터페이스가 선언된 메소드를 이용하면 클래스가 바뀌어도 메소드명을 변경하지 않아도 된다.
DI 컨테이너
- 의존성 주입은 '의존하는 부분을 외부에서 주입하는 것'
- 풀어 설명하면 의존하는 부분이란 사용하는 객체 클래스에 사용되는 객체 클래스가 작성된 상태이다.
- 외부로부터 주입이란 사용하는 객체 클래스의 밖에서 사용되는 객체 인스턴스를 주입하는 것.
- 이와 같이 인스턴스 생성과 같은 작업을 프레임워크에 맡길 수 있고 역할을 하는 것이 DI 컨테이너 이다.
- 스프링 프레임워크는 임의로 구현한 클래스를 인스턴스로 만들어주는 기능을 제공하며 DI 컨테이너가 그 기능을 갖고 있다.
다섯 가치 규칙
- DI 컨테이너에 인스턴스 생성을 맡기고 다음의 규칙을 지키는 것으로 사용하는 객체 클래스를 전혀 수정할 필요가 없게끔 만들 수 있다.
- 1. 인터페이스를 이용하여 의존성을 만듦.
- 2 .인스턴스를 명시적으로 생성X
- 3. 어노테이션을 클래스에 부여함.
- 4. 스프링 프레임워크에서 인스턴스를 생성함.
- 5. 인스턴스를 이용하고 싶은 곳에 어노테이션을 부여함.
요약
- DI 컨테이너 이용과 5개의 규칙을 지킴으로써 사양 변경에 대해 사용하는 객체 클래스를 수정없이 변경 할 수 있다.
- 1. 스프링 프레임워크는 임의로 구현한 클래스를 인스턴스화 하는 기능을 젝오한다. (DI 컨테이너)
- 2. 스프링 프레임워크를 사용하는 어플리케이션은 인스턴스를 명시적으로 생성하지 않는다. (new 키워드를 사용X).
- 3. 정해진 어노테이션(@Component 어노테이션)을 클래스에 부여하는 것으로 스프링 프레임워크가 인스턴스를 생성.
- 4. 생성된 인스턴스를 사용하고 싶은 부분에서 필드를 준비하고 주석(@Autowired 어노테이션)을 부여하면 스프링 프레임워크가 인스턴스를 필요한 것으로 판단하고 인스턴스를 주입.
- 5. 인터페이스를 이용해서 의존성을 만들고 DI 를 사용하여 사용되는 객체 클래스를 변경하는 경우 사용하는 객체 클래스의 수정 없이 변경 할 수 있음.
어노테이션 역할.
어노테이션 -> 3가지 항목으로 설명.
- 1. 어노테이션(annotation) 은 주석을 의미하는 영어 표현.
- 2. @xxx 와 같은 형태로 작성.
- 3. 외부 소프트웨어에 필요한 처리 내용을 전달.
레이어별 인스턴스 생성 어노테이션 설명(주요처리)
@Controller : 애플리케이션 레이어의 컨트롤러에 부여
@Service : 도메인 레이어의 업무 처리에 부여
@Repository : 인프라 레이어의 DB 액세스 처리에 부여.
@Component : @Controller, @Service, @Repositoy 의 용도 이외의 인스턴스 생성 대상 클래스에 부여.
AOP(관점 지향 프로그래밍) 의 기초 지식
AOP 의 고유 용어
용어 | 내용 |
어드바이스(Advice) | 횡단적 관심사의 구현(메소드), 로그 출력 및 트랙잭션 제어 |
애스펙트(Aspect) | 어드바이스를 정리한 것(클래스) |
조인포인트(JoinPoint) | 어드바이스를 중심적인 관심사에 적용하는 타이밍. 메소드(생성자) 실행 전, 메소드(생성자) 실행 후 실행되는 타이밍 |
포인트컷(PointCut) | 어드바이스를 삽입할 수 있는 위치. 예를 들어, 메소드 이름이 get 으로 시작할 때만 처리하는 조건을 정의 할 수 있다. |
인터셉터(Interceptor) | 처리의 제어를 인터셉트하기 위한 구조 또는 프로그램. 스프링 프레임워크에서는 인터셉트라는 메커니즘으로 어드바이스를 중심 관심사에 추가한 것처럼 보이게 한다. |
타깃(Target) | 어드바이스가 도입되는 대상을 뜻함. |
AOP 의 주요 사항
- 1. AOP 에서는 프로그램을 2개의 요소인 중심적 관심사와 횡단적 관심사로 구성되어 있다고 생각.
- 2. 중심적 관심사란 구현해야 할 기능을 나타내는 비즈니스 로직을 말함.
- 3. 횡단적 관심사란 본질적인 기능은 아니지만 품질이나 유지보수 등의 관점에서 꼭 필요한 기능을 나타내는 프로그램을 말함.
- 4. AOP 에서는 횡단적 관심사를 분리함으로써 기존 코드를 수정하지 않아도 프로그램 중에 특정 기능(공통 처리)을 추가할 수 있다.
- 5. 스프링 프레임워크는 다양한 공통 기능을 AOP 에서 제공함.
'진행중인 학습 > 스프링 프레임워크 첫걸음_학습' 카테고리의 다른 글
스프링 프레임워크 첫걸음_5장_MVC 모델 알아보기 (0) | 2023.08.19 |
---|---|
스프링 프레임워크 첫걸음_4장_데이터베이스 작업 (0) | 2023.08.13 |
스프링 프레임워크 첫걸음_2장_기초 지식 배우기 (0) | 2023.07.30 |
스프링 프레임워크 첫걸음_1장_스프링 프레임워크 알아보기 (0) | 2023.07.23 |
들어가기 앞서, 게시판 목차_스프링 프레임워크 첫걸음 (0) | 2023.07.21 |