본문 바로가기

프로그래밍/C++

STL에 대한 단상

J.Strane님의 포스팅에 대한 답변입니다.

잘 읽었습니다. ^^
꽤 공감합니다. 저도 스누씨에서 안융기 형과 이런 내용에 대해서 논의를 해봤기 때문에 STL이 가지는 의미를 한 번 되새김질할 수 있었죠.
http://www.snucse.org/bbs/bbs_view.asp?id=91489&name=02
에서 그 내용에 대해 다뤄보았습니다.
(이 때는 stream에 대한 내용이었습니다만, STL로 번졌습니다.)

전 STL에서 가장 높게 치는 가치는 이것입니다.
- C++ 표준에 포함되어있고, 컴파일러 배포시 자동으로 함께 배포됩니다.
- STL Algorithm은 자신이 컨테이너에서 행할 내용을 명확히 전달합니다.

C++ 표준이기에 많은 사람들이 배우고 알고 있을 가능성이 큽니다.
STL은 잘 알고 쓰지 않으면 위험한 라이브러리이지만,
그에 대한 문서도 잘 나와있으며 Dev Tool 설치시 자동으로 깔리기 때문에
모르는 사람도 공부하라고 설득하기 편합니다.

같은 이유로 Boost는 아직 보류합니다.
아직 표준에 포함되어 있지 않기 때문입니다.
그래서 Boost를 쓰는 것은 지양하고 있습니다.

STL Algorithm의 copy, transform, remove, replace, find, count 등은
그 의미도 명확하고 내가 이 코드로 무엇을 하려는지 한 눈에 보여줍니다.
여러 연계구문을 한다고 해도 for문보다 정리되고 간편하게 보이는 것이 사실이죠.

하지만 STL의 Funtional부분은 과연 가독성 부분에 있어서 좋은지 잘 모르겠습니다.
greater_than<>을 쓰느니 저는 bool GreaterThan()을 만들거나 for문으로 만드는 편이에요.
bind2nd( greater<int>(), 2 );

이 구문이 과연 잘 읽히느냐 하면은.. 글쎄요.
if( v > 2 )
가 훨씬 눈에 들어오지 않나요.

완성도에 있어서는..
STL을 잘 아는 사람들끼리만 프로그래밍을 한다면 괜찮겠지만..
모르는 사람이 쓰기에 STL은 너무도 위험합니다.
당장 erase() 구문이 그 원소들의 delete를 호출해주는지 아닌지 알 수 있는 사람은 그렇게 많지 않습니다.
SmartPointer와 연계한다고 했을 때 erase()가 그 원소의 해제를 해주는지 안 해주는지까지 넘어간다면,
찾기 힘든 분들도 많이 있을 겁니다.

사실 저 역시도 저런 이유가 있었지만
STL은 표준에 들어있다 !  모든 C++을 쓰는 사람은 STL을 쓸 수 있어 !
라는 이유로 계속 STL을 선호하고 배우고 했습니다만
역시나 잘 아는 사람은 그렇게 많지도 않고
최적화를 위해 여러 안전성을 제껴둔 내용은( 즉, 모르는 사람이 쓰기엔 위험한 )
C#이나 Java와 같이 편한 언어를 쓰다보니
불편하기도 하더군요. 디버깅도 불편하고.

그렇다고 해도 스트림만큼은 어느 언어보다 편하다고 생각되는 데다가,
STL의 알고리즘은 기본 제공으로는 훌륭하다고 생각됩니다.
C#을 짜면서 STL의 copy같은 구문을 쓰려니 답답하긴 하더군요.
( 아, begin()과 end()는 없애도 되지 않을까 하는 생각을 하고 있긴 합니다. )

STL은 좋아합니다. :)
하지만 STL의 표현으로 복잡해지는 내용을 굳이 돌려서 STL로 짤 것까지는 없다고 생각해요. 하하.

'프로그래밍 > C++' 카테고리의 다른 글

메시지 처리기  (0) 2009.10.08
My C++ Tips  (4) 2009.02.18
C++ 기본 문제 By Choo  (6) 2007.07.26
임시변수의 범위는 어디까지일까요  (2) 2007.07.13
ANSI와 UTF-8과의 상호 변환  (9) 2007.05.04