AspectJ
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
AspectJ는 모든 유효한 자바 프로그램이 유효한 AspectJ 프로그램이 되도록 설계된 관점 지향 프로그래밍 언어이다. AspectJ는 프로그래머가 기존 자바 코드에 영향을 주지 않으면서 새로운 기능을 추가할 수 있도록 '관점'이라는 특수한 생성자를 정의할 수 있게 한다. 주요 기능으로 확장 메서드, 포인트컷, 어드바이스가 있으며, 소스 코드 위빙, 바이트코드 위빙, 가상 머신에서 구현될 수 있다. AspectJ는 Eclipse IDE 지원을 통해 개발되었으며, 스프링 프레임워크와 같은 다른 프로젝트를 위한 기술을 활성화하는 데 사용된다. AspectJ는 그레고르 키찰레스가 주도하여 개발되었으며, AspectWerkz 프로젝트와 병합되어 AspectJ 5 이후 AspectWerkz 기능을 지원한다.
더 읽어볼만한 페이지
- 관점 지향 소프트웨어 개발 - 관점 지향 프로그래밍
관점 지향 프로그래밍은 코드의 핵심 기능 외에 로깅, 보안 등의 횡단 관심사를 분리하여 관리하는 소프트웨어 개발 패러다임이다. - 관점 지향 소프트웨어 개발 - 횡단 관심사
횡단 관심사는 소프트웨어 시스템 전반에 걸쳐 나타나 시스템 의존성을 높이는 기능이나 속성을 의미하며, 관점 지향 프로그래밍은 이를 해결하기 위해 관심사를 모듈화하는 프로그래밍 방식이다. - 자바 프로그래밍 언어 계열 - 코틀린 (프로그래밍 언어)
코틀린은 젯브레인즈에서 개발한 정적 타입 언어로, 자바 가상 머신에서 동작하며 자바와의 호환성을 갖고, 안드로이드 공식 지원 언어로 채택되어 다양한 분야에서 활용되고 있으며, 이름은 러시아의 코틀린 섬에서 유래되었다. - 자바 프로그래밍 언어 계열 - 스칼라 (프로그래밍 언어)
스칼라는 마틴 오더스키가 설계한 객체 지향 및 함수형 프로그래밍 언어이며, 자바 플랫폼에서 실행되고 자바 코드와 상호 운용이 가능하며, 아파치 스파크 등 다양한 곳에서 활용된다. - 관점 지향 프로그래밍 - Nemerle
Nemerle은 객체 지향 및 함수형 프로그래밍 스타일을 혼합하여 사용할 수 있는 프로그래밍 언어이며, 강력한 형식 추론, 메타프로그래밍 시스템, 다양한 프로그래밍 스타일 지원, .NET 플랫폼 라이브러리 접근 용이성 등의 특징을 갖는다. - 관점 지향 프로그래밍 - DTrace
DTrace는 시스템과 애플리케이션의 실시간 동작 추적 및 분석을 위한 동적 트레이싱 프레임워크로, 'D' 언어를 사용하여 작성된 스크립트를 통해 다양한 시스템 이벤트 계측 및 분석을 지원하며 여러 운영체제에 적용되어 시스템 분석 및 문제 해결에 기여한다.
| AspectJ - [IT 관련 정보]에 관한 문서 | |
|---|---|
| 일반 정보 | |
| 이름 | AspectJ |
| 설명 | 더 나은 모듈화를 위한 교차 절단 객체 |
| 패러다임 | 관점 지향 |
| 출시일 | 2001년 |
| 개발자 | 이클립스 재단 |
| 최신 버전 출시일 | }} |
| 구현체 | 이클립스를 위한 The AspectJ Development Tools |
| 영향을 받은 언어 | 자바 |
| 운영체제 | 크로스 플랫폼 |
| 라이선스 | 이클립스 퍼블릭 라이선스 |
| 웹사이트 | AspectJ 공식 웹사이트 |
| 파일 확장자 | aj |
2. 단순 언어 설명
AspectJ는 모든 유효한 자바 프로그램이 유효한 AspectJ 프로그램이 되도록 설계되었다. AspectJ는 프로그래머가 관점이라 불리는 특수한 생성자를 정의할 수 있게 한다. 관점은 표준 클래스에서는 사용할 수 없는 여러 엔티티를 포함할 수 있는데, 여기에는 확장 메소드, 포인트컷, 어드바이스 등이 있다.
AspectJ는 포인트컷 기반 정적 검사와 aspect 재사용(상속을 통해)의 제한된 형태를 지원한다. 더 자세한 내용은 [http://www.eclipse.org/aspectj/doc/released/progguide/index.html AspectJ 프로그래밍 가이드]를 참고하면 된다.
2. 1. 확장 메소드
확장 메소드는 프로그래머가 메소드, 필드, 인터페이스를 aspect 내의 기존 클래스들에 추가할 수 있게 한다. 이를 통해 코드의 재사용성을 높이고, 기존 클래스를 수정하지 않고도 기능을 확장할 수 있다. 다음은 `Point` 클래스에 `acceptVisitor` (비지터 패턴 참고) 메소드를 추가하는 `VisitAspect` 관점의 예시이다.```aspectj
aspect VisitAspect {
void Point.acceptVisitor(Visitor v) {
v.visit(this);
}
}
2. 2. 포인트컷 (Pointcut)
포인트컷은 프로그래머가 조인 포인트를 지정할 수 있게 한다. 모든 포인트컷은 주어진 조인 포인트와 일치하는지를 결정하는 식이다. 예를 들어, 다음 포인트컷은 이름이 `set`으로 시작하는 `Point`형 객체의 모든 인스턴스 메소드 실행과 일치한다:```aspectj
pointcut set() : execution(* set*(..) ) && this(Point);
2. 3. 어드바이스 (Advice)
포인트컷에 의해 일치되는 조인 포인트에서 실행할 코드를 지정할 수 있게 한다. 이 동작은 지정된 조인 포인트의 앞("before"), 뒤("after"), 주변("around")에서 수행할 수 있다. 다음은 위에 선언된 포인트컷을 사용하여 `Point` 상의 무언가가 설정될 때마다 화면을 새로 고치는 어드바이스의 예시이다:```aspectj
after () : set() {
Display.update();
}
3. AspectJ 호환성 및 구현
AspectJ는 소스 코드 위빙, 바이트코드 위빙, 가상 머신(VM) 수준 구현 등 다양한 방식으로 구현될 수 있다. 어떤 방식으로 구현되든, AspectJ 프로그램은 자바 VM에서 실행되는 유효한 자바 프로그램이다. Aspect의 영향을 받는 클래스는 영향을 받지 않는 클래스와 바이너리 호환이 된다. 이러한 구현 지원은 기술 변화에 따른 언어 성장을 가능하게 했고, 자바 호환성은 플랫폼 가용성을 보장한다.
원래 Xerox AspectJ 구현은 소스 코드 접근이 필요한 소스 위빙을 사용했다. Xerox가 코드를 이클립스에 기여했을 때, AspectJ는 BCEL 기반의 이클립스 자바 컴파일러와 바이트코드 위버를 사용하여 재구현되었다. 이를 통해 개발자는 바이너리(.class) 형식 코드에 대한 aspect를 작성할 수 있었다. 이 시점에서 AspectJ 언어는 증분 컴파일 및 로드 타임 위빙에 필수적인 클래스별 모델을 지원하도록 제한되었다. IDE 통합은 자바 대응 기능만큼 반응적이 되었고, 개발자는 빌드 프로세스 변경 없이 aspect를 배포할 수 있었다. 이는 AspectJ가 참을성 없는 자바 프로그래머와 엔터프라이즈 수준 배포에 사용될 수 있게 하여 채택 증가를 불러왔다.
이후 이클립스 팀은 성능과 정확성을 개선하고, 자바 5의 제네릭 및 애노테이션과 같은 언어 기능을 지원하도록 AspectJ 언어를 업그레이드했으며, AspectWerkz의 애노테이션 스타일의 순수 자바 aspect를 통합했다.
4. 역사 및 기여자
AspectJ는 PARC의 그레고르 키찰레스 팀이 개발했다. 크로스커팅(crosscutting), 즉 "횡단"이라는 용어는 그레고르 키찰레스가, 관점 지향 프로그래밍(aspect-oriented programming)이라는 용어는 크리스 마에다가 만들어냈다.
짐 휴거닌과 에릭 힐스데일은 최초의 컴파일러 및 위버 엔지니어였으며, 믹 케르스텐은 IDE 통합을 구현하고 에이드리언 콜리어, 앤드류 클레멘트와 함께 [http://eclipse.org/ajdt Eclipse AJDT] 프로젝트를 시작했다. 이후 앤드류 클레멘트가 AspectJ 프로젝트 리드이자 주요 기여자가 되었다. 2021년부터 알렉산더 크리게쉬가 AspectJ 및 AJDT 프로젝트 리더를 맡고 있다.
4. 1. AspectWerkz
요나스 보너와 알렉스 바세르가 AspectWerkz 프로젝트를 설계했으며, 이후 AspectWerkz 주석 스타일과 로드 타임 위빙 지원을 통합하면서 AspectJ 프로젝트에 기여했다.[1] AspectWerkz는 자바용 동적이고 가볍고 고성능의 AOP/AOSD 프레임워크였다. AspectJ 5부터 AspectWerkz 기능을 지원하는 AspectJ 프로젝트에 병합되었다.[1]AspectJ 5 이전 버전과 달리 AspectWerkz는 Java에 새로운 언어 구문을 추가하지 않고 대신 자바 주석 내에서 관점 선언을 지원했다. 프로젝트 빌드 시, 클래스 로드 시, 그리고 런타임에 위빙 클래스에 바이트코드를 수정한다. 관점은 Java 주석(Java 5에서 도입), Java 1.3/1.4 사용자 정의 doclet 또는 간단한 XML 정의 파일을 사용하여 정의할 수 있다.
AspectWerkz는 프록시에 동일한 관점을 사용할 수 있는 API를 제공하여 프록시에 익숙한 사용자에게 원활한 전환을 가능하게 하는 투명한 경험을 제공한다.
AspectWerkz는 자유 소프트웨어이다. LGPL 스타일의 라이선스는 상업용 및 오픈 소스 프로젝트 모두에서 AspectWerkz 2.0 사용을 허용한다.
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com