포인트컷

Pointcut

측면 지향 프로그래밍에서 포인트 컷은 결합 포인트 세트다.포인트컷은 정확히 어디에 조언을 적용해야 하는지를 명시하고 있는데, 이는 우려를 분리할 수 있게 하고 사업 논리를 모듈화하는 데 도움을 준다.[1]포인트컷은 클래스 이름이나 메서드 이름을 사용하여 지정되는 경우가 많으며, 경우에 따라서는 클래스나 메서드 이름과 일치하는 정규식을 사용하여 지정하기도 한다.서로 다른 프레임워크는 서로 다른 Pointcut 식을 지원한다; SideJ 구문은 사실상의 표준으로 간주된다.프레임워크는 Java, Perl, Ruby와 같은 다양한 프로그래밍 언어에 사용할 수 있으며, 포인트 컷을 지원하는 다른 언어에도 사용할 수 있다.

배경

다양한 프로그래밍 언어의 한계로 인해 교차 커팅 우려는 모듈화되지 않았다.교차 절단 우려는 논리적으로 하나의 모듈에 속해 전체 시스템에 영향을 미치는 소프트웨어의 일부를 가리킨다. 예를 들어,[2] 보안이나 로깅일 수 있다.측면 지향 프로그래밍은 프로그래머들이 특정 지점에서 실행된 코드 조각들을 포함하는 측면이라고 불리는 모듈을 작성할 수 있게 함으로써 이러한 교차 커팅 우려를 해결하려고 한다.특정 점을 선택하는 데 필요한 표현은 포인트 컷 식을 생성하게 했다.

실행

프로그램 실행이 포인트 컷에 설명된 조인 포인트 중 하나에 도달할 때마다 포인트 컷과 관련된 코드 조각(권고라고 함)이 실행된다.이를 통해 프로그래머는 이미 정의된 동작 외에 추가 코드가 실행되어야 하는 장소와 시기를 설명할 수 있다.포인트컷은 기존 소프트웨어에 측면의 추가를 허용하고, 프로그래머에서 다른 측면을 완전한 애플리케이션으로 엮어(메르그)하는 우려의 명확한 분리가 있는 소프트웨어의 설계를 허용한다.

데이터베이스에서 레코드를 수정할 수 있는 응용 프로그램이 있다고 가정해 보십시오.사용자가 데이터베이스를 수정할 때마다, 우리는 누가 기록을 수정하고 있는지에 대한 정보 로그를 갖고 싶다.기존의 로그 방법은 데이터베이스를 수정하기 직전에 로그 메소드를 호출하는 것이다.측면 지향 프로그래밍을 통해 Modify Database(데이터베이스 수정) 방법에 포인트컷을 적용하고 필요한 정보를 기록하기 위해 호출되는 조언을 얻을 수 있다.[3]

표현.

다음은 SensionJ가 지원하는 중요한 포인트컷 표현 중 몇 가지다.이러한 표현은 논리 연산자를 사용하여 결합할 수 있다.[4]

처형(공허하게 하다 사용자.setPassword(암호)) 

이 포인트컷은 User.setPassword 메서드의 실행과 일치한다.

부르다(공허하게 하다 사용자.getPassword()) 

User.getPassword가 호출되면 이 포인트컷이 일치한다.

핸들러(ArrayIndexOutOfBounds) 

ArrayIndexOutOfBounds 예외가 있을 때 Pointcut이 일치함

(UserType) 

현재 실행 중인 개체가 UserType일 때 포인트컷이 일치한다.

표적으로 삼다(UserType) 

대상 개체가 UserType일 때 포인트컷이 일치한다.

안쪽에(UserType) 

실행 중인 코드가 UserType에 속할 때 포인트컷이 일치한다.

비평

포인트컷 언어는 진화 가능성과 이해가능성과 같은 중요한 소프트웨어 속성에 부정적인 방식으로 영향을 미친다.정확한 측면을 정의하기 위해 리팩터링을 수행해야 하는 경우가 있을 수 있으며 리팩터링은 코드를 더 깨끗하게 만들기 위한 것이므로 일반적으로 리팩터링을 수행해서는 안 된다.동일한 코드에 적용해야 하는 여러 측면이 있고 각 측면이 다른 리팩터링을 필요로 하는 경우에도 확장성이 없다.[5]일반적으로 모든 측면은 포인트 컷이 메서드의 서명을 명시적으로 포함하므로, 애플리케이션이 변경될 때 포인트 컷도 변경될 필요가 있으므로, 애플리케이션의 구조와 밀접하게 결합된다.이것은 개발자에게 꽤 문제가 될 수 있다.[5]

참조

  1. ^ "A Classification of Pointcut Language Constructs" (PDF). Retrieved 29 December 2019.
  2. ^ "Introduction to AspectJ". Retrieved 14 September 2016.
  3. ^ "JBoss AOP - User Guide". docs.jboss.org. Retrieved 2016-09-14.
  4. ^ "Join Points and Pointcuts". Retrieved 14 September 2016.
  5. ^ a b "Inductively generated PointCuts to support refactoring to Aspects". CiteSeerX 10.1.1.2.594. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)

외부 링크