ํจ์ ํธ์ถ ๋ฐฉ์์๋ ๊ฐํธ์ถ ๋ฐฉ์๊ณผ ์ฐธ์กฐํธ์ถ ๋ฐฉ์์ด ์์ต๋๋ค. ์ด ๋ ๋ฐฉ์์ ๋ฐ์ดํฐ ์ ๋ฌ์ ๋ฐฉ๋ฒ๊ณผ ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
๊ฐ ๋ฐฉ์์ ํน์ง์ ์ ํํ ์ดํดํ๊ณ , ์ธ์ ์ด๋ค ๋ฐฉ์์ ์ ํํด์ผํ ์ง ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๊ฐ ํธ์ถ ๋ฐฉ์ (Call by Value)
C์ธ์ด์์ ๊ฐ ํธ์ถ ๋ฐฉ์(Call by Value)์ ํจ์ ํธ์ถ ์ ์ค์ธ์(Argument)์ ๊ฐ์ ํ์ ์ธ์(Parameter)์ ๋ณต์ฌํ์ฌ ์ ๋ฌํ๋ ๋ฐฉ์์ ๋๋ค. ์ด ๋ฐฉ์์ ์ค์ธ์์ ํ์ ์ธ์๊ฐ ์๋ก ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ์ฉํ๋ฏ๋ก, ํจ์ ๋ด๋ถ์์ ํ์ ์ธ์์ ๊ฐ์ด ๋ณ๊ฒฝ๋์ด๋ ์ค์ธ์์ ๊ฐ์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
๐ ๊ฐ ํธ์ถ ๋ฐฉ์์ ํน์ง
- ๊ฐ ๋ณต์ฌ
- ์ค์ธ์์ ๊ฐ์ด ํ์ ์ธ์๋ก ๋ณต์ฌ๋ฉ๋๋ค.
- ์ค์ธ์์ ํ์ ์ธ์๋ ์๋ก ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
- ๋
๋ฆฝ์ฑ ์ ์ง
- ํจ์ ๋ด๋ถ์์ ํ์ ์ธ์์ ๊ฐ์ด ๋ณ๊ฒฝ๋์ด๋, ์ค์ธ์์ ๊ฐ์ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
- ์์ ์ฑ
- ํจ์๊ฐ ์ค์ธ์์ ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ ๊ทผํ์ง ์์ผ๋ฏ๋ก, ์ค์ธ์์ ๊ฐ์ด ๋ณดํธ๋ฉ๋๋ค.
1. ์ฝ๋ ์์ : ๊ฐ ํธ์ถ ๋ฐฉ์์ ๊ธฐ๋ณธ ๋์
#include <stdio.h>
void callValue(int b);
int main(void)
{
int a = 1;
callValue(a);
printf("์ค์ธ์ a์ ์ถ๋ ฅ : %d\n", a);
return 0;
}
void callValue(int b)
{
b = b + 3;
printf("ํ์์ธ์ b์ ์ถ๋ ฅ: %d\n", b);
}
์ถ๋ ฅ๊ฒฐ๊ณผ:
ํ์์ธ์ b์ ์ถ๋ ฅ: 4
์ค์ธ์ a์ ์ถ๋ ฅ : 1
๐ซง ์ฝ๋์ค๋ช :
- main() ํจ์์์ ๋ณ์ a์ ๊ฐ์ 1๋ก ์ด๊ธฐํ๋ฉ๋๋ค.
- callValue(a)๋ฅผ ํธ์ถํ๋ฉด์ a์ ๊ฐ์ด ํ์ ์ธ์ b๋ก ๋ณต์ฌ๋ฉ๋๋ค.
- b๋ a์ ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฅ๋ฉ๋๋ค.
- ํจ์ ๋ด๋ถ์์ b๊ฐ ๋ณ๊ฒฝ๋์ด๋, a์ ๊ฐ์ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.
- ์ด๋ ๊ฐ ํธ์ถ ๋ฐฉ์์ ๋ ๋ฆฝ์ฑ ๋๋ฌธ์ ๋๋ค.
2. ์ฝ๋ ์์ : ๋ ๊ฐ ๋ฐ๊พธ๊ธฐ (Swap ํจ์)
#include <stdio.h>
void Swap(int a, int b);
int main(void)
{
int x = 10, y = 20;
printf("์ด๊ธฐ๊ฐ x = %d, y = %d\n", x, y);
Swap(x, y);
printf("ํจ์ ๋ฐ์์ ๋ณ๊ฒฝ ํ x = %d, y = %d\n", x, y);
return 0;
}
void Swap(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
printf("ํจ์ ์์์ ๋ณ๊ฒฝ ํ a = %d, b = %d\n", a, b);
}
์ถ๋ ฅ๊ฒฐ๊ณผ:
์ด๊ธฐ๊ฐ x = 10, y = 20
ํจ์ ์์์ ๋ณ๊ฒฝ ํ a = 20, b = 10
ํจ์ ๋ฐ์์ ๋ณ๊ฒฝ ํ x = 10, y = 20
๐ซง ์ฝ๋์ค๋ช :
- main()์์ x์ y์ ๊ฐ์ ๊ฐ๊ฐ 10๊ณผ 20์ผ๋ก ์ด๊ธฐํ๋ฉ๋๋ค.
- Swap(x, y)๋ฅผ ํธ์ถํ๋ฉด์, x์ y์ ๊ฐ์ด ๊ฐ๊ฐ ํ์ ์ธ์ a์ b๋ก ๋ณต์ฌ๋ฉ๋๋ค.
- a์ b๋ x์ y์๋ ๋ณ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ง๋๋ค.
- ํจ์ ๋ด๋ถ์์ a์ b์ ๊ฐ์ ๊ตํํ์ง๋ง, ์ด๋ x์ y์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
โญ ๋ณด์ถฉ ์ค๋ช
1. ํจ์ ํธ์ถ์: ๊ฐ ๋ณต์ฌ
- ์ค๋งค๊ฐ๋ณ์ x์ y์ ๊ฐ(10, 20)์ด ํ์ ๋งค๊ฐ๋ณ์ a์ b์ ๋ณต์ฌ ๋ฉ๋๋ค.
- ์ค๋งค๊ฐ๋ณ์ x, y์ ํ์ ๋งค๊ฐ๋ณ์ a, b๋ ์๋ก ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
- a ์ b๋ x์ y์ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๋ฏ๋ก, ํจ์ ๋ด๋ถ์์ a์ b์ ๊ฐ์ ๋ณ๊ฒฝํด๋ x์ y๋ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.
2. ํจ์ ํธ์ถ ํ: ๋ ๋ฆฝ์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
- ํจ์ ๋ด๋ถ์์ ํ์ ๋งค๊ฐ๋ณ์ a ์ b์ ๊ฐ์ด ๊ตํ๋ฉ๋๋ค.
- ๊ทธ๋ฌ๋ ์ด ๋ณ๊ฒฝ์ ํ์ ๋งค๊ฐ๋ณ์ ๋ด๋ถ์์๋ง ์ ํจํ๋ฉฐ, ์ค๋งค๊ฐ๋ณ์(x, y)๋ ์ํฅ์ ๋ฐ์ง์์ต๋๋ค.
- ํจ์ ํธ์ถ ํ์๋ x์ y๋ ์ฌ์ ํ ์๋ ๊ฐ(10, 20)์ ์ ์งํฉ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก
๊ฐ ํธ์ถ ๋ฐฉ์์ ํจ์ ๋ด๋ถ์์ ์ค๋งค๊ฐ๋ณ์์ ๋ ๋ฆฝ์ฑ์ ์ ์งํ๋ฉฐ, ์์ ํ๊ฒ ๊ฐ์ ์ฒ๋ฆฌํ ์ ์๋ ์ ๋ฌ ๋ฐฉ์์ ๋๋ค. ํ์ง๋ง ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ํฐ ๊ฒฝ์ฐ์๋ ๋นํจ์จ์ ์ผ ์ ์์ผ๋ฏ๋ก, ์ฐธ์กฐํธ์ถ(Pass by Reference)์ด๋ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์ํฉ์ ๋ฐ๋ผ ๊ณ ๋ คํด์ผํฉ๋๋ค.
์ฐธ์กฐ ํธ์ถ ๋ฐฉ์ (Call by Reference)
C์ธ์ด์์ ์ฐธ์กฐ ํธ์ถ ๋ฐฉ์์ ํจ์ ํธ์ถ ์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์ฌ์ฉ๋๋ ์ฃผ์๊ฐ์ ์ ๋ฌํ์ฌ, ํจ์ ๋ด๋ถ์์ ์ค๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ๋ณ๊ฒฝํ ์ ์๋ ๋ฐฉ๋ฒ์
๋๋ค.
์ด๋ ๊ฐ ํธ์ถ ๋ฐฉ์๊ณผ ๋ฌ๋ฆฌ, ํ์ ๋งค๊ฐ๋ณ์๊ฐ ์ค๋งค๊ฐ๋ณ์์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ํจ์ ํธ์ถ ํ์๋ ์ค๋งค๊ฐ๋ณ์์ ๊ฐ์ด ๋ณ๊ฒฝ๋ฉ๋๋ค.
๐ ์ฐธ์กฐ ํธ์ถ ๋ฐฉ์์ ํน์ง
- ์ฃผ์๊ฐ ์ ๋ฌ
- ํจ์ ํธ์ถ ์ ์ค๋งค๊ฐ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ํ์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ฉ๋๋ค.
- ํ์ ๋งค๊ฐ๋ณ์๋ ์ค๋งค๊ฐ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐธ์กฐํ๊ฒ ๋ฉ๋๋ค.
- ์ค๋งค๊ฐ๋ณ์์ ์ง์ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ํฌ์ธํฐ๋ฅผ ํตํด ์ค๋งค๊ฐ๋ณ์์ ๊ฐ์ ์ง์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- ํจ์จ์ฑ
- ๊ฐ ํธ์ถ ๋ฐฉ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ์ง๋ง, ์ฐธ์กฐ ํธ์ถ ๋ฐฉ์์ ์ฃผ์๊ฐ๋ง ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ์ ์๊ฐ์ ์ ์ฝํ ์ ์์ต๋๋ค.
1. ์ฝ๋ ์์ : ์ฐธ์กฐ ํธ์ถ ๋ฐฉ์
#include <stdio.h>
// ์ฐธ์กฐ ํธ์ถ ๋ฐฉ์
void callReference(int* b);
int main(void)
{
int a = 1;
callReference(&a); // ๋ณ์ a์ ์ฃผ์๊ฐ์ ์ ๋ฌ
printf("์ค์ธ์ a์ ์ถ๋ ฅ: %d\n", a);
return 0;
}
void callReference(int* b)
{
*b = *b + 3; // ํ์ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ์ค๋งค๊ฐ๋ณ์์ ๊ฐ์ ์ง์ ๋ณ๊ฒฝ
printf("ํ์์ธ์ *b์ ์ถ๋ ฅ: %d\n", *b);
}
์ถ๋ ฅ๊ฒฐ๊ณผ:
ํ์์ธ์ *b์ ์ถ๋ ฅ: 4
์ค์ธ์ a์ ์ถ๋ ฅ: 4
๐ซง ์ฝ๋์ค๋ช :
- ํจ์ ํธ์ถ ์
- main()์์ ๋ณ์ a์ ์ฃผ์๊ฐ(&a)์ด callReference() ํจ์์ ๋งค๊ฐ๋ณ์ b๋ก ์ ๋ฌ๋ฉ๋๋ค.
- ์ด์ b๋ a์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์(0x100)๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
- ํจ์ ๋ด๋ถ์์
- *b๋ฅผ ํตํด b๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๊ฐ์ ์ง์ ๋ณ๊ฒฝํฉ๋๋ค.
- ์ด ๋ณ๊ฒฝ์ ์ค๋งค๊ฐ๋ณ์ a์ ๊ฐ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
- ํจ์ ํธ์ถ ํ
- ํจ์ ๋ด๋ถ์์ ๋ณ๊ฒฝ๋ ๊ฐ์ด ์ค๋งค๋ณ์ a์ ๋ฐ์๋ฉ๋๋ค.
โญ ๋ณด์ถฉ ์ค๋ช
- ํจ์ ํธ์ถ ์
- ๋ณ์ a๋ ๊ฐ 1์ ์ ์ฅํ๊ณ ์์ผ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ 0x100์ ๋๋ค.
- ํจ์ ํธ์ถ ์ a์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ 0x100์ด ํ์ ๋งค๊ฐ๋ณ์ b๋ก ์ ๋ฌ๋ฉ๋๋ค.
- ํ์ ๋งค๊ฐ๋ณ์ b
- ํ์ ๋งค๊ฐ๋ณ์ b๋ ์ค๋งค๊ฐ๋ณ์ a์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ์ ๋๋ค.
- ์ฆ, b๋ 0x100์ ๊ฐ๋ฆฌํค๋ฉฐ, *b๋ฅผ ํตํด a์ ๊ฐ์ ์ฐธ์กฐํ๊ณ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- ๊ฐ ๋ณ๊ฒฝ ๊ณผ์
- *b = *b +3 ๋ช ๋ น์ 0x100 ๋ฉ๋ชจ๋ฆฌ ์์น์ ์ ์ฅ๋ ๊ฐ์ 1 + 3 = 4 ๋ก ๋ณ๊ฒฝ ํฉ๋๋ค.
- ๋ฐ๋ผ์ ํจ์ ํธ์ถ ํ์๋ ์ค๋งค๊ฐ๋ณ์ a์ ๊ฐ์ด ๋ณ๊ฒฝ๋์ด, ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ a = 4 ๊ฐ ๋ฉ๋๋ค.
๐ ์ฐธ์กฐ ํธ์ถ ๋ฐฉ์์ ์ฅ๋จ์
์ฅ์
- ํจ์จ์ฑ: ๋ฐ์ดํฐ ๋ณต์ฌ ์์ด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ง ์ ๋ฌํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์๊ฐ์ ์ ์ฝํ ์ ์์ต๋๋ค.
- ์ค๋งค๊ฐ๋ณ์ ๋ณ๊ฒฝ ๊ฐ๋ฅ: ํจ์ ๋ด๋ถ์์ ์ค๋งค๊ฐ๋ณ์์ ๊ฐ์ ์ง์ ์์ ํ ์ ์์ต๋๋ค.
๋จ์
- ๋ฐ์ดํฐ ์์ ์ฑ ๋ฌธ์ : ํจ์ ๋ด๋ถ์์ ์ค๋งค๊ฐ๋ณ์๋ฅผ ์์ ํ ์ ์๊ธฐ ๋๋ฌธ์, ์ค์๋ก ๋ฐ์ดํฐ๋ฅผ ์์์ํฌ ์ํ์ด ์์ต๋๋ค.
- ๊ฐ๋ ์ฑ ์ ํ: ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฝ๋๊ฐ ๋ณต์กํด์ง ์ ์์ต๋๋ค.
2. ์ฐธ์กฐ ํธ์ถ ๋ฐฉ์๊ณผ ๊ฐ ํธ์ถ ๋ฐฉ์์ ์ฐจ์ด
ํญ๋ชฉ | ๊ฐ ํธ์ถ ๋ฐฉ์ | ์ฐธ์กฐ ํธ์ถ ๋ฐฉ์ |
์ ๋ฌ ๋ด์ฉ | ๊ฐ ์์ฒด๋ฅผ ๋ณต์ฌํ์ฌ ์ ๋ฌ | ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ๋ฌ |
์ค๋งค๊ฐ๋ณ์ ๋ณ๊ฒฝ์ฌ๋ถ | ํจ์ ๋ด๋ถ์์ ์ค๋งค๊ฐ๋ณ์ ๊ฐ ๋ณ๊ฒฝ ๋ถ๊ฐ | ํจ์ ๋ด๋ถ์์ ์ค๋งค๊ฐ๋ณ์ ๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ |
ํจ์จ์ฑ | ๋ฐ์ดํฐ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ณต์ฌ ๋น์ฉ ๋ฐ์ | ์ฃผ์๊ฐ๋ง ์ ๋นํ๋ฏ๋ก ํจ์จ์ |
์์ ์ฑ | ์ค๋งค๊ฐ๋ณ์์ ๊ฐ์ด ๋ณดํธ๋จ | ํจ์ ๋ด๋ถ์์ ์ค๋งค๊ฐ๋ณ์๊ฐ ์์ ๋ ์ํ์ด ์์ |
๊ฒฐ๋ก ์ ์ผ๋ก
์ฐธ์กฐ ํธ์ถ ๋ฐฉ์๊ณผ ๊ฐ ํธ์ถ ๋ฐฉ์์ ํจ์ ํธ์ถ ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ์๋ก ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ๊ฐ๊ฐ์ ํน์ง๊ณผ ์ฉ๋๊ฐ ๋ช ํํ ๊ตฌ๋ถ๋ฉ๋๋ค.
๊ฐ ํธ์ถ ๋ฐฉ์์ ์ค๋งค๊ฐ๋ณ์์ ๋ ๋ฆฝ์ฑ์ ์ ์งํ๋ฉฐ ์์ ํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์์ง๋ง, ํจ์ ๋ด๋ถ์์ ์ค๋งค๊ฐ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ ์๋ ์์ต๋๋ค.
๋ฐ๋ฉด, ์ฐธ์กฐ ํธ์ถ ๋ฐฉ์์ ํฌ์ธํฐ๋ฅผ ํตํด ์ค๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ์ฐธ์กฐํ์ฌ ๊ฐ์ ์์ ํ ์ ์์ผ๋ฏ๋ก, ํจ์ ํธ์ถ ํ์๋ ๋ณ๊ฒฝ๋ ๊ฒฐ๊ณผ๋ฅผ ์ ์งํด์ผ ํ ๋ ์ ์ฉํฉ๋๋ค.
'C์ธ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C์ธ์ด] void๋ ์๋ฃํ์ผ๊น? (0) | 2025.01.04 |
---|---|
[C์ธ์ด] *ํฌ์ธํฐ์ **ํฌ์ธํฐ ์ด์คํฌ์ธํฐ ๊ฐ๋ (0) | 2025.01.02 |
[C์ธ์ด] ๋ฐฐ์ดํ์ ์ธ์๋ ํฌ์ธํฐํ์ผ๋ก ๋ฐ๋๋ค. (0) | 2024.12.31 |
[C์ธ์ด] ๋ฐฐ์ด ์ด๋ฆ์ ํฌ์ธํฐ์ฒ๋ผ, *ํฌ์ธํฐ๋ฅผ ๋ฐฐ์ด์ฒ๋ผ ์ฌ์ฉํ๊ธฐ (0) | 2024.12.30 |
[C#] .NET ํ๋ ์์ํฌ์ C# ํ๋ก๊ทธ๋๋ฐ์ ์ดํด - ์์ํ๊ธฐ (0) | 2024.04.24 |