본문 바로가기

SPRING

AOP란?

* AOP (Aspect Oriented Programming)

 

- 관점 지향 프로그래밍

- OOP(객체지향 프로그래밍)는 대규모 프로그래밍 개발에 적합하기는 했지만 여전히 중복 작성되는 코드가 생길 수 밖에 없는 구조

  -> 이를 해소하기 위해 AOP라는 개념이 스프링에 도입. 아래의 예를 살펴보자.

 

예시 1)

class Log {

     public void log() {

            system.out.println("접속 완료");

     }

} // log() 메서드를 가진 Log() 클래스

 

이 클래스의 메서드를 다른 클래스에서 사용하려면, 상속을 통해 구현해줘야 함.

 

class Start1 extends Log {

     public void log() {

            log(); // 메서드를 따로 호출하지 않아도 상속만 하면 자동으로 실행되도록 해보자

            system.out.println("start1 시작했습니다.");

     }

 

class Start2 extends Log {

     public void log() {

            log(); // 메서드를 따로 호출하지 않아도 상속만 하면 자동으로 실행되도록 해보자

            system.out.println("start2 시작했습니다.");

     }

 

상속이 이루어질 때마다 log();라는 반복적인 코드의 수행이 일어남.

어차피 클래스를 만들 때마다 계속 log(); 불러줘야 하는데 Log 클래스만 상속해두면 알아서 log()라는 메서드가 실행되도록 할 수 없을까?

중복된 코드를 더더 없애보자!라는 개념에서 나온 것이 AOP. 관점 지향 프로그래밍.

 

 

예시 2)

'출근하기' 라는 메서드를 구현하기 위해서는 '일어나기, 씻기, 버스타기'가 필요하다. 주된 목적은 '출근하기'이다.

그리고, '친구만나기' , '여행가기' 메서드를 구현할 때도 똑같이 '일어나기, 씻기, 버스타기'가 필요하다.

 

객체 지향에서는 '출근하기, 친구만나기, 여행가기' 세 가지 메서드를 구현하려면,

각각의 메서드에 '일어나기, 씻기, 버스타기'를 각각 구현해줘야한다. (중복이 일어난다고 볼 수 있다.)

 

그러나 관점 지향에서는 '일어나기, 씻기, 버스타기'와 같이 계속 사용하는 기능들을 한 번만 작성해두면 (=디폴트로 설정해두면)

그 뒤부터는 AOP 설정을 통해 만들어내는 메서드마다 설정을 적용하여 메서드마다 각각 구현하던 중복을 줄일 수 있다.

 

 

 

* AOP의 용어정리

 

Joinpoint

- AOP 적용의 대상이 될 수 있는 모든 메서드

- 모든 메서드들 , sayHello() , sayGoodbye(), 후보들


Aspect

- AOP 적용을 위해 준비한 공통 기능

- 공통 기능, '일어나기, 씻기, 버스타기' 같은 공통적인 기능들


Advice

- 언제 AOP 실행할지 정해줘

- AOP의 실행 시점 (before, after, after-throwing, after-returning, around가 존재)

- before : 메서드 실행하기 전에 이거 먼저 실행해줘

- after : 메서드 실행하고 나서 실행해줘

- after-throwing : 오류가 나면 실행해줘 (경고 메시지)

- after-returning : 리턴이 끝나면 실행해줘

- around : 메서드 실행하는 내내 같이 실행해줘

 

Pointcut

- Joinpoint 중 실제로 AOP를 적용받을 후보 메서드

- 후보들 중에 쓰겠다고 정한 메서드, 나 sayHello()에만 쓸거야

  * sayGoodBye()는 JoinPoint로만 남아있게 됨


Weaving

- Pointcut에 실제로 AOP를 적용하는것

- 실제로 AOP를 적용하는 행위


Target Object

- AOP를 적용받은 메서드를 하나 이상 가지고 있는 클래스

'SPRING' 카테고리의 다른 글

트랜잭션이란?  (0) 2020.09.14
AOP - 어노테이션을 이용한 예제  (0) 2020.09.14
게시판 - 게시글 수정  (0) 2020.09.11
게시판 - 게시글 삭제  (0) 2020.09.10
게시판 - 게시글 조회  (0) 2020.09.10