Java에서는 클래스를 리턴할 수도 있으니, 리턴값이 하나라고 보긴 좀... 뭐, C 에서도 스트럭쳐를 리턴할 수 있잖아요.
C++에서도 클래스를 리턴할 수 있으니 패스.
그리고, 왜 리턴값이 하나인지는 ASM을 공부해보시면 아시게 될겁니다.
2006.11.09 17:03:31 (*.85.37.56)
bard
일종의 전통(?)이라고도 할 수 있고, 기본적으로 함수라는 건 수학에서 빌려온 개념인지라, 하나의 입력 값에 대한 하나의 해를 뱉어내는(?) 블랙박스 성격이라서 그렇다고 보면 될듯합니다. 물론 LUA 같은 일부 스크립트 언어에서는 다수의 리턴값을 허용하기도 합니다.
2006.11.09 17:04:37 (*.78.64.79)
음..
컴파일러 단에서 eax 같은 레지스터에 리턴값을 리턴하게 convention으로 정해놓은 언어들이 많이 있습니다.
레지스터에 담는게 제일 빠르니까요. 레지스터 개수가 많으니 여러개 레지스터에 담아도 상관 없지만 옛날부터 eax 하나에만 리턴값을 넣기로 정해놔서 그 이후로 계속 쓰이는 것 같습니다. (아마도 옛날에는 레지스터 개수가 부족해서 ? )
- arm asm 인가 gas 에서 함수 호출할 때 파라메터 개수 4개까지는 레지스터에 담고, 다섯개째부터는 스택에 푸쉬하는 것과 같이, 단지 이렇게 하도록 정의했기 때문에 그렇게 쓰이고 있습니다.
- 정의를 어떻게 하느냐에 따라 리턴 값을 스택에 푸쉬할 수도 있겠죠. 역시 어떻게 정의하느냐에 따라 달라지는 문제 -0-
처음에 우리 컴파일러는 eax 와 ebx 에 리턴값을 넣겠다고 정의했으면 리턴값을 두개 리턴했을 수도 있을겁니다. 하지만 이게 의미 없는게, 말씀하신 것처럼 스트럭처를 이용하면 eax 하나만 리턴해도 여러개의 값을 리턴할 수 있으니까요.
스크립트 언어들은 tuple 이나 list, table 등등을 이용하여 여러개를 리턴할 수 있게 했죠. 안으로 파고들면 결국 리턴값을 하나일텐데 말이죠.
2006.11.09 17:05:34 (*.85.37.56)
bard
그리고.. 다수의 리턴값을 갖는 함수의 용도가 그리 많지 않다라는 것도 한 이유가 될 수 있겠지요.
자바같은 경우에는 컨테이너를 통하여 call by reference 방식으로 다수의 리턴값 처리를 할 수 있으며, 물론 컨테이너 혹은 구조체 형태의 클래스 인스턴스를 리턴하여 처리를 할 수 도 있습니다. C++이나 C의 경우에는 포인터, 참조형, 컨테이너, 클래스 인스턴스 리턴등 다양한 방법을 통하여 다수의 리턴값을 처리할 수 있겠지요.
2006.11.09 17:10:14 (*.102.122.211)
안군
위에 답변하신 분들을 보니......
저 너무 불친절한거 같아요 ㅠㅠ
2006.11.09 18:01:43 (*.28.55.118)
랩하는좀비
지금도 한 없이 초보이지만 예전에 return a, b; 가 왜 안되나 하면서 하루 종일 고민했었던 적이 있지요(...)
2006.11.10 13:02:14 (*.229.115.87)
김치황인종
위에 bard 님이 쓰신 "수학의 블랙박스" 개념이 정답입니다.
중, 고등학교 시간에 배우죠? 하나의 입력에 대해 하나의 결과만 사상되는 것이 함수라고요
2006.11.14 04:45:45 (*.214.52.162)
레이닝레테
bard님이 적어두신 답이 정답이네요.. 수학적 의미에서의 함수는 출력값은 무조건 하나여야 합니다. 왜냐하면, 함수라는 것이 어떤 공식을 뜻하는 것이 아니고..
정확히 말하면 '값으로 치환될 수 있는 어떤 것'이라는 의미이기 때문입니다. 즉, 함수와 값의 구분이 없는거죠.
입력값이 몇개든 그런건 관계없습니다. 오로지 출력값만 하나면 됩니다. ^^
예컨데 plus x y = x + y 라고 한다면 입력값은 x y 2개이고 출력값은 plus 라는 x+y의 결과값이 됩니다.
그리고 아시겠지만, 포인터를 리턴하면 반환값이 몇개든 쓸 수 있어요.
스크립트 언어에서 튜플,리스트, 혹은 여러 자료구조로 반환값을 여러개 리턴하는 것도 같은 이치구요..
어떻게 보면, c언어에서 가장 흔히 쓰이는 void형은 함수가 아니죠. 리턴값이 없으니까요. ^^;;
2006.11.14 21:02:16 (*.10.162.33)
DDt
사실 어떤 수학함수는 해가 여러개인데 말입죠 -_-;;;
2006.11.16 23:21:58 (*.229.115.34)
김치황인종
해가 여러개인 '함수' 는 존재할 수 없는데.. 정의역, 공역, 치역의 개념을 다시 공부하시는게 좋을듯
C++에서도 클래스를 리턴할 수 있으니 패스.
그리고, 왜 리턴값이 하나인지는 ASM을 공부해보시면 아시게 될겁니다.