OOP를 더욱 빛나게 해주는, AOP
- 정보처리기술사/소프트웨어공학
- 2019. 1. 10.
AOP(관점지향프로그래밍, Aspect Oriented Programming)는 스프링 프레임워크(Spring Framework)을 써야만 되는 이유중 하나로, 대규모 프로그래밍을 매우 강력하게 만들어 줍니다. 관점지향 프로그램을 이해하기에 앞서 우리는 OOP(객체지향 프로그래밍, Object Oriented Programming)에 대해서 먼저 선 이해를 해야 합니다.
프로그램은 소프트웨어 위기를 겪게 되면서, 패러다임이 유지보수를 편하게 할 수 있는 쪽으로 전환을 시작하게 됩니다. 그러면서 객체지향 프로그램이 나오게 됩니다. 즉 소스가 소스끼리 얽히고 설키는 것이 아니라 소스 하나하나를 재활용할 수 있게 만들어서 조립하는 방식으로 만드는 것이죠.
대표적인 언어가 자바(Java) 입니다. 하지만 일반적으로 웹프로젝트를 해보셨다면, 전혀 객체지향적이지 않다는 사실을 알겁니다. 그리고, 반복적인 코드를 계속 써야 한다는 사실도 알게 될 것입니다. 특히 Log나 세션 같은 처리를 할 때는 모든 클래스에 다 부착이 됩니다.
참 비효율적인 모습이며, 이런 것들로 인해서 객체 지향이 불가능해 지기도 합니다. 매번 호출하는 로그와 세션들을 뺄 수 없을까? 라는 생각을 갖게 되면서 나오는 것이 바로 관점 지향이 되는 것입니다. 즉, 현재 객체지향이 하나 하나 클래스들로 구성이 되어 있다고 한다면 관점 지향에서 바라보는 것은 이 모든 클래스를 관통하는 공통적인 놈을 밖으로 빼서 컴파일 할때 불러 들이는 역할을 수행하자는 것입니다.
OOP의 한계를 극복하기 위한 패러다임, AOP의 개요
AOP(Aspect Oriented Programming)의 개념
- 요구사항에 대해 핵심 관심사항과 횡단 관심사항으로 분할, 개발, 통합하여 모듈화를 극대화하는 프로그래밍 기법
- 핵심 관심사(Core Concerns)에 대한 관점과 횡단 관심사(Cross-cutting Concerns)에 대한 관점들로 프로그램을 분해해 Weaving 을 통해 프로그램을 구현하는 기법
- 횡단 관심사(cross-cutting concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임 (위키피디아)
AOP의 특징
- 단순/집중 : 개발절차 단순화 및 개발자에게는 비즈니스 기능에 대한 집중 가능
- 비캡슐화 : 핵심 비즈니스 영역보다는 주변 업무 중심 공통 모듈에 해당
- Aspect 이용 : 독립된 Aspect 단위변경을 통해 전체 응용시스템 변경 용이
- OOP 기반 : OOP 사상을 기본으로 한 cross cut aspect 프로그래밍
OOP 기반이 이해가 안되실 수 있습니다. AOP는 OOP를 뛰어넘는 사상이 아닙니다. AOP는 OOP를 보다 더 OOP답게 만들어주는 사상이기 때문에 OOP 기반이 되는 것이죠.
AOP의 동작원리 및 구성요소
AOP의 동작원리
- 핵심관심과 횡단관심을 분리하고 서로 간에 위빙(weaving)을 통해 구현
AOP의 구성요소
- 핵심관심 : 시스템의 핵심 가치와 목적이 그대로 드러난 관심 영역
- 횡단관심 : 쉽게 분리된 모듈로 작성하기 힘든 요구사항, 공토모듈
- Joint Point : 횡단 관심의 기능이 삽입되어 실행될 수 있는 특정 위치
- Point-Cut : 어느 Joint Point를 사용할 것인지를 결정하는 선택 기능
- Advice : Joint Point에 삽입되어 동작되는 모듈
- Aspect : Point-cut 과 Advice를 합쳐 놓은 코드
- Weaving : Joint Point 에 해당하는 Advice를 삽입하는 과정
AOP의 실행 절차
실행 절차도
실행 절차
순서 |
내용 |
1 |
- 클라이언트는 직접 타겟 객체를 참조하지 않고 프락시를 통해서 호출 |
2 |
- 프락시는 클라이언트의 호출을 받으면 3번 처럼 Aspect 모듈을 호출 |
3 |
- Cross Concerns에서는 타겟 객체의 메소드를 호출전에 advice의 내용을 수행 |
4 |
- 타겟 객체의 전에 Aspect 모듈을 호출해서 마무리 작업을 할 수 있고 그 후 최종적으로 클라이언트에 반환값을 넘겨준다 |
OOP와 OOP + AOP의 차이
참고자료
https://www.slideshare.net/koneru9999/aspect-oriented-programing-introduction
https://1netwiki.com/wiki/10
'정보처리기술사 > 소프트웨어공학' 카테고리의 다른 글
단위 테스트(Unit Test, Component Test) (0) | 2019.12.30 |
---|---|
SW 테스트(Test) (0) | 2019.12.26 |
낭비요소를 제거하는 개발방법론, 린(Lean) (0) | 2019.01.05 |
비즈니스 요구에 빠른 대응의 가능한, XP(eXtreme Programming) (0) | 2019.01.02 |
Sprint를 활용한 대표적인 Agile 방법론, 스크럼(SCRUM) (0) | 2019.01.01 |