[완료] STL에 대한 조언 부탁드립니다.

azura4의 이미지

얼마전 STL의 유용성에 대한 이런 대화를 했습니다.

- 예전 VS 2003에서 개발할 때 사용해봤는데 안전성에 문제가 있더라, 안 쓰는게 낫다.

- 구체적으로 어떤 문제인가?

- STL의 특징상, 내부적으로 복사를 많이 하는데 그 때문에 메모리가 부족하면 프로그램이 죽어버리더라

- 메모리 부족에 대비해서 프로그램을 작성하면 되지 않은가? 그리고 STLPort같은 최신 버전의 라이브러리를

사용하면 기타 안전성에도 큰 문제가 없을 것이다.

- 상용 프로그램에서 정말 믿고 사용할 수 있는지, STL의 안전성에 대한 객관적인 자료를 알려달라.

음... 간단히 요약하자면 이런 요지의 대화였습니다.

그런데 사실, 제가 STL 사용법 정도나 알지, 그 구현이나 문제점등에 대해서는 잘 모릅니다.

그래서 지금 책과 웹을 통해서 그점에 대해서 공부는 하고 있습니다만, 내공이 딸려서 이렇게 조언을 구합니다.

위에서 지적된 문제가 정말 STL 사용에 문제가 된다고 할 수 있는지, 안전성에 대한 객관적인 자료에 대해서는

어떻게 이야기하는 것이 좋을지 대해서 조언 부탁드립니다.

fox9의 이미지

위의 문제는 STL 자체의 문제가 아니라 Visual Studio의 STL 구현의 버그입니다.
최신의 VS.net의 경우는 문제가 없고 기본으로 제공하는 것이 아닌 STL의 다른 라이브러리 등을 사용하신다면 해결되는 문제입니다.

아래 사이트들이 도움이 될듯 합니다.

VS의 기본 STL 외의 또다른 STL 구현 라이브러리
http://www.stlport.org/

VC++ 6.0의 STL 버그픽스하는 법
http://www.dinkumware.com/vc_fixes.html

imyejin의 이미지

아니 메모리가 복사 때문에 모자라면 포인터나 핸들을 저장하면 될 일이지, 이건 STL 때문이 아니라 다른 걸 사용해도 똑같은 문제인데 무식이 드러나네요. 그리고 C++에서 STL보다 잘 만들어 놓고 검증이 많이 된 라이브러리도 드물죠. 대부분의 경우 STLport 새로 깔 것도 없습니다. Visual C++ 도 최근 버전은 상태가 많이 좋아졌다고 알고 있는데요. STL을 피하는 합리적인 이유라면 아주 오래 된 상용 유닉스 시스템에다가도 포팅을 해야 하는 경우가 있어 오래 된 컴파일러를 지원해야 하는 경우에 호환성 문제 때문에 피하거니 그런 일은 있을 수 있어도, 한 가지 종류의 컴파일를 사용해서 결과를 내놓는 그런 개발이라면 문제가 될 이유가 없어요. 무슨 무식한 말인지 모르겠군요.

제 생각에는, 사실은 무식해서 그런 게 아니라 새로운 시도를 해 보기 싫어서 핑계를 대는 것 뿐입니다. 무슨 기술이나 라이브러리를 도입하든지 자기가 안 해 본 걸 하는 거에 대해서 남이 하자 그러면 거부반응을 보이는 사람이 대부분입니다. 왜냐하면 아무리 좋은 도구라도 익숙하지 않은 도구를 처음 손에 잡으면 실수하게 마련이거든요. 익숙치 않은 도구로 작업을 하다 보면 자기가 실수해 놓고도 그 도구 탓을 하게 도는 게 사람 심리입니다. 그리고 또 괜히 다른 사람 때문에 자기 일이 늘어나는 게 싫은 것도 있고요. 아마 그분도 자기가 주도했으면 좋아라 할 건데 다른 사람이 하자 그러니까 귀찮아서 거부감을 갖는 것 뿐입니다. 주로 C에만 많이 익숙하고 C++은 그냥 클래스만 쓰는 분들이 더더욱 이런 반응을 많이 보일 겁니다. 일단 템플릿 에러 나오는 것만 보면 기겁하거든요.

하지만 귀찮다고 좋은 기술을 안 쓰면 발전이 없습니다. 잠깐 귀찮더라도 그 단계를 뛰어넘어야 발전이 있고 생산성이 향상되고 결과물이 안정되고 그러는 거죠. 그래서 회사 분위기가 중요한데, 일주일이나 격주로라도 관련 개발자들끼리 회사에서 쓰는 기술과 관련된 세미나를 정기적으로 하고 늘 새로운 것을 발전적으로 도입할 공감대를 형성해야 합니다. 근데 우리나라에서 이정도로 여유 있는 회사라면 IT회사로서는 사실 엄청 좋은 회사겠죠? -_-;;

하여간 바쁘시더라도 짬을 내서 STL이랑 C++스터디를 주도해서 일단 스터디나 세미나 같은 것부터 하시면서, STL의 편리함을 맛보도록 해서 알아서 쓰게 만들던가, 아니면 같이 세미나 하던 팀장이 매료되거나 설득되어서 높은 사람이 강제로 다 쓰게 만들던가 그렇게 해야겠죠. 그 전에는 덜 중요한 주변 모듈, 보조 유틸리티, 혹은 주로 혼자서 작업하는 코드라든가 그런 곳에 하나 둘씩 심어 나가세요.

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

azura4의 이미지

내공이나 말빨이나 모두 부족해서 쉽지 않네요.

조언해주신대로 노력해봐야겠습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.