본문 바로가기
진행중인 학습/스프링 프레임워크 첫걸음_학습

스프링 프레임워크 첫걸음_3장_스프링 프레임워크의 핵심 기능 알아보기

by 트레비봄 2023. 8. 6.
728x90

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 에서 제공함.

728x90