E D R , A S I H C RSS

Aspect Oriented Programming

์šฐ์—ฐํ•˜๊ฒŒ ์ž๋ฐ”์Šคํ„ฐ๋”” ๋“ค์–ด๊ฐ”๋‹ค๊ฐ€ ๋ณธ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ ์ ‘ํ•˜๊ฒŒ ๋˜๋Š” ๊ฐœ๋…์ธ๋ฐ, ๊ฝค ๊ดœ์ฐฎ์€๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. OOP๋„ ์ œ๋Œ€๋กœ ๋ชจ๋ฅด์ง€๋งŒ์š”..

๋ณธ ๊ธ€์€ Markus Voelter์— ์˜ํ•ด ์ž‘์„ฑ๋œ ๊ธ€ ์ค‘ ์ผ๋ถ€์ด๋‹ค. ์›๋ฌธ์€ AOP ๊ธฐ๋ณธ ๊ฐœ๋…, Xerox PARC์— ์˜ํ•ด ๊ตฌํ˜„๋œ Java์˜ AOP ํ™•์žฅ ๋ฒ„์ „์ธ AspectJ ์†Œ๊ฐœ, Metaclass ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ์˜ ๋น„๊ต ๋“ฑ ์ด 3 ํŒŒํŠธ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ฒˆ์—ญ๋ฌธ์€ ์ด ์ค‘ ์ฒซ ๋ฒˆ์งธ ํŒŒํŠธ๋งŒ ์ปค๋ฒ„ํ•œ๋‹ค. ์ฐธ๊ณ ๋กœ ์›๋ฌธ์˜ AspectJ ๊ด€๋ จ ์ฝ”๋“œ๋Š” ์ƒ๋‹นํžˆ ์˜ค๋ž˜๋œ ๋ฌธ๋ฒ•์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ํ˜„์žฌ์˜ ๊ทธ๊ฒƒ๊ณผ ๋งŽ์€ ์ฐจ์ด๋ฅผ ๋ณด์ธ๋‹ค.

Introduction

์ตœ๊ทผ ๋ช‡ ๋…„์— ๊ฑธ์ณ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Object-Oriented Programming, OOP)์€ ์ ˆ์ฐจ์  ๋ฐฉ๋ฒ•๋ก ์„ ๊ฑฐ์˜ ์™„๋ฒฝํžˆ ๋Œ€์ฒดํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•๋ก ์˜ ์ƒˆ ์ฃผ๋ฅ˜๋กœ ๋– ์˜ค๋ฅด๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ์  ๋ฐฉ์‹์˜ ๊ฐ€์žฅ ํฐ ์ด์  ์ค‘ ํ•˜๋‚˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…๋ฆฝ๋œ ํด๋ž˜์Šค๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋“ค ๊ฐ๊ฐ์˜ ํด๋ž˜์Šค๋“ค์€ ์ž˜ ์ •์˜๋œ ๊ณ ์œ  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜๊ณ , ๊ทธ ์—ญํ•  ๋˜ํ•œ ๋ช…๋ฐฑํžˆ ์ •์˜๋˜์–ด ์žˆ๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ชฉํ‘œํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฐ ํด๋ž˜์Šค๋“ค์ด ์„œ๋กœ ์œ ๊ธฐ์ ์œผ๋กœ ํ˜‘๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์‹œ์Šคํ…œ์˜ ์–ด๋–ค ๊ธฐ๋Šฅ๋“ค์€ ํŠน์ • ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋„๋งก์•„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋“ค์€ ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ๋“ค์‘ค์‹œ๋ฉฐ ํ•ด๋‹น ์ฝ”๋“œ๋“ค์„ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค๋“ค์— ํฉ๋ฟŒ๋ ค ๋†“๋Š”๋‹ค. ์ด๋Ÿฐ ํ˜„์ƒ์„ ํšก๋‹จ์ (cross-cutting)์ด๋ผ ํ‘œํ˜„ํ•œ๋‹ค. ๋ถ„์‚ฐ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ์˜ ๋ฝํ‚น(locking, ๋™๊ธฐํ™”) ๋ฌธ์ œ, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ, ๋กœ๊น… ๋“ฑ์ด ๊ทธ ์˜ˆ์ด๋‹ค. ๋ฌผ๋ก  ํ•„์š”ํ•œ ๋ชจ๋“  ํด๋ž˜์Šค๋“ค์— ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ์ง‘์–ด ๋„ฃ์œผ๋ฉด ํ•ด๊ฒฐ๋  ๋ฌธ์ œ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ํ–‰์œ„๋Š” ๊ฐ๊ฐ์˜ ํด๋ž˜์Šค๋Š” ์ž˜ ์ •์˜๋œ(well-defined) ์—ญํ• ๋งŒ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ๊ธฐ๋ณธ ์›์น™์— ์œ„๋ฐฐ๋œ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์ด ๋ฐ”๋กœ Aspect-Oriented Programming (AOP)์ด ์ž‰ํƒœ๋œ ์›์ธ์ด ๋˜์—ˆ๋‹ค.

