설명 순서는 다음과 같습니다.

1. AOP란
2. 문제 예시
3. 템플릿 메서드 패턴으로 해결하기

1. AOP란

   - Aspect Oriented Programming의 약자로 관점 지향 프로그래밍을 뜻함

   - 어떤 로직을 여러가지 관점으로 분리하고 각각의 관점을 모듈화하는 방법을 말함

   - 소스 코드상에서 부가적인 관점은 다른 부분에서 반복해서 사용할 때가 많은데, 이 때 이러한 관점을 한 곳으로 모아서 모듈화를 하고, 재사용하겠다는 취지임

 

2. 예시

   - Controller, Service, Repository의 메소드들의 실행시간을 측정하고 싶다고 가정

   - 코드 : 시작시간 재기 -> 핵심 로직 수행 -> 끝나는 시간 - 시작 시간으로 실행시간 측정

   - 위와 같은 코드를 모든 메소드에 추가해야함

   - 어떻게 줄일까? 이를 해결하는 여러 디자인 패턴부터 스프링의 AOP까지 정리해보자

 

3. 템플릿 메서드 패턴으로 해결하기

   - 템플릿 메서드 패턴의 핵심은 '변하는 것과 변하지 않는 것을 분리' 하는 것임

   - 여기서 변하는 것은 '핵심 로직'이고 변하지 않는 것은 '부가 로직(시간 측정)' 임

   - 그래서 변하지 않는 것을 '템플릿'으로 만들고 변하는 것은 '메서드'로 만들어서 해결하는 방법

   - 구현 : 추상 클래스로 템플릿을 만들고 이 안에 추상 메서드를 만든 후에, 이 클래스를 상속하는 자식 클래스가 자신의 핵심 로직을 추상메서드에 구현하는 방법

   - 변하지 않는 것은 추상클래스의 일반 메서드. 변하는 것은 추상클래스의 추상메서드. 실제 코드로 확인해보자

템플릿
핵심 로직(변하는 부분)
실제 사용

   - 이로써 중복을 줄이고, 관심사를 분리할 수 있음

   - 하지만 템플릿 메서드 패턴은 상속을 사용하고 있는데, 이 때문에 상속에서 오는 단점들을 안고감

   - 자식 클래스(핵심 기능) 입장에서는 부모의 기능을 전혀 사용하지 않는데 강하게 결합되어 있음. 그래서 부모가 변하면 자식에게도 영향을 줄 수 있음


AOP의 기초와 템플릿 메서드 패턴에 대해 알아볼 수 있었습니다.

'Spring' 카테고리의 다른 글

AOP (2)  (1) 2023.08.28
IOC(Inversion Of Control), DI(Dependency Injection)  (0) 2023.08.24
[Spring MVC 1편(김영한)] WAS, Servlet이란?  (0) 2023.04.12

+ Recent posts