안녕하세요 삽잡이입니다.
이번 시간에는 Predicate에 대해서 알아보려고합니다.
Callback이라는 의미는
'서버가 클라이언트의 코드를 실행하는 것'을 가리킵니다.
왜 콜백이라는 개념이 있는 것인가요?
바로 서버에 클라이언트의 정책을 반영하기 위해서 있는 개념입니다.
그런데, 여기서 정책의 99%는 '판단'이 들어갑니다.
판단을 컴퓨어 용어에서는 Predicate 라고 부르지요.
어떤 프로그램을 가나 Predicate 를 보게 되면,
'어떤 무엇인가를 판단하도록 만들어내는 구나..' 알 수 있습니다.
따라서, 이를 클라이언트에게 판단하는 기능을 주고,
서버가 그 판단한 결과를 가져다 쓴다는 개념으로써 사용되는 것입니다.
우선, C++에서의 predicate의 정의를 생각해볼까요?
C++에서 predicate는 'bool 형식을 반환하는 함수류'를 뜻합니다.
여기서 함수류라고 하면, 함수, 함수자, 함수 객체, 함수 포인터를 말하지요.
아무튼... 중요한 것은 true나 false를 반환함으로써
판단하는데 사용된다는 것입니다. 이를 predicate라고 부른다는 소리죠.
그럼 이 predicate는 뭐 하는데 사용이 되느냐?
바로, 서버가 클라이언트에게 '야 이거 맞아?' 하면 '어!' 혹은 '아니!' 와 같이 판단하는데 사용됩니다.
그런데, C#, .NET으로 왔을 때 predicate를 어떻게 볼 수 있을까요?
predicate는 '서버가 클라이언트한테 물음을 던지기 위한 콜백 이벤트'라고 할 수 있습니다.
predicate도 단지 형식일 뿐입니다.
EventHandler, Predicate 모두 제네릭 대리자 일뿐입니다.
EventHandler는 이벤트를 보고받기 위한 이벤트를 의미하는 것이고,
Predicate는 조건을 판단하기 위함을 의미합니다.
둘은 똑같이 대리자이지만,
predicate는 이벤트를 발생시키기 위해서 만든 것이 아니라 물어보려고 쓰는 것입니다.
둘 모두 Callback 함수를 연결하기 때문에 이벤트라고 불러도 되긴하겠지만,
아무튼 둘의 목적은 다릅니다.
EventHandler는 등록되어있는 메서드가 실행된다는 뜻을 가지고 있습니다.
따라서 return 타입은 void입니다.
왜냐? 알려주는 것이 목적이기 때문입니다.
하지만, Predicate는 가져오는 것이 목적입니다.
바로, Yes or No를 가져오는 것이 목적이지요.
둘 다 클라이언트의 코드를 호출하기 때문에 콜백입니다.
하지만, EventHandler는 호출하고 끝나고, Predicate는 호출하고 값을 가져오지요..
이 값은 true, false 중 하나일 것이구요...
따라서 return 타입은 bool형식이지요.
허허... 반복을 어마어마하게 하고 있습니다.
재미있는 사실은 99% 비교를 원한다는 것은 predicate<T> 형식으로 만들어졌다는 것입니다.
우리가 다음 시간에 알아볼 람다도 거의 대부분 predicate를 위해 만들어놨습니다.
즉, 익명 메서드를 더 쉽게 사용하기 위해 만들어 냈지요.
모든 영역 메서드에 사용되는 것이 아닌 대부분 predicate가 지정되어있는 곳에서
익명 메서드로써 사용되는 것이 람다가 있어야할 곳이라고 생각하시면 됩니다.
말이 어렵습니다... 정리가 필요합니다... 으허허...
아무튼.. 이런 곳이 매우 많기 때문에
문법으로 만들어낸 것이 람다라는 사실임을 아시고...
다음시간에 람다에 대해서 알아보도록 하겠습니다.
이상 삽잡이였습니다!
'삽질의 현장 > - .NET' 카테고리의 다른 글
#057_닷넷(.NET)_.Net Framework 기본 - 대리자 & 이벤트 & 람다 정리 (0) | 2015.11.04 |
---|---|
#056_닷넷(.NET)_.Net Framework 기본 - 람다(Lamda) (0) | 2015.11.04 |
#054_닷넷(.NET)_.Net Framework 기본 - 익명메서드(Anonymous Method) (0) | 2015.11.04 |
#053_닷넷(.NET)_.Net Framework 기본 - 이벤트(Event) (0) | 2015.11.03 |
#052_닷넷(.NET)_.Net Framework 기본 - 대리자(delegate) (0) | 2015.11.03 |