저건 실제의 CBV/CBR 개념에 대한 논의가 아니라, '레퍼런스의 값' (C/C++의 포인터에 해당)이라는 가상의 개념을 생각한 다음 CBV라고 '간주'하겠다는 얘기잖어. 그건 Java를 설계한 사람들이 그렇게 생각하고 설계하고 구현했을지는 몰라도 실제의 CBV/CBR 구분의 측면에서 말하자면 의미 없는 이야기임. 예를 들면 C++에서 class와 struct가 같은 역할을 한다고 해서 일반적으로 '클래스와 구조체는 같은 개념이다!'라고 말하는 것은 개소리듯이 (C++ 안에서만 통하는 얘기), 저것도 Java 우덜식 정의 안에서만 통하는 얘기
밍고스사랑해(mingosudaisuki)2020-10-31 18:35
답글
실제의 CBR이라는건 학계에서 명확하게 구분하고있다는 뜻임? 나는 학계쪽은 잘 모르기도 하고 전공수업도 들은적이 없어서
익명(106.102)2020-10-31 18:36
답글
저런 식으로 말하면 사실상 모든 언어에 대해서 '레퍼런스의 값'이라는 개념을 생각하면 모든 CBR은 CBV라고 할 수 있는데, 이게 얼마나 무의미한 논리냐면, '레퍼런스'라는 개념은 필연적으로 참조를 거슬러올라가야 원래 대상이 나오지만, '값'은 그 자체라는 점에서 '값에 대한 참조'는 일종의 항등원과 같다고 할 수 있는데, 관념적으로 말하자면 '레퍼런스의 값' = '레퍼런스 × 값' = '레퍼런스'이기 때문에 '레퍼런스의 값'을 생각해서 CBR이 아니라 CBV라고 하는 건 4 = 4 + 0이니까 4는 0으로 끝난다는 거랑 같은 개소리임
밍고스사랑해(mingosudaisuki)2020-10-31 18:37
답글
조금 더 C/C++ 개념을 이용해서 알기 쉽게 설명해보면
밍고스사랑해(mingosudaisuki)2020-10-31 18:37
답글
int a, *p;가 있을 때 p를 통해서 p가 가리키는 대상을 참조하려면 *p라고 쓰지만 a를 통해서 a가 가리키는 대상을 참조하려면 그냥 a라고 쓰잖아? 이런 의미에서 값은 값 그 자체이고, 덧셈에서 0을 더하거나 곱셈에서 1을 곱할 때 의미가 없는 것처럼, '레퍼런스의 값'이라는 말은 매우 애미뒤진 말임. 굳이 말하자면, a는 "" (빈 문자열) + "a" (변수 이름)이니까 밸류고, *p는 "*" + "p"니까 레퍼런스인데, '레퍼런스의 값'이라는 개념을 도입하면 *p는 "" + "*" + "p"니까 a랑 똑같이 ""로 시작해서 밸류라는 애미뒤진 개소리가 되어버림. 물론 내부 구현의 측면에서는 이런게 다 의미가 있지만
밍고스사랑해(mingosudaisuki)2020-10-31 18:40
답글
언어 설계를 추상적으로 바라보는 경우 C/C++처럼 실제 포인터값을 언어 내에서 얻어내거나 바꿔버릴 수 있는 특수한 경우가 아닌 이상 레퍼런스의 밸류 운운하는건 그냥 진짜 애미뒤진 개소리라고밖에 할말이 없지
밍고스사랑해(mingosudaisuki)2020-10-31 18:41
답글
그럼 그냥 면접에서 이거물어보는새끼는 싸대기쳐야겠다 ㅇㅇ
익명(106.102)2020-10-31 18:43
답글
ㅇㅇ '레퍼런스의 밸류'라는 말이 애초에 이상하잖아. 레퍼런스의 밸류를 복사하기 때문에 CBR이 아니라면, 밸류의 밸류를 복사하면 CBV가 아니게 되는 것인가? '~의 밸류'는 +0이나 *1처럼 그냥 떼어버려도 상관이 없는 건데 말이야.
밍고스사랑해(mingosudaisuki)2020-10-31 18:44
답글
이런 논의가 의미있게 진행되려면 질문자와 답변자 모두 자기가 생각하는 CBV/CBR의 정의를 먼저 구체화하고 들어가야함
밍고스사랑해(mingosudaisuki)2020-10-31 18:45
답글
너의 말이 일리가 충분히있다고보는데 문제는 결국 이것도 어느정도 주장인거같은데, 물론 이런 개념정하는게 수학처럼 완벽하게 공리에서 쌓아올린게 아니니까 어느정도의 합의를 거칠수밖에없는데 제대로 합의된 용어인지 알수가없네
익명(106.102)2020-10-31 18:46
답글
지금 프로그래밍언어론 관련 교재를 가지고있지 않아서 정확히 확인해볼 수는 없는데, 아마 상식적으로 생각하는 많은 사람들의 입장이 나랑 비슷할듯. 왜냐면 용어 자체가 "call by" 또는 "pass by"기 때문에 함수를 호출하는 바로 그 시점 (실질매개변수가 형식매개변수와 묶여지는 시점)에서 무슨 일이 발생하는가에 초점을 두고 생각하는게 논리적으로 맞잖아
밍고스사랑해(mingosudaisuki)2020-10-31 18:49
답글
말하자면 그 시점에 value의 copy가 일어나야 (예를 들면 C/C++의 class나 struct가 복사되는 동작) CBV라고 할 수 있고, 그 시점에 copy가 일어나지 않으면 CBR이라고 봐야지
밍고스사랑해(mingosudaisuki)2020-10-31 18:49
러스트하자 - 디씨 앱
꼬마세라(heartleth)2020-10-31 18:34
답글
러스트는 콜바밸인가요 콜바레인가요
익명(106.102)2020-10-31 18:35
답글
copy 트레이트 안달면 콜바레고 달면 콜바밸임 - 디씨 앱
꼬마세라(heartleth)2020-10-31 18:35
가슴 정장 검스 오피스
익명(1.240)2020-10-31 18:38
레퍼런스값을 복사합니다 라는 논리면 모든 언어는 CBV가 되는거아님?
익명(175.197)2020-10-31 18:38
답글
골ㅡ든 정답
밍고스사랑해(mingosudaisuki)2020-10-31 18:41
답글
C언어 포인터를 CBV로 보라는 이유는 C에서 포인터 개념을 헷갈려하는사람들을 위한 조언정도가 아닐까 싶은디...
익명(175.197)2020-10-31 18:44
답글
그럼 애초에 CBV/CBR 따지는게 의미가없다는거아니냐
익명(211.36)2020-10-31 18:44
답글
175.197// 맞음 211.36// 아님
밍고스사랑해(mingosudaisuki)2020-10-31 18:45
답글
CBV/CBR이 의미없을 수 있는건 경우에 따라 맞는데, 예를 들어 C 같은 경우 변수에서 레퍼런스를 얻어내는 과정 (&)과 함수 호출을 각각 완전히 독립적으로 따로따로 수행할 수 있기 때문에 전부 CBV라고 해도 맞는데
밍고스사랑해(mingosudaisuki)2020-10-31 18:47
답글
여러 언어를 늘어놓고 비교하는 이론적/추상적인 관점을 생각한다면 모든 언어가 그런 식으로 깔끔하게 설명되지는 않기도 하고 (특히 아주 옛날옛적 CBN 같은 이상한 것들의 존재 때문에)
ㅇㅇ
https://stackoverflow.com/questions/4811851/pass-by-value-in-java/4811886
여기보면 고슬링도 콜바밸이라했다는데 큰 의미없는듯
저건 실제의 CBV/CBR 개념에 대한 논의가 아니라, '레퍼런스의 값' (C/C++의 포인터에 해당)이라는 가상의 개념을 생각한 다음 CBV라고 '간주'하겠다는 얘기잖어. 그건 Java를 설계한 사람들이 그렇게 생각하고 설계하고 구현했을지는 몰라도 실제의 CBV/CBR 구분의 측면에서 말하자면 의미 없는 이야기임. 예를 들면 C++에서 class와 struct가 같은 역할을 한다고 해서 일반적으로 '클래스와 구조체는 같은 개념이다!'라고 말하는 것은 개소리듯이 (C++ 안에서만 통하는 얘기), 저것도 Java 우덜식 정의 안에서만 통하는 얘기
실제의 CBR이라는건 학계에서 명확하게 구분하고있다는 뜻임? 나는 학계쪽은 잘 모르기도 하고 전공수업도 들은적이 없어서
저런 식으로 말하면 사실상 모든 언어에 대해서 '레퍼런스의 값'이라는 개념을 생각하면 모든 CBR은 CBV라고 할 수 있는데, 이게 얼마나 무의미한 논리냐면, '레퍼런스'라는 개념은 필연적으로 참조를 거슬러올라가야 원래 대상이 나오지만, '값'은 그 자체라는 점에서 '값에 대한 참조'는 일종의 항등원과 같다고 할 수 있는데, 관념적으로 말하자면 '레퍼런스의 값' = '레퍼런스 × 값' = '레퍼런스'이기 때문에 '레퍼런스의 값'을 생각해서 CBR이 아니라 CBV라고 하는 건 4 = 4 + 0이니까 4는 0으로 끝난다는 거랑 같은 개소리임
조금 더 C/C++ 개념을 이용해서 알기 쉽게 설명해보면
int a, *p;가 있을 때 p를 통해서 p가 가리키는 대상을 참조하려면 *p라고 쓰지만 a를 통해서 a가 가리키는 대상을 참조하려면 그냥 a라고 쓰잖아? 이런 의미에서 값은 값 그 자체이고, 덧셈에서 0을 더하거나 곱셈에서 1을 곱할 때 의미가 없는 것처럼, '레퍼런스의 값'이라는 말은 매우 애미뒤진 말임. 굳이 말하자면, a는 "" (빈 문자열) + "a" (변수 이름)이니까 밸류고, *p는 "*" + "p"니까 레퍼런스인데, '레퍼런스의 값'이라는 개념을 도입하면 *p는 "" + "*" + "p"니까 a랑 똑같이 ""로 시작해서 밸류라는 애미뒤진 개소리가 되어버림. 물론 내부 구현의 측면에서는 이런게 다 의미가 있지만
언어 설계를 추상적으로 바라보는 경우 C/C++처럼 실제 포인터값을 언어 내에서 얻어내거나 바꿔버릴 수 있는 특수한 경우가 아닌 이상 레퍼런스의 밸류 운운하는건 그냥 진짜 애미뒤진 개소리라고밖에 할말이 없지
그럼 그냥 면접에서 이거물어보는새끼는 싸대기쳐야겠다 ㅇㅇ
ㅇㅇ '레퍼런스의 밸류'라는 말이 애초에 이상하잖아. 레퍼런스의 밸류를 복사하기 때문에 CBR이 아니라면, 밸류의 밸류를 복사하면 CBV가 아니게 되는 것인가? '~의 밸류'는 +0이나 *1처럼 그냥 떼어버려도 상관이 없는 건데 말이야.
이런 논의가 의미있게 진행되려면 질문자와 답변자 모두 자기가 생각하는 CBV/CBR의 정의를 먼저 구체화하고 들어가야함
너의 말이 일리가 충분히있다고보는데 문제는 결국 이것도 어느정도 주장인거같은데, 물론 이런 개념정하는게 수학처럼 완벽하게 공리에서 쌓아올린게 아니니까 어느정도의 합의를 거칠수밖에없는데 제대로 합의된 용어인지 알수가없네
지금 프로그래밍언어론 관련 교재를 가지고있지 않아서 정확히 확인해볼 수는 없는데, 아마 상식적으로 생각하는 많은 사람들의 입장이 나랑 비슷할듯. 왜냐면 용어 자체가 "call by" 또는 "pass by"기 때문에 함수를 호출하는 바로 그 시점 (실질매개변수가 형식매개변수와 묶여지는 시점)에서 무슨 일이 발생하는가에 초점을 두고 생각하는게 논리적으로 맞잖아
말하자면 그 시점에 value의 copy가 일어나야 (예를 들면 C/C++의 class나 struct가 복사되는 동작) CBV라고 할 수 있고, 그 시점에 copy가 일어나지 않으면 CBR이라고 봐야지
러스트하자 - 디씨 앱
러스트는 콜바밸인가요 콜바레인가요
copy 트레이트 안달면 콜바레고 달면 콜바밸임 - 디씨 앱
가슴 정장 검스 오피스
레퍼런스값을 복사합니다 라는 논리면 모든 언어는 CBV가 되는거아님?
골ㅡ든 정답
C언어 포인터를 CBV로 보라는 이유는 C에서 포인터 개념을 헷갈려하는사람들을 위한 조언정도가 아닐까 싶은디...
그럼 애초에 CBV/CBR 따지는게 의미가없다는거아니냐
175.197// 맞음 211.36// 아님
CBV/CBR이 의미없을 수 있는건 경우에 따라 맞는데, 예를 들어 C 같은 경우 변수에서 레퍼런스를 얻어내는 과정 (&)과 함수 호출을 각각 완전히 독립적으로 따로따로 수행할 수 있기 때문에 전부 CBV라고 해도 맞는데
여러 언어를 늘어놓고 비교하는 이론적/추상적인 관점을 생각한다면 모든 언어가 그런 식으로 깔끔하게 설명되지는 않기도 하고 (특히 아주 옛날옛적 CBN 같은 이상한 것들의 존재 때문에)