자료형을 지정해 주는 이유?

rlj1202의 이미지

블로그에 올라온 내용만 보면 "컴퓨터는 정수, 실수 등을 알아보지 못하기 때문에 이를 알려주는 역할을 한다"라고만 나와있습니다. 근데 어떻게 알려준다는 건가요?

아래는 제 생각입니다.

  1. 컴파일시만 사용한다?

  2. 제가 생각해본 것 중에 가장 합당하다고 생각한 것인데요, 예를들어 3 + 1.5 같은 연산은 사람은 그냥 정수부분끼리, 소수부분끼리 더하면 되겠지만 컴퓨터에서 연산을 하려면 3이라는 정수를 실수로 변환하고 실수끼리의 연산을 하는 기계어(뭐...ADD_FLOAT 이렇게 생긴?)를 실행해야 하므로 어떤 기계어로 변환해야 맞는지에 대한 정보를 컴퓨터가 아닌 "컴파일러"에게 알려주는 역할이라고 생각했습니다.

  3. 자료형과 값을 함께 저장한다?

    /li> 예를들면 1.5를 변수에 저장했다면 실수라는 정보와 1.5라는 실수를 부동소수점 등 특정 표현방식으로 표현한 값을 함께 저장한다는 생각입니다. 왜 이런생각을 하게 되었는가 하면 자바같은 언어를 보면 instanceof 처럼 자료형의 타입에 관련된 연산자들이 존재하는데 이는 자료형에 대한 정보까지 같이 저장해야만 가능한 것이 아닌가 해서 생각해 보게 되었습니다.

  4. 언어마다 다르다?

익명 사용자의 이미지

언어마다 다르고 한 언어에서도 타입에 따라 다릅니다.

C 에서는 tagged union 같은 방식으로 사용자가 직접 runtime type infomation을 구현할 수는 있습니다만, 언어 차원에서 지원하지는 않습니다. 다시 말해 C에서는 타입은 오로지 컴파일 타임에만 사용됩니다.

반면에 많은 dynamic language에서는 모든 데이터에 대해서 타입에 대한 정보를 런타임에도 유지합니다. 사실 이런 언어들에서는 "런타임에만" 타입을 알 수 있는 경우가 많습니다.

섞여 있는 언어도 많습니다. 자바에서는 primitive type (int, double, ... 즉 class가 아닌 타입)에 대해서는 reflection을 사용할 수 없습니다. 즉 primitive type에 대해서는 컴파일 타임에만 타입 정보를 사용합니다. 런타임에는 타입에 대한 정보가 없습니다. C++도 마찬가지로 primitive type에 대해서는 RTTI(runtime type infomation)를 사용할 수 없습니다.

rlj1202의 이미지

늦게 답글을 봤네요! 답변 감사합니다. 평소 궁금증이 풀렸습니다.

댓글 달기

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