재우니의 블로그

이태원 참사에 대한 깊은 애도를 표합니다. 티스토리측에서도 공지했듯 이태원 참사 관련으로 콘텐츠를 생산하는분이 없기를 바랍니다.

반응형


이번에는 델리게이트 연산에 대해 설명을 하고자 합니다.

델리게이트는 더하거나 뺄수가 있답니다. 또한 여개가 묶인 delegate 를 특정 delegate 만 제거할 수도 있답니다.
이해가 안가신다면 간단한 예를 들어보죠. 델리게이트 c를 부르면 a와 b가 동시에 부르게 됩니다. 



간단히 표현을 하면 

c = a + b;


델리게이트 d에 c와 a 를 빼고자 한다면? 

d = c - a;


이렇게 표기하면 됩니다.

우리가 지속적으로 만들어 가고 있는 Car 클래스를 가지고 작업을 해 보겠습니다. 

소스가 점점 길어져서 추가할 부분만 제가 추출해서 소스를 올립니다.

예를 살펴보죠.








4번째줄에서 delegate 를 선언했습니다. 84줄의 메소드와 93줄의 메소드를 위임할 생각입니다. 
따라서 데이터형식이 int 형이고 인자형이 int 를 감안하여 delegate 도 동일하게 데이터형식 int 형으로 하였고, 인자형도 int 형으로 만들었습니다.





84줄 메소드와 93번의 메소드를 설정합니다. 

둘 다 메소드가 인자값을 받으면 인자값에 맞게 for 문이 실행되어 74번과 79번째줄의 메소드를 호출하게 됩니다.







126번째줄은 델리게이트 변수들을 선언 하고요. 128,129번째줄은 델리게이트를 생성했습니다. 
하나는 up, 다른 하나는 down 입니다. up 은 84번째 줄의 메소드를 위임받고요. 
down 은 93번째의 메소드를 위임받습니다.


134번째줄과 135번째줄은 델리게이트를 연산하는 방법입니다. 
134번째는 (+) 동시 호출을 뜻하고 135째는 (-) 특정의 델리게이트를 제외시키는 방법입니다.


134번째는 upPlus = AutoUp() + AutoDown() 로 풀어서 해석되고 두개의 메소드를 동시에 호출을 하며, 
135번째는 downPlus = (AutoUp+AutoDown())-AutoDown() 로 풀어서 해석되고....

downPlus 델리게이트는 AutoDown 델리게이트 간의 제거로 인해, 남는것은 AutoUp() 만 남아서 이로인해 당연히 AutoUp() 메소드에 대한 호출로 출력이 되겠죠.^^;


결과값은 ?






posted by 심재운 (shimpark@gmail.com)
반응형

댓글

비밀글모드