{{위키데이터 속성 추적}}
[[객체 지향 소프트웨어 개발]]에서 '''횡단 관심사''' 또는 '''크로스커팅 관심사'''({{lang|en|cross-cutting concerns}})는 다른 관심사에 영향을 미치는 [[컴퓨터 프로그램|프로그램]]의 [[애스펙트 (컴퓨터 프로그래밍)|애스펙트]]이다. 이 관심사들은 디자인과 구현 면에서 시스템의 나머지 부분으로부터 깨끗이 [[모듈성 (프로그래밍)|분해]]되지 못하는 경우가 있을 수 있으며 분산([[코드 중복]])되거나 얽히는(시스템 간의 상당한 의존성 존재) 일이 일어날 수 있다.

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

== 배경 ==
횡단 관심사들은 시스템의 수많은 다른 부분에 의존하거나 영향을 미쳐야 하는 프로그램의 일부분이다. [[애스펙트 (컴퓨터 프로그래밍)|애스펙트]]의 개발의 토대를 형성한다.<ref name="Patent 4">U.S. Patent 6467086, p.4</ref> 이러한 횡단 관심사들은 [[객체 지향 프로그래밍]], [[절차적 프로그램]]에 딱 들어맞지는 않는다.<ref name="Seminal 1">Kiczales, p.1</ref>

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

[[관점 지향 프로그래밍]]은 횡단 관심사들을 [[애스펙트 (컴퓨터 프로그래밍)|애스펙트]]로 [[캡슐화]]함으로써 모듈화를 갖는 것을 목표로 한다. 이를 통해 횡단 관심사를 해결하는 코드의 깨끗한 분리와 재사용을 달성할 수 있게 한다.<ref name="Seminal 2">Kiczales, p.2</ref> 횡단 관심사에 대한 기초적인 설계를 통해 [[소프트웨어 공학]]적 장점으로 모듈화와 단순해진 유지보수가 포함될 수 있다.<ref name="Li 1">Li, p.1</ref>

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

* [[동기화 (컴퓨터 과학)|동기화]]
* [[실시간 시스템|실시간 제약조건]]
* [[오류 검출 정정]]
* [[기능 상호작용 문제|제품 기능]]
* [[메모리 관리]]
* [[자료 검증]]
* [[지속성|퍼시스턴스]]
* [[트랜잭션 처리]]
* [[국제화와 지역화]] ([[언어 현지화]] 포함)
* [[정보 보안]]
* [[캐시|캐시 처리]]
* [[데이터 로깅|로깅]]
* [[옵서버 패턴|모니터링]]
* [[비즈니스 룰]]
* [[코드 이동성]]
* 도메인 특화 [[프로그램 최적화|최적화]]

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

== 각주 ==
{{각주}}

== 참고 문헌 ==
* {{저널 인용|last1=Kiczales|first1=Gregor|last2=Lamping|first2=John|last3=Mendhekar|first3=Anurag|last4=Maeda|first5=John|last6=Lopes|first6=Cristina|last7=Longtier|first7=Jean-Marc|last8=Irwin|year=1997|title=Aspect-Oriented Programming|journal=Proceedings of the 11th European Conference on Object-Oriented Programming (ECOOP 1997)|location=Jyvaskyla, Finland|pages=220-242}}
* {{US patent reference|number=6467086|y=2002|m=10|d=15| inventor = Kiczales et. al|title = [[관점 지향 프로그래밍]]}}
* {{저널 인용|title=Verifying Cross-Cutting Features as Open Systems|last1=Li|first1=Harry|first2=Shriram|last2=Krishnamurthi|first3=Kathi|last3=Fisler|journal=ACM SIGSOFT Software Engineering Notes|volume=27|issue=6|year=2002|pages=89-98|doi=10.1145/605466.605481}}
* {{저널 인용|last1=Parnas|first1=David L.|date=December 1972|title=On the Criteria To Be Used in Decomposing Systems into Modules|journal=[[:en:Communications of the ACM]]|volume=15|issue=12|pages=1053-1058|citeseerx = 10.1.1.90.8963|doi=10.1145/361598.361623 }}
* {{저널 인용|last1=Tarr|first1=Peri|last2=Ossher|first2=Harold|last3=Harrison|first3=William|first4=Stanley M., Jr.|last4=Sutton|year=1999|title=N Degrees of Separation: Multi- Dimensional Separation of Concerns|journal=Proceedings of the 21st International Conference on Software Engineering|location=Los Angeles, California, USA|publisher=[[:en:IEEE Computer Society Press]]|pages=107-119|doi=10.1109/ICSE.1999.841000|citeseerx = 10.1.1.89.1641 |isbn=1581130740}}

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

== 외부 링크 ==
* [https://web.archive.org/web/20150919015041/http://www.aosd.net/wiki/index.php?title=Glossary AOSD.net's] glossary of [[관점 지향 프로그래밍|aspect oriented]] terms (via [https://web.archive.org/web/20150919015041/http://www.aosd.net/wiki/index.php?title=Glossary Internet Archive Wayback Machine]; AOSD.net has become [http://modularity.info/ Modularity]).
* [[AspectJ]] [http://eclipse.org/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

{{관점 지향 소프트웨어 개발}}

[[분류:관점 지향 소프트웨어 개발]]
[[분류:관점 지향 프로그래밍]]