2013년 12월 15일 일요일

위임과 리디렉션

 

 



디자인 스페이스라는 EDP 개념에서 메서드 호출 의존성 이론중 위임과 리디렉션의 그래프예요.

x는 메서드를 나타내고, y는 오브젝트를 나타냅니다.

 

유사도는 값이 클수록 비슷해지고, 값이 작을수록 달라지죠.

 

이래뵈도 졸트상을 수상한 그래프예요 


그래프를 보시면 알겠지만, 위임은 오브젝트 유사도와 메서드 유사도의 값이 공통적으로 낮고

리디렉션은 오브젝트 유사도는 낮지만 메서드 유사도는 높은 것을 알 수 있어요.

 

 

지금부터 그래프를 토대로 해설 들어갑니당 ~


위임은 소프트웨어 설계 분야에서 다양하게 쓰이는 광범위한 뜻의 단어입니다.

여기에서 위임을 정확하게 정의하자면, 메서드 호출이 일어나는 두 객체와 두 메서드가 서로 다름을 의미합니다.


[위임 예시]

 

 

class VicePresidentOfSales

{

public :

    void increaseQuarterlySales();

};

 

class CEO

{

private :

    VicePresidentOfSales * m_vicePresidentOfSales;

    

public :

    void increaseProfits(){

        m_vicePresidentOfSales -> increaseQuarterlySales();

    }

}



위임이라는 단어를 사용한 이유는 호출 메서드가 타겟에게 
"내가 내 일을 끝낼 수 있게 너는 이 작업을 맡아줘"라고 말하면서, 자신의 목표 작업을 제외한 일부 작업을 나눠주기 때문입니다.

기업의 CEO가 여러 부서를 담당하는 부사장들에 업무를 위임하는 것과 마찬가지예요.
CEO는 "기업 운영"이라는 업무가 있지만, 각 부사장에겐

- 사원 인력 관리
- 재무 건전성 확보
- IT기술에 대한 투자와 효율적 운용

등의 업무가 있습니다. CEO는 자신의 업무가 아니라 생각되지만 자신의 업무를 성공적으로 완수하기 위해 필수적인 업무를 각 부사장에게 수행하도록 요구하죠.


이런 위임을 리디렉션과 비교해 보겠습니다.
리디렉션의 경우, 호출 메서드는 다른 객체에게 어떤 작업을 하도록 요청하긴 하지만, 자신이 해야 할 작업과 똑같은 작업을 요청한다는 점이 위임과 다릅니다. 


다른 객체에 자신의 작업량 중 일부를 넘기되, 부분적인 작업이 자신의 전체적인 작업과 거의 비슷합니다. 


[리디렉션 예시]

 

@interface Painter {}

-(void) painterCar : (Car) car;

@end

 

 

@interface PainterShopManager {}

Painter subPainter;

 

(-void) painterCar : (Car) car;

@end

 

 

@implementation PainterShopManager

 

(-void) paiterCar : (Car) car{

    [subPainter painerCar : car];

}

 

@end




리디렉션은 한 가지의 특정한 작업이 여러 대의 병렬 유닛으로 분기되어 진행된 후, 각 유닛의 작업 결과가 다시 한 라인으로 합쳐져서 다음 스테이션으로 넘어가는 조립 라인과 상당히 비슷합니다.

자신과 부하의 작업 유사성으로 인해 이런 식의 작업 분배가 위임이 아니라 리디렉션이 됩니다.
그러므로 리디렉션은 메서드 유사성은 높지만 서로 다른 유닛들이 병렬 프로그래밍을 수행한다는 점에서 객체 유사도는 낮은 분포도를 보이는 것이죠.



집단지성 엘리멘트 중에서.






댓글 없음:

댓글 쓰기