횡단 관심사

객체 지향 소프트웨어 개발에서 횡단 관심사 또는 크로스커팅 관심사()는 다른 관심사에 영향을 미치는 프로그램의 애스펙트이다. 이 관심사들은 디자인과 구현 면에서 시스템의 나머지 부분으로부터 깨끗이 분해되지 못하는 경우가 있을 수 있으며 분산(코드 중복)되거나 얽히는(시스템 간의 상당한 의존성 존재) 일이 일어날 수 있다.

이를테면, 의무기록을 관리하기 위한 애플리케이션을 작성한다고 했을 때 이러한 기록의 색인화는 핵심 관심사인 한편 변경 이력을 기록 데이터베이스나 사용자 데이터베이스에 로깅하는 일이라든지, 인증 시스템과 같은 것은 횡단 관심사이며 이들은 프로그램의 더 많은 부분과 상호작용한다.

배경 
횡단 관심사들은 시스템의 수많은 다른 부분에 의존하거나 영향을 미쳐야 하는 프로그램의 일부분이다. 애스펙트의 개발의 토대를 형성한다. 이러한 횡단 관심사들은 객체 지향 프로그래밍, 절차적 프로그램에 딱 들어맞지는 않는다.

관심사를 횡단하는 것은 프로그램 내에서 시스템 상호 의존과 밀접한 관련이 있다. 절차적, 함수형 프로그래밍 구조체가 완전히 프로시저 호출을 이루기 때문에 두 가지 목표(구현할 기능과 관련 횡단 관심사)를 동시에 해결할 수 있는 시맨틱이 없다. 이로 인해 횡단 관심사를 해결하는 코드는 서로 관련된 다양한 장소에 분산되거나 중복될 수 밖에 없으며 그 결과 모듈화의 손실이 발생하게 된다

관점 지향 프로그래밍은 횡단 관심사들을 애스펙트로 캡슐화함으로써 모듈화를 갖는 것을 목표로 한다. 이를 통해 횡단 관심사를 해결하는 코드의 깨끗한 분리와 재사용을 달성할 수 있게 한다. 횡단 관심사에 대한 기초적인 설계를 통해 소프트웨어 공학적 장점으로 모듈화와 단순해진 유지보수가 포함될 수 있다.

예 
횡단하는 경향이 있는 관심사들의 예는 다음과 같다:

 동기화
 실시간 제약조건
 오류 검출 정정
 제품 기능
 메모리 관리
 자료 검증
 퍼시스턴스
 트랜잭션 처리
 국제화와 지역화 (언어 현지화 포함)
 정보 보안
 캐시 처리
 로깅
 모니터링
 비즈니스 룰
 코드 이동성
 도메인 특화 최적화

같이 보기 
 관심사의 분리
 관점 지향 프로그래밍
 관점 지향 소프트웨어 개발
 리팩터링 (소프트웨어의 재구성)
 데이터베이스 정규화 (불필요하게 중복된 데이터의 최소화)
 다중 상속
 마이크로서비스
 직교화

각주

참고 문헌

추가 문헌 
 Laddad, R. (2003): AspectJ in Action, Practical Aspect-Oriented Programming, Manning Publications Co.

외부 링크 
 AOSD.net's glossary of aspect oriented terms (via Internet Archive Wayback Machine; AOSD.net has become Modularity).
 AspectJ , an Aspect-Oriented extension to the Java programming language
 Bergmans, L., M. Aksit (2001): Composing Multiple Concerns Using Composition Filters, https://web.archive.org/web/20170909131212/http://trese.cs.utwente.nl/ (24 July 2004)
 Berg, K. van den, Conejero, J. and Chitchyan, R. (2005). AOSD Ontology 1.0 - Public Ontology of Aspect-Orientation. AOSD Europe Network of Excellence, http://eprints.eemcs.utwente.nl/10220/01/BergConChi2005.pdf
 Here is an example of handling a cross-cutting concern: https://web.archive.org/web/20161220151503/https://www.captechconsulting.com/blogs/a-persistence-pattern-using-threadlocal-and-ejb-interceptors

관점 지향 소프트웨어 개발
관점 지향 프로그래밍