컨테이터를 직접 구현해보는 것이 의미가 있을까요?

dltkddyd의 이미지

처음 c++에 입문할 때에는 자료구조론이 왜 중요한지 물랐지만 컨테이너를 접하면서 자료구조론의 중요성에 대해 실감하고 있습니다. 컨테이너를 어떻게 구현하느냐에 따라서 엄청난 성능의 차이가 날 수 있다는 것을 컨테이너를 직접 구현해보면서 알게됐으니까요. 그나마 vector는 구현이 제법 간단하기 때문에 구현방식에 따라 엄청난 속도의 차이가 난다는 사실을 알게됐습니다. 뭐 지금도 배우는 단계이기도 하고 자료구조론의 중요성을 뒤늦게 나마 알게돼서 다행이기도 합니다만 어차피 표준에 구현된 것을 그냥 쓰면 되는 것을 이다지 컨테이터 구현에 집착하면서 만드는 것이 시간낭비는 아닐까 하는 걱정이 밀려오기도 합니다. 컨테이너 구현이라는 것이 워낙 재미있는 부분이기도 해서 표준의 구현과 속도 차이를 비교해가면서 만들고 있습니다. 그리고 제가 만들어놓은 svector(표준 vector를 구현해놓은 것)가 표준과 거의 속도 차이가 없이 제대로 작동한다는 것이 위안이 됩니다. 그래도 표준에 있는 것을 이렇게 직접 구현하는 것이 프로그래머의 입장에서 좋은 것일까요? 프로그램 현업에서 일하시는 분 또는 지금 저처럼 배워나가는 단계에 있는 분들께 질문을 드립니다. 과연 이렇게 배워가는 것이 바람직한 것인지? 아니면 표준의 컨테이너를 외워버리는 것이 바람직할까요?

익명 사용자의 이미지

컨테이너 구현은 최적화 문제가 발생할때만 하는게 최선이죠
협업에서는 호환성이 우선입니다

parkon의 이미지

제 생각엔 의미있는 시도로 보입니다.

예전에 제 후배 중 한 녀석이 어셈블리 언어로 에티터 만든다고
한 일년 정도 끙끙거리더니 그 경험을 살려
게임 회사에 게임 엔진 만드는 쪽으로 취쥑하더군요.

저야 뭐 실력도 일천하고 프로그래밍이 전공도 아니고 해서
이런 말씀 드리는 게 주제 넘는 줄은 알지만,
한가지 주제를 잡아 갈 수 있는데 까지 가 보는 건
자신의 능력을 보다 높은 단계에 끌어 올리는 데 있어
무지 효과적이라 생각합니다.

물론 다른 더 중요하고 시급한게 있다면 그 일부터 하는 게 우선이겠지만
시간에 여유가 있다면 제 미천한 생각엔
말씀하신 프로젝트는 꽤 해 볼만한 일로 보이는 군요.

mirheekl의 이미지

결과물의 활용 측면에서는 큰 의미는 없습니다. 대개는 이미 누군가가 해놨기 때문에, 그리고 협업이나 사용자지원 측면에서 이미 알려진 녀석을 쓰는 것이 낫기 때문에.

헌데 개인적인 공부라면 당연히 큰 의미가 있습니다. 구조를 조금이라도 알고 사용하는 것과 그냥 사용하는 것중에 어느 쪽이 프로그래머 입장에서 더 나을지는 명백하므로.

결국 마지막 질문인 " 과연 이렇게 배워가는 것이 바람직한 것인지? 아니면 표준의 컨테이너를 외워버리는 것이 바람직할까요?" 에 대해 답변하자면.. 둘 다.. 라고 하겠습니다.

컨테이너 설계 연습은 당연히 바람직한 일이지만 표준 컨테이너도 공부할수밖에 없는 것.

--

dltkddyd의 이미지

감사합니다.

본인 맞습니다.
인증샷
우헤헤헤... 로 대신합니다.

jic5760의 이미지

저도 덧붙히자면 직접 자신이 해보는건 중요하고, 좋은 것이라고 생각합니다.
직접 구현해 봄으로써 내부 원리를 더 자세히 깨닫게 되고, 프로그래밍 실력도 늘게 되겠죠.
그리고 혹시 나중에 직접 구현해야만 사용할 수 있는 경우에도 문제가 없게 되구요.
저두 왠만하면 라이브러리나 다른 사람이 만들어논것을 그대로 사용하려 하지 않고
직접 만들어 사용합니다. (물론 높은 퍼포먼스가 필요한건 믿을만한 라이브러리를 쓰긴 합니다.)
저두 그 덕에 최근에 실력이 많이 늘었다고 생각합니다. (예전에 멋모르고 그냥 인터넷에서 다 다운받아 사용했을때에 비해...)

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.