AOP์—์„œ๋Š” aspect๋ผ๋Š” ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋Š” ์‰ฝ๊ฒŒ struct, class, interface ๋“ฑ๊ณผ ๊ฐ™์ด ํŠน์ •ํ•œ ์šฉ๋„์˜ ๊ตฌ์กฐ๋ผ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. Aspect ๋‚ด์—๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ๋“ค์— ํฉ์–ด์ ธ ์žˆ๋Š” ๊ธฐ๋Šฅ(ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์ด ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์— ํฉ์–ด์ ธ ์žˆ์Œ์„ ๋œปํ•œ๋‹ค)์„ ๋ชจ์•„ ์ •์˜ํ•˜๊ฒŒ ๋œ๋‹ค. ์ „์ฒด์ ์œผ๋กœ, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐ๊ฐ์˜ ํด๋ž˜์Šค๋Š” ์ž์‹ ์—๊ฒŒ ์ฃผ์–ด์ง„ ๊ธฐ๋Šฅ๋งŒ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์ถ”๊ฐ€๋œ ๊ฐ aspect๋“ค์ด ํšก๋‹จ์ ์ธ ํ–‰์œ„(๊ธฐ๋Šฅ)๋“ค์„ ๋ชจ์•„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์ „์ฒด ํ”„๋กœ๊ทธ๋žจ์„ ์ด๋ฃจ๋Š” ํ˜•ํƒœ๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.

AOP Basics

