내가 STL에 조예가 깊어서 글을 남기는 것이 아니라, Effecitve STL 을 공부하는 사람들이 이 글을 보고,
도움이 되었으면 하는 생각과, 혹시 내가 틀린것이 있다면 지적해 주시지 않을까 란 생각으로 글을 올리는것임을 미리 밝힙니다. - 최익필
주제에 들어가기에 앞서, 술어구문? 순수 함수? 무슨 뜻인지 알아보자.
술어구문(predicate) 이란?
bool 값을 반환하는 함수를 뜻하는데 번역 단계에서 우리나라말 선택시 조금 어려운 부분이기도 하다. 자세한 내용은 링크 : http://occamsrazr.net/tt/82 에서 아~ 그렇구나 하고 넘기길 바란다.
순수 함수(pure function) 이란?
순수 가상 함수는 알겠는데 이건 참 생소한 말이였다. 이것은 매개변수로 함수의 리턴값이 결정되는 함수를 뜻한다. 대부분의 함수를 이런식으로 정의하여 사용하는데, 클래스로 넘어가면서 .. 순수 함수가 아닌 함수들도 꽤 쓰여진다.
술어 구문 클래스(predicate class) 이란?
클래스의 operator() 가 bool 을 리턴하는 클래스를 뜻한다.
그러다면 왜 술어 구문을 순수 함수로 만들어야 할까?
STL에서 술어 구문이라면, 순수 함수로 만들어야 한다는 이야기로 국한된다.
왜냐하면 알고리즘의 함수객체를 받는 애들 중 술어구문(predicate)를 요구 해서 operator 가 bool 를 리턴하게 만들고, 순수함수 형식을 따르지 않았다고 치자. 그러면 그 결과값을 예측하기 힘들게 되기 때문이다.
그러므로 술어 구문은 순수 함수로 만들자는 거다!
말로만 설명하면 이해하기 어려운 부분이 많으므로 나쁜 경우를 예로 들겠다.
관련링크
http://lagoons.net/tt/606
http://oldpie.yoonkn.com/cgi-bin/moin.cgi/EffectiveStlSum6#head-575a94524d69097ec2912c4d2175a2885fca67ed
주제에 들어가기에 앞서, 술어구문? 순수 함수? 무슨 뜻인지 알아보자.
술어구문(predicate) 이란?
bool 값을 반환하는 함수를 뜻하는데 번역 단계에서 우리나라말 선택시 조금 어려운 부분이기도 하다. 자세한 내용은 링크 : http://occamsrazr.net/tt/82 에서 아~ 그렇구나 하고 넘기길 바란다.
순수 함수(pure function) 이란?
순수 가상 함수는 알겠는데 이건 참 생소한 말이였다. 이것은 매개변수로 함수의 리턴값이 결정되는 함수를 뜻한다. 대부분의 함수를 이런식으로 정의하여 사용하는데, 클래스로 넘어가면서 .. 순수 함수가 아닌 함수들도 꽤 쓰여진다.
술어 구문 클래스(predicate class) 이란?
클래스의 operator() 가 bool 을 리턴하는 클래스를 뜻한다.
그러다면 왜 술어 구문을 순수 함수로 만들어야 할까?
STL에서 술어 구문이라면, 순수 함수로 만들어야 한다는 이야기로 국한된다.
왜냐하면 알고리즘의 함수객체를 받는 애들 중 술어구문(predicate)를 요구 해서 operator 가 bool 를 리턴하게 만들고, 순수함수 형식을 따르지 않았다고 치자. 그러면 그 결과값을 예측하기 힘들게 되기 때문이다.
그러므로 술어 구문은 순수 함수로 만들자는 거다!
말로만 설명하면 이해하기 어려운 부분이 많으므로 나쁜 경우를 예로 들겠다.
관련링크
http://lagoons.net/tt/606
http://oldpie.yoonkn.com/cgi-bin/moin.cgi/EffectiveStlSum6#head-575a94524d69097ec2912c4d2175a2885fca67ed
'책 정리 > Effective STL' 카테고리의 다른 글
항목 44 : 같은 이름을 가진 것이 있다면 일반 알고리즘 함수보다 멤버 함수가 더 낫다. (0) | 2008.09.07 |
---|---|
항목 43 : 어설프게 손으로 작성한 루프보다는 알고리즘이 더 낫다. (0) | 2008.09.07 |
항목 42 : less<T>는 operator<의 의미임을 꼭 알아두자. (0) | 2008.09.07 |
항목 41 : ptr_fun, mem_fun, mem_fun_ref의 존재에는 분명한 이유가 있다. (0) | 2008.09.07 |
항목 40 : 함수자 클래스는 어댑터 적용이 가능하게(adaptable) 만들자. (0) | 2008.09.05 |
항목 38 : 함수자 클래스는 값으로 전달되도록(pass-by-value) 설계하자. (0) | 2008.09.05 |
항목 37 : 범위 내의 데이터 값을 요약하거나 더하는 데에는 accumilate나 for_each를 사용하자 (1) | 2008.09.05 |
항목 36 : copy_if를 적절히 구현해 사용하자 (0) | 2008.09.03 |
항목 35 : 대소문자를 구분하지 않는 문자열 비교는 mismatch 아니면 lexicographical_compare를 써서 간단히 구현할 수 있다. (0) | 2008.09.03 |
항목 34 : 정렬된 범위에 대해 동작하는 알고리즘이 어떤 것들인지 파악해 두자 (0) | 2008.09.03 |
최근댓글