#title Left()함수가 더 빠를까? Right()함수가 더 빠를까? [[TableOfContents]] Left()함수가 더 빠를까요? 아니면 Right()함수가 더 빠를까요? 제가 보기에는 Left()함수가 더 빠릅니다. 이유는 문자열을 처리하는 방법에 있습니다. Left()함수는 어떻게 동작할까요? 예를 들어 “ABC”는 개념적으로 다음과 같은 배열에 담겨져 있습니다. (아마도 대부분의 DBMS는 C계열의 언어로 만들어졌을 것입니다.) attachment:left_function01.jpg 즉, 변수 ch는 A의 주소를 가리키고 있고, ‘\0’ 문자를 만날 때까지 읽습니다. (문자열은 이렇게 동작합니다.) Left()함수는 읽어야 하는 문자의 위치에 다음 그림과 같이 ‘\0’을 넣기만 하면 됩니다. attachment:left_function02.jpg 그러면 “AB”만 읽고, ‘\0’을 만났으므로 읽는 것을 멈춥니다. 그러면 Right()함수는 어떻게 구현될까요? 아마도 다음과 같이 구현될 것입니다. 1. A가 들어있는 주소를 시작으로 해서 ‘\0’이 있는 주소를 알아낸다. 2. 주소에서 원하고자 하는 만큼 옮겨간 후 ch가 가리키고 있는 주소값을 바꾼다. 즉, Right(“ABC”, 2)라고 했다면 다음과 같이 ch에 들어있는 포인터의 주소가 옮겨질 것입니다. attachment:left_function03.jpg 정리해보면 Left()함수보다 Right()함수가 문자열의 끝을 찾는 짓거리를 더 해야 한다는 것입니다. 만약 문자열이 조낸 길다면 ‘\0’을 찾기 위해 문자열을 처음부터 조낸 읽어야 한다는 결론이 나옵니다. 그래서 .. 아.. 까먹었다. 떱.. ㅡ,ㅡ;; 암턴.. ‘조엘 온 소프트웨어’라는 책을 보면 문자열의 처음에 문자열의 길이를 저장하는 부분을 추가하는 짓거리를 하면 긴 문자열에 대한 처리시 더욱 빠르게 처리할 수 있다고 합니다. (왜냐하면 포인터는 원하는 위치로 바로 점프가 가능하니까요.) 이 따위 구조로 .. attachment:left_function04.jpg 즉, 변수 ch에 3이라는 값이 들어있는 주소를 가리킨다는 것입니다. ch[0]에는 3이 들어가 있으며, 문자열의 시작의 값은 *(ch+1)이 되는 것입니다. 그러므로 문자열의 끝은 ch+ch[0]+1이 되겠지요. 물론 문자열을 입력할 때 길이를 알아내야 하지만 문자열의 특성상 저장 후에도 문자열의 길이를 알아내야 하는 경우는 매우 빈번하게 일어나기 때문에 긴문자열을 다룰 경우는 이러한 방법이 도움이 될 것입니다. 그러므로 Right(charCol, p) 이고, charCol이 n글자이면, ch + (n + p) – 1 가 원하는 포인터의 위치가 될 것입니다. 이러면 Left()나 Right()나 거의 똑 같은 비용으로 처리가 될 것입니다. 아.. 이야기를 하다 보니 처음에 ‘Left()함수가 더 빠르다’라는 말이 거짓말이 되부럿습니다. 에이.. 젠장~ 내가 그렇지모.. 프로그램 졸라 못 짜는 놈이 이런 야그 할라니 민망합니다. 아.. 생각났습니다. 아까 ‘조엘 온 소프트웨어’에서 나왔던 것이 ‘파스칼 문자열’ 이었던 것 같습니다. (설마 포트란 문자열은 아니겠죠? ㅡ,.ㅡ;;) 책을 회사에 두고 와서 기억력 나쁘다는 것을 광고하게 생겼네요..허헛.. 암턴!! 결론은.. 나도 모르겠네요. ㅎㅎ 내가 소스를 까본 것도 아니고, 소스를 줘도 이해를 못할 테니.. 그쵸? 헤헤..