์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด, ๊ทธ๋ฆฌ๊ณ  ์„ค๋ช…์„ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ๋ฅผ ๋“ค์–ด๊ฐ€๋ฉฐ AOP ๊ฐœ๋…์„ ์„ค๋ช…ํ† ๋ก ํ•˜๊ฒ ๋‹ค. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋“ค์ด ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๋Š” ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด๋ณด์ž. ๊ณต์œ  ๋ฐ์ดํ„ฐ๋Š” Data๋ผ๋Š” ๊ฐ์ฒด(Data ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค)๋กœ ์บก์Аํ™”๋˜์–ด ์žˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋“ค์ด ํ•˜๋‚˜์˜ Data ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋‚˜ ์ด ๊ณต์œ  ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ์ด์–ด์•ผ๋งŒ ํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ค ํ˜•ํƒœ์ด๊ฑด ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๋„์ž…๋˜์–ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ์ฆ‰, ์–ด๋–ค ํ•œ ๊ฐ์ฒด๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ค‘์ด๋ผ๋ฉด Data ๊ฐ์ฒด๋Š” ์ž ๊ฒจ(lock)์ ธ์•ผ ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ด ๋๋‚ฌ์„ ๋•Œ ํ•ด์ œ(unlock)๋˜์–ด์•ผ ํ•œ๋‹ค. ์ „ํ†ต์ ์ธ ํ•ด๊ฒฐ์ฑ…์€ ๊ณต์œ  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ํด๋ž˜์Šค๋“ค์ด ํ•˜๋‚˜์˜ ๊ณตํ†ต ๋ถ€๋ชจ ํด๋ž˜์Šค(โ€œworkerโ€ ๋ผ ๋ถ€๋ฅด๋„๋ก ํ•˜์ž)๋กœ๋ถ€ํ„ฐ ํŒŒ์ƒ๋˜๋Š” ํ˜•ํƒœ์ด๋‹ค. worker ํด๋ž˜์Šค์—๋Š” lock()๊ณผ unlock() ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜์—ฌ ์ž‘์—…์˜ ์‹œ์ž‘๊ณผ ๋์— ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ† ๋ก ํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ํ˜•ํƒœ๋Š” ๋‹ค์Œ๊ณผ ๋ฌธ์ œ๋“ค์„ ํŒŒ์ƒ์‹œํ‚จ๋‹ค.

  1. ๊ณต์œ  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋Š” ์ƒ๋‹นํžˆ ์ฃผ์˜ํ•ด์„œ ์ž‘์„ฑ๋˜์–ด์•ผ ํ•œ๋‹ค. ๋™๊ธฐํ™” ์ฝ”๋“œ๋ฅผ ์ž˜๋ชป ์‚ฝ์ž…ํ•˜๋ฉด ๋ฐ๋“œ๋ฝ(dead-lock)์ด ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ ์˜์†์„ฑ์ด ๊นจ์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€๋Š” ๋ณธ๋ž˜์˜ ๊ธฐ๋Šฅ๊ณผ ๊ด€๋ จ ์—†๋Š” ๋™๊ธฐํ™” ๊ด€๋ จ ์ฝ”๋“œ๋“ค๋กœ ๋”๋Ÿฝํ˜€์งˆ ๊ฒƒ์ด๋‹ค.
  2. Java์™€ ๊ฐ™์€ ๋‹จ์ผ ์ƒ์† ๋ชจ๋ธ์—์„œ๋Š” worker๋ฅผ ๋งŒ๋“ ๋‹ค๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์–ด๋–ค ํด๋ž˜์Šค๋“ค์€ ์ด๋ฏธ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋“ค๋กœ๋ถ€ํ„ฐ ํ™•์žฅ๋˜์—ˆ์„ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋Š” ํŠนํžˆ ํด๋ž˜์Šค ๊ณ„์ธต ๊ตฌ์กฐ ์„ค๊ณ„๊ฐ€ ๋งˆ๋ฌด๋ฆฌ๋œ ํ›„, ๋’ค๋Šฆ๊ฒŒ ๋™๊ธฐํ™”์˜ ํ•„์š”์„ฑ์„ ๊นจ๋‹ฌ์•˜์„ ๋•Œ ํ”ํžˆ ๋ฐœ์ƒํ•œ๋‹ค. ๋™๊ธฐํ™”๋ฅผ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์€ ๋ฒ”์šฉ ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ๊ณต์œ  ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋ ค ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ํ•œ ์˜ˆ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
  3. ์žฌํ™œ์šฉ์„ฑ(reusability)์ด ๊ฐ์†Œ๋œ๋‹ค. worker ํด๋ž˜์Šค๋Š” ๋™๊ธฐํ™”๊ฐ€ ํ•„์š”์น˜ ์•Š๋Š” ํด๋ž˜์Šค๋‚˜ ์‹ฌ์ง€์–ด ๋‹ค๋ฅธ ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ๋„ ์‚ฌ์šฉํ•˜๊ธธ ์›ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋™๊ธฐํ™” ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•จ์œผ๋กœ์จ worker ํด๋ž˜์Šค๋Š” ํŠน์ • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ข…์†์ ์ธ ํด๋ž˜์Šค๋กœ ์ „๋ฝํ•˜๊ฒŒ ๋œ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์•ž์„œ ๊ฐ€์ •ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋™๊ธฐํ™” ๊ฐœ๋…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†์„ฑ๋“ค์„ ๊ฐ–๋Š”๋‹ค.

  • ๋™๊ธฐํ™”๋Š” worker ํด๋ž˜์Šค์— ํ• ๋‹น๋œ ์ตœ์šฐ์„  ์ž‘์—…์ด ์•„๋‹ˆ๋‹ค.
  • ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ worker ํด๋ž˜์Šค์˜ ์ตœ์šฐ์„  ์ž‘์—…๊ณผ ๋…๋ฆฝ์ ์ด๋‹ค.
  • ํ•œ ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋™๊ธฐํ™” ๊ด€๋ จ ์ฝ”๋“œ๊ฐ€ ์‹œ์Šคํ…œ ์ „์ฒด์— ํšก๋‹จ์ ์œผ๋กœ ์กด์žฌํ•œ๋‹ค. ๋‹ค์ˆ˜์˜ ํด๋ž˜์Šค์™€ ๋” ๋งŽ์€ ์ˆ˜์˜ ๋ฉ”์†Œ๋“œ๋“ค์ด ์ด ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์˜ํ–ฅ ๋ฐ›๋Š”๋‹ค.

  • AOP์—์„œ๋Š” ์ด๋Ÿฐ ํ˜•ํƒœ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ํ˜•ํƒœ์˜ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์„ ์ œ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค. AOP๋Š” ์ƒˆ๋กœ ๋„์ž…๋œ ํ”„๋กœ๊ทธ๋žจ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ์— ํšก๋‹จ๋˜์–ด ์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์„ ์ •์˜ํ•ด ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ–ˆ๋‹ค. ์ด ์ƒˆ๋กœ์šด ๊ตฌ์กฐ๋ฅผ ์šฐ๋ฆฌ๋Š” aspect๋ผ ๋ถ€๋ฅธ๋‹ค.

    ์šฐ๋ฆฌ์˜ ์˜ˆ์— Lock์ด๋ผ๋Š” aspect๋ฅผ ๋„์ž…ํ•ด๋ณด์ž. Lock aspect๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ญํ• ์ด ํ• ๋‹น๋  ๊ฒƒ์ด๋‹ค.

  • Data ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค๋“ค์„ ์œ„ํ•ด lock ๋ฐ unlock ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•œ๋‹ค(lock(), unlock()).
  • Data ๊ฐ์ฒด๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋“ค์ด ์ˆ˜ํ–‰ ์ „์— lock()์„ ํ˜ธ์ถœํ•˜๊ณ , ์ˆ˜ํ–‰ ํ›„์—๋Š” unlock()์„ ํ˜ธ์ถœํ•จ์„ ๋ณด์žฅํ•œ๋‹ค.
  • ์ด์ƒ์˜ ๊ธฐ๋Šฅ์„ Data ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค์˜ ์ž๋ฐ” ์†Œ์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ํˆฌ๋ช…ํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • Aspect๋Š” ๋˜ ์–ด๋–ค ์ผ๋“ค์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์„๊นŒ?
    ํŠน์ • ๋ฉ”์†Œ๋“œ(ex. ๊ฐ์ฒด ์ƒ์„ฑ ๊ณผ์ • ์ถ”์ ) ํ˜ธ์ถœ์„ ๋กœ๊น…ํ•  ๊ฒฝ์šฐ aspect๊ฐ€ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ์กด ๋ฐฉ๋ฒ•๋Œ€๋กœ๋ผ๋ฉด log() ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋†“์€ ํ›„, ์ž๋ฐ” ์†Œ์Šค์—์„œ ๋กœ๊น…์„ ์›ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ฐพ์•„ log()๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํ˜•ํƒœ๋ฅผ ์ทจํ•ด์•ผํ•  ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ AOP๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›๋ณธ ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š” ์—†์ด ์›ํ•˜๋Š” ์œ„์น˜์—์„œ ์›ํ•˜๋Š” ๋กœ๊น…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ์ž‘์—… ๋ชจ๋‘๋Š” aspect๋ผ๋Š” ์™ธ๋ถ€ ๋ชจ๋“ˆ์— ์˜ํ•ด ์ˆ˜ํ–‰๋œ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์˜ˆ๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ์žˆ๋‹ค. Aspect๋ฅผ ์ด์šฉํ•ด ์—ฌ๋Ÿฌ ํด๋ž˜์Šค๋“ค์˜ ์‚ฐ์žฌ๋œ ๋ฉ”์†Œ๋“œ๋“ค์— ์˜ํ–ฅ์„ ์ฃผ๋Š” catch() ์กฐํ•ญ(clause)์„ ์ •์˜ํ•ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์— ๊ฑธ์นœ ์ง€์†์ ์ด๊ณ  ์ผ๊ด€์ ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๊ทธ๋ ‡๋‹ค๋ฉด ๋‘ ๊ฐ€์ง€ ์˜๋ฌธ์ด ๋– ์˜ค๋ฅผ ๊ฒƒ์ด๋‹ค.

    ๋จผ์ € โ€˜Aspect๋Š” ๊ผญ ํ•„์š”ํ•œ๊ฐ€?โ€™๋ผ๋Š” ์งˆ๋ฌธ์— ๋‹ตํ•ด๋ณด์ž. ๋ฌผ๋ก  ๊ทธ๋ ‡์ง€๋Š” ์•Š๋‹ค. ์ด์ƒ์—์„œ ์–ธ๊ธ‰ํ•œ ๋ชจ๋“  ๋ฌธ์ œ๋“ค์€ aspect ๊ฐœ๋… ์—†์ด ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ aspect๋Š” ์ƒˆ๋กญ๊ณ  ๊ณ ์ฐจ์›์ ์ธ ์ถ”์ƒ ๊ฐœ๋…์„ ์ œ๊ณตํ•ด ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์˜ ์„ค๊ณ„ ๋ฐ ์ดํ•ด๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ํ•œ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์˜ ๊ทœ๋ชจ๊ฐ€ ๊ณ„์† ์ปค์ ธ๊ฐ์— ๋”ฐ๋ผ โ€œ์ดํ•ด(understanding)โ€์˜ ์ค‘์š”์„ฑ์€ ๊ทธ๋งŒํผ ๋ถ€๊ฐ๋˜๊ณ  ์žˆ๋‹ค(OOP๊ฐ€ ํ˜„์žฌ์ฒ˜๋Ÿผ ์ฃผ๋ฅ˜๋กœ ๋– ์˜ค๋ฅด๋Š”๋ฐ ์žˆ์–ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์š”์ธ ์ค‘ ํ•˜๋‚˜์˜€๋‹ค). ๋”ฐ๋ผ์„œ aspect ๊ฐœ๋…์€ ๋ถ„๋ช… ๊ฐ€์น˜ ์žˆ๋Š” ๋„๊ตฌ๊ฐ€ ๋  ๊ฒƒ์ž„์— ํ‹€๋ฆผ์—†๋‹ค.๋‹ค์Œ์˜ ์˜๋ฌธ์€ โ€˜Aspect๋Š” ๊ฐ์ฒด์˜ ์บก์Аํ™” ์›์น™์„ ๊ฑฐ์Šค๋ฅด์ง€ ์•Š๋А๋ƒ?โ€™๋Š” ๊ฒƒ์ด๋‹ค. ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด โ€˜์œ„๋ฐ˜ํ•œ๋‹คโ€™ ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ œํ•œ๋œ ํ˜•ํƒœ๋กœ๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•œ๋‹ค๋Š”๋ฐ ์ฃผ๋ชฉํ•˜๋„๋ก ํ•˜์ž. aspect๋Š” ๊ฐ์ฒด์˜ private ์˜์—ญ๊นŒ์ง€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด ์‚ฌ์ด์˜ ์บก์Аํ™”๋Š” ํ•ด์น˜์ง€ ์•Š๋Š”๋‹ค.

    Aspect-Oriented Programming in Java

    Markus Voelter, voelter at acm dot org
    ๋ฒˆ์—ญ: ์ž๋ฐ”์Šคํ„ฐ๋”” ์ดํด๋ฆฝ์Šค & ๋ชจ๋ธ๋ง๋„๊ตฌ ์‹œ์‚ฝ wegra (Bok-Youn, Lee) wegra at wegra dot org


    http://javastudy.co.kr ์—์„œ ํސ์Šต๋‹ˆ๋‹ค. eclipse ํ”„๋กœ์ ํŠธ์ค‘์—๋„ ์žˆ๋Š”๊ฒƒ ๊ฐ™๋”๊ตฐ์š”. (http://www.eclipse.org/aspectj/) - ์ž„์ธํƒ
    AspectJ๋Š” Eclipse ํ”„๋กœ์ ํŠธ๋ผ๊ธฐ ๋ณด๋‹ค. Xerox PARC ์˜ AspectJ ํ”„๋กœ์ ํŠธ์˜ ํ™ˆํŽ˜์ด์ง€๊ฐ€ ์˜ฎ๊ฒจ ์˜จ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ์—ญ์‹œ ์ด๊ธ€์ด wegra๋‹˜์ด ํ•ด์„ํ•ด ๋†“์œผ์‹ ๊ฑฐ ์˜€๊ตฐ์š”. ์ข€๋” ๋งŽ์€ ๋‚ด์šฉ์€ ์•„๋ž˜์˜ SisterWiki ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๊ณ , ๊ด€๋ จํฌ๋Ÿผ ๋น„์Šค๋ฌด๋ฆฌ ํ•œ๋ฐ๊ฐ€ http://aosd.net ์ž…๋‹ˆ๋‹ค. --NeoCoin

    Valid XHTML 1.0! Valid CSS! powered by MoniWiki
    last modified 2021-02-07 05:22:32
    Processing time 0.0077 sec