PROGRAMMING WORKSHOP

.Net FrameWork,VB.Net |

아니, 직접 프로시져를 호출하면 되지, 왜 delegate라는 것을 중간에 넣고
복잡하게 하나???
라는 것이 delegate라는 것을 만나면 하게 되는생각이다
예를 들어서
세사람이 각각의 방에서
A는 책을 읽고 있고
B는 께임을 하고 있고
C는 잠을 자고 있다
이때 C가 잠에서 깨면 같이 저녁을 먹으러 나가려고 한다
A가 C가 잠에서 깬나??안깨었나 알고 싶어서 C가 있는 방에 간다
C가 잠을 계속 자고 있다,A는 에너지를 소비하고 다시 A방으로 간다
B가 또 C가 잠에서 깨었는지, 안깨었는지 모른다..
그래서 B가 C의 방에 가본다..여전히 잔다, B도 에너지를 소비하고
자기 방으로 간다
프로그래밍도 마찬가지일 것이다
이런 중복되고 소비되는 자원을 절약하려고 한다
그냥 직접 왔다, 갔다 하는 프로그래밍을 해도 된다
하지만 중간에 인터폰시스템을 놓았다
C가 잠에서 깨면 인터폰을 누르면 된다
바로 이 인터폰의 역할이 Delegate라고 보시면 되는 것이다
무엇을 하다가 신호를 보내서 실행하게 하는 것

이것을 이렇게 한번 해보자
1000번을 램덤숫자를 만들어서
짝수가 몇개인지, 홀수가 몇개인지 갯수를 비교하고 싶다
이것을 하려면 순환을 하면서..랜덤숫자를 발생하여
짝수갯수를 담을 변수를 만들고
홀수갯수를 담을 변수를 만들고
하나씩 더해놓고 비교하면 될 것이다
이것을 Delegate를 사용하여 발생즉시 비교가 되게 해보자
즉 짝수가 발생하면 현재까지 짝수의 갯수누계
홀수가 발생하면 현재까지 홀수의 갯수누계를 라벨콘트롤에 표현해보자
발생즉시 어디엔가 연락을 보내어 일을 시키는 것..
일반적으로 Delegate를 사용하지 않는 다면 아래와 같이 할수 있을 것이고



Delegate를 사용하면 아래와 같이 할수 있을 것이다



순환문이 돌아가는 순간..
어떤 순간,순간에 Delegate에서 참조하는 프로시져를 호출한다..
Event프로시져의 어떤 이벤트가 발생할때마다 신호를 내보내는 것과 같은
요령이다, EventHadler도 하나의 대표적인 Delegate의 인것이고..

VBA의 워크시트이벤트, 워크북이벤트의 특정한 이벤트프로시져에서
우리가 원하는 여러가지 다양한 작업을 프로시져에 넣듯이
Delegate에서 참조하는 프로시져(이벤트프로시져라고 생각해도 되는 것..)에
다양하게 표현을 할수 있으니, 참으로 좋은 도구인셈이다

VBA에서와는 다른 낯선것을 자꾸 이야기 하니까, 좀 부담스러울수 있지만
VBA도 처음에는 낯섫었듯이, 이것도 조금 지나면 자연스러워지고
아주 파워풀한 도구를 챙기게 된다는 것으로 생각하시고 차근 차근 화일 하나하나
살펴가시면 된다

***[LOG-IN]***

Lambda Expression

Delegate를 알고 나면
새로운 용어 Lambda Expression를 살펴볼차례다
expression은 표현식인데..어떤 표현식인가???
위에서 별도의 프로시져를 AddressOf 로 갖여다 사용하였다, 그림과 같이



하지만 아래와 같이 한다면 편리하지 않을까?



Lambda Expression은 별도의 프로시져나 함수의 이름 없이 명령문 내에 그냥 표현식으로
표현하는 것이다

아..뭐 이런 복잡해 보이는것(복잡해 보일뿐이다)으로 하지
그냥 별도로 프로시져하나 마련하고 AddressOf 로 접근하게 하면 되지..
VBA에서 발전된 코딩을 하려고 하는 것이다
프로그래밍은 수많은 정보를 어떻게 하면 간단하게 처리할까하는데 있다
수많은 정보에서 어떤 조건에 맞는 것을 찾아내려면..
어떻게 하면 좋을까??
엑셀에서 휠터를 하면 간단한데..
하지만 엑셀의 워크시트라는 인터페이스가 없는 뒷켵 보이지않는 곳에서
메모리속의 것을 처리해야.. 효율적으로 속도감있게 처리가 된다
그런 많은 정보를 훑어서 원하는 것을 찾거나 하는 작업을 위하여서는
집합체라고 하는 것이 필수적이다
배열에서 출발하여 Collection 이라는 집합체까지 VBA에서 했었다
하지만 VB.Net에서는 단순한 Collection이 아주 다양하고 화려해지고
값을 찾아내거나 그룹핑을 하거나 하는 떼거리 정보의 처리에서도 화려해진다
이때 나타나서 역할을 해주는 것이
Lambda expression,extension method, LINQ등의 낯선단어들인 것이다
그래서 하는 것이다
VBA에서 쌓은 내공+ 확장되는 프로그래밍테크닉이 되게 하기 위한
좀 복잡해 보이지만 넘어야 하는 산들이고, 이것을 모두 넘으면
.NetFrameWork의 자원을 신나게 활용할수 있게 되는 것이다

***[LOG-IN]***