진부한 용어 관련 얘기.

suh1978의 이미지

일요일에 친구와 커피한잔 하고 있는중에 나온 얘기입니다.
하나는 함수등에 인자값으로 넘겨줄때 타입이 value type 혹은
reference type이라는 얘기인데, 이때 reference 라는 표현 대신
address type라는 표현일 맞는것 같다는 것입니다.

의미상으로 큰 차이 없는것 같은데 대부분의 서적들을 봐도 address type이라는 표현은 전 못본거 같아서요.

다른 하나는 잊을만 하면 등장하는 포인터와 배열이 같냐 혹은 다르냐는 것입니다.
제 생각에는 아무리 다르게 생각하려 해도 포인터와 배열은 같은것이고,
단지 프로그래머 입장에서 사용하는 정도에 따라 구분지어 사용할수 있으며, 단지 전체집합 U가 포인터라면 U의 부분집합 A가 배열이라고 생각합니다.
친구말은 어디가도 이런 얘기는 끝이 없다면 논쟁을 피하면서
제 생각과 다른것이 있는거 같기는 한데, 정확하게 말은 안하니 답답하네요.

여러분들의 생각은 어떤가 해서요.

espereto의 이미지

제 생각은...

1. 일반적으로 reference type의 구현을 address를 위주로 구현하기는 합니다만, 그렇다고 address type이라고 부를 수는 없다고 봅니다. address type이라는 용어가 있는지 모르겠지만... 일단, reference라는 의미는 참조를 의미하는 데, 거기에는 특정한 데이터 형태에 대한 참조라는 의미가 있다고 생각합니다. 즉, int type의 reference type.. 과 같이... 그러나 address는 그냥 주소일 뿐 type은 없습니다. 궂이 표현하면 void가 되겠죠.

구현상으로는 address를 참조하게 하는 거지만, 의미상으로는 address를 참조하라는 의미는 아니라고 봅니다.

결국, 구현을 address로 하지 않고 다른 방법으로 할 수 있다면 그 방법으로 구현할 수도 있다는 의미입니다. 어떻게든 "참조"만 할 수 있으면 됩니다.

(자바에서 어떻게 구현되어 동작하는 지 알 수 있으면 이해하기가 좀 더 쉬울까요?)

2. 포인터와 배열... 구현과 사용이 비슷하거나 같을 순 있지만, 개념은 완전히 다릅니다. 배열은 특정한 데이터를 1/2/3...n차원의 블럭으로 묶어서 사용하도록 해 주지만, 포인터는 그냥 포인터일 뿐입니다.

그리고 구현상으로 그 둘이 유사하게 사용이 가능할 뿐입니다.

대략 이 정도로 생각하고 있습니다.

뭐 적으면서도 어렵고 뭔 소린가 했지만, 적어놓고서도 대체 이게 뭔 소린가... 싶긴 합니다. :?

추상화 된 개념이 있고, 실제 구현 방법이 있는데, 이 둘을 헷갈려하시는 것 같습니다. 추상화 된 개념은 그 개념 자체이고, 구현은 그 추상화 개념을 구현하는 방법일 뿐이라고 생각하시면 어떨까 싶습니다.

doldori의 이미지

address type은 저도 처음 들어보는 용어라서 그에 대한 답을 드리기는 어렵고...
포인터와 배열의 차이를 말씀드리면

T[n] : T형 개체로 이루어지며 연속된 메모리 공간을 차지한다. 원소의 형 T와
원소의 개수 n으로 정의된다.

T* : T형 개체를 가리키기 위한 형이다. 참조하는 원소의 형 T로 정의된다.

이 둘을 같다고 착각하는 이유는 많은 경우 배열 이름이 포인터로 자동 변환되기
때문입니다. 그러나 변환이 가능할 뿐 같은 것은 아닙니다. 예를 들어 int가
double로 자동 변환되기는 하지만 이 둘을 같다고 하는 사람은 없겠지요.

void f(char* p, double d)
{
    // p is a pointer here no matter what the actual argument is.
    // d is a double here no matter what the actual argument is.
}

void g(void)
{
    char a[10];
    int i;
    f(a, i);
}
ssehoony의 이미지

1. address type
http://www.cinsk.org/cfaqs/html/node6.html#SECTION00630000000000000000
위의 4.11 을 참고하세요.(이건 2번 질문의 부분적 답도 있습니다.)

2. 배열과 포인터
http://www.cinsk.org/cfaqs/html/node8.html#SECTION00810000000000000000
6.3 을 참고하세요.

댓글 달기

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