횡단 관심사
객체 지향 소프트웨어 개발에서 횡단 관심사 또는 크로스커팅 관심사(cross-cutting concerns)는 다른 관심사에 영향을 미치는 프로그램의 애스펙트이다. 이 관심사들은 디자인과 구현 면에서 시스템의 나머지 부분으로부터 깨끗이 분해되지 못하는 경우가 있을 수 있으며 분산(코드 중복)되거나 얽히는(시스템 간의 상당한 의존성 존재) 일이 일어날 수 있다.
이를테면, 의무기록을 관리하기 위한 애플리케이션을 작성한다고 했을 때 이러한 기록의 색인화는 핵심 관심사인 한편 변경 이력을 기록 데이터베이스나 사용자 데이터베이스에 로깅하는 일이라든지, 인증 시스템과 같은 것은 횡단 관심사이며 이들은 프로그램의 더 많은 부분과 상호작용한다.
배경
편집횡단 관심사들은 시스템의 수많은 다른 부분에 의존하거나 영향을 미쳐야 하는 프로그램의 일부분이다. 애스펙트의 개발의 토대를 형성한다.[1] 이러한 횡단 관심사들은 객체 지향 프로그래밍, 절차적 프로그램에 딱 들어맞지는 않는다.[2]
관심사를 횡단하는 것은 프로그램 내에서 시스템 상호 의존과 밀접한 관련이 있다. 절차적, 함수형 프로그래밍 구조체가 완전히 프로시저 호출을 이루기 때문에 두 가지 목표(구현할 기능과 관련 횡단 관심사)를 동시에 해결할 수 있는 시맨틱이 없다.[3] 이로 인해 횡단 관심사를 해결하는 코드는 서로 관련된 다양한 장소에 분산되거나 중복될 수 밖에 없으며 그 결과 모듈화의 손실이 발생하게 된다[2]
관점 지향 프로그래밍은 횡단 관심사들을 애스펙트로 캡슐화함으로써 모듈화를 갖는 것을 목표로 한다. 이를 통해 횡단 관심사를 해결하는 코드의 깨끗한 분리와 재사용을 달성할 수 있게 한다.[4] 횡단 관심사에 대한 기초적인 설계를 통해 소프트웨어 공학적 장점으로 모듈화와 단순해진 유지보수가 포함될 수 있다.[5]
예
편집횡단하는 경향이 있는 관심사들의 예는 다음과 같다:
같이 보기
편집- 관심사의 분리
- 관점 지향 프로그래밍
- 관점 지향 소프트웨어 개발
- 리팩터링 (소프트웨어의 재구성)
- 데이터베이스 정규화 (불필요하게 중복된 데이터의 최소화)
- 다중 상속
- 마이크로서비스
- 직교화
각주
편집참고 문헌
편집- Kiczales, Gregor; Lamping, John; Mendhekar, Anurag; Maeda; Lopes, Cristina; Longtier, Jean-Marc; Irwin (1997). “Aspect-Oriented Programming”. 《Proceedings of the 11th European Conference on Object-Oriented Programming (ECOOP 1997)》 (Jyvaskyla, Finland): 220–242. 이름 목록에서
|이름5=
이(가) 있지만|성5=
이(가) 없음 (도움말) - US patent 6467086, Kiczales et. al, "관점 지향 프로그래밍", issued 2002-10-15
- Li, Harry; Krishnamurthi, Shriram; Fisler, Kathi (2002). “Verifying Cross-Cutting Features as Open Systems”. 《ACM SIGSOFT Software Engineering Notes》 27 (6): 89–98. doi:10.1145/605466.605481.
- Parnas, David L. (December 1972). “On the Criteria To Be Used in Decomposing Systems into Modules”. 《en:Communications of the ACM》 15 (12): 1053–1058. CiteSeerX 10.1.1.90.8963. doi:10.1145/361598.361623.
- Tarr, Peri; Ossher, Harold; Harrison, William; Sutton, Stanley M., Jr. (1999). “N Degrees of Separation: Multi- Dimensional Separation of Concerns”. 《Proceedings of the 21st International Conference on Software Engineering》 (Los Angeles, California, USA: en:IEEE Computer Society Press): 107–119. CiteSeerX 10.1.1.89.1641. doi:10.1109/ICSE.1999.841000. ISBN 1581130740.
추가 문헌
편집- 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 [1], 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