오늘 좋은 세미나를 들었다. 절때 잊기 전에 정리 해두어야 한다. 정리 해서 내껏으로 만들놓아야 된다. ㅋㅋㅋ 그래야만 오늘 시간을 날리지 않게 될것이니깐.

Aspect Oriented Programming (관점 지향적 프로그램)

위에 놈은 무엇인가? 예를 들어 보자.

public class NetWorkClass : TCPProtocol
{
  public void SendMessage()
  {
       // Good Send Logic!!!
  }
}



위와 같은 클래스는 TCP 메세지를 전송하는데 있어서 완벽한 로직 제공 했고, 그것을 수행하는데 전혀 문제 없는 클래스이다. 한마디로 완벽하다고 할수 있다.

그런데 위 클래스를 사용하는 프로그램을 사용하다가 사용자가 이렇게 요구 할수도 있을 것이다. 메세지를 전송할때 로그를 남겨주세요. 그렇다면 우리는 다음과 같이 소스를 수정할 것이다.

public class NetWorkClass : TCPProtocol
{
  public void SendMessage()
  {
       LogClass log = new LogClass();
       // Good Send Logic!!!
       log.Write(message);
  }
}



첫번째 프로그램이 다음과 같이 수정되었다. 위와 같이 수정된 프로그램을 사용하다가 또 사용자가 메세지를 암호화 해서 보내게 해달라고 했을경우 또 다음과 같이 수정을 하게 될것이다.

public class NetWorkClass : TCPProtocol
{
  public void SendMessage()
  {
       LogClass log = new LogClass();
       SecurityClass sc = new SecurityClass();
       sc.Set(true);
       // Good Send Logic!!!
       sc.Set(false);
       log.Write(message);
  }
}



위와 같이 또 수정 될것이다. 그런데 이와 같은 요구가 계속 늘어나게 된다면 소스 코드가 계속 늘어 나게 되고 복잡해 지고, 엉키고 그렇게 된다. 그리고 원래의 클래스는 아주 이상적으나 후에 엉키게 되는 소스를 보고 사람들은 잘못된 프로그램이라고 말들이 많을 것이다.본래의 의도와는 상관 없이....

이런것을 해결하기 위해서 나온것이 Aspect Oriented Programming (관점 지향적 프로그램) 이다. 다음 소스를 보자.

public class NetWorkClass : TCPProtocol
{
  [Log]
  [Security]
  public void SendMessage()
  {
       // Good Send Logic!!!
  }
}



위와 같이 보내려는 메서드는 그대로이다. 원래의 메서드는 전혀 건들 필요 없이 추가하려는 기능들을 Attribute 로 포함 하여 필요한 기능들을 포함하고 나중에 기능이 필요 없을때에는 Attribute를 빼고 하면 처음보다 엉키지도 않고 알아보기도 쉽고 좋은 프로그램이 될것이다. 이렇게 하는것 이러한 개념이 Aspect Oriented Programming:관점 지향적 프로그램이다.


User inserted image

위의 그림과 같이 메세지를 보내는 기능은 그대로 이고 속성들을 추가하고 바꿀것은 바꾸고 이런것이다.

Trackback url :: http://hahakbs.dothost.co.kr/trackback/64

댓글을 달아 주세요


div>