c++에서 template와 추상화의 차이점과 자세한 기능이 궁금합니다.

tlwkrgoqhfrk의 이미지

c++에서 template와 추상화의 차이점이 궁금합니다.

template는 자료형을 정해놓지 않고 가져다 쓰면서 자료형을 정하여 쓰는 것으로 알고 있습니다.
template를 쓰면 코드메모리를 좀 더 적게 사용가능 하다고 알고 있습니다. 하지만 template를 쓰면 컴파일 후 자료형이 정해지므로 속도가 느려지는 것으로 알고 있는데요.

이것 외에도 template의 기능적 측면과 장,단점이 있나요? 인터넷에 검색을 해보아도 이것 이상을 찾을 수가 없었습니다.

추상화는 정의부가 없는 가상함수를 클래스로 만들고 다른 클래스에서 가져가 정의부만 생성해 사용하는 것으로 알고있습니다.
추상화를 했을 때 이점이 어떤 것이 있나요?
한개의 큰 틀을 만들어 놓고 사용하기 때문에 메모리 측면에서는 좋을 것 같다는 것은 짐작했습니다. 다른 장점은 무엇이 있나요?

template와 추상화의 문법적 차이 말고 기능적인 부분에서 큰 차이점을 모르겠습니다. 메모리적 부분과 속도 부분에서 큰차이점이 있나요? 실무적인 관점에서 사용시 어떤 경우에 각각을 사용하나요?

ifree의 이미지

template는 자료형을 정해놓지 않고 가져다 쓰면서 자료형을 정하여 쓰는 것으로 알고 있습니다.
-> 자료형 자체가 매개변수처럼 쓰여서 이를 바탕으로 컴파일러가 추론하여 결정합니다.
template를 쓰면 코드메모리를 좀 더 적게 사용가능 하다고 알고 있습니다.
-> 함수 오버로딩도 필요한 함수만 정의한다면 템플렛 대비 코드 메모리가 많이 들 것으로 생각되지 않습니다.
template를 쓰면 컴파일 후 자료형이 정해지므로 속도가 느려지는 것...
-> 컴파일 후가 아니고 컴파일 시 자료형이 정해지고 속도도 느려지지도 않습니다.

template와 추상화는 정적 다형성과 동적 다형성을 말씀하시는 듯 한데, 두 기법은 완전히 다른 개념입니다.

직접 코드를 작성해 보는 것이 최선!

익명 사용자의 이미지

두 개념이 많이 겹친다고 생각했는데 제 공부가 부족했던 것 같습니다.
좀 더 공부하고 알아보도록 하겠습니다.
답변해주셔서 감사합니다.

jick의 이미지

> template를 쓰면 코드메모리를 좀 더 적게 사용가능 하다고 알고 있습니다.

아닙니다. template를 쓰면 같은 일을 하는 코드를 타입에 따라 여러 번 컴파일하게 되므로 일반적으로 코드 크기가 커집니다.

> 하지만 template를 쓰면 컴파일 후 자료형이 정해지므로 속도가 느려지는 것으로 알고 있는데요.

slee0303 님이 말씀하셨듯이 컴파일할 때 자료형이 정해지고, (제대로 짜면) 가장 빠른 속도를 낼 수 있는 방법입니다.

==========

지금 보기에는 장단점에 너무 연연하지 말고 그냥 각각을 연습해 보시는 게 나을 것 같습니다. template와 abstract class는 전혀 성질이 다른 테크닉이고, 적용할 수 있는 범위도 별로 겹치지 않습니다.

그리고 실무적인 관점에서 보면, 그런 거 안 쓰고 간단하게 짤 수 있으면 그게 최고입니다. 코드는 읽고 유지보수하기 쉬운 코드가 좋습니다.

익명 사용자의 이미지

template가 가장 빠른 속도를 낼 수 있는 방법이라는 점이 놀랍습니다.

좀 더 많은 공부를 하여 스스로 알아내도록 하겠습니다.
혹시 책을 추천 해주실 수 있으신가요?
윤성우 열혈 C++ 책을 보았는데 좀 부족한 점이 있는 것 같습니다.

댓글 달기

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