Call by Value์™€ Call by Reference

2025. 3. 7. 17:07ยทJava

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹์€ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, Call by Value์™€ Call by Reference๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š”ํ•œ ํ˜ธ์ถœ ๋ฐฉ์‹์œผ๋กœ, ๊ฐ๊ฐ ๊ณ ์œ ํ•œ ํŠน์ง•๊ณผ ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์€ ์ด ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๊ณผ Java์—์„œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

Call by Value

Call by Value๋Š” ํ•จ์ˆ˜๊ฐ€ ์ธ์ž๋กœ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’์˜ ๋ณต์‚ฌ๋ณธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ์ฃผ๋กœ ๊ธฐ๋ณธํ˜• ๋˜๋Š” ์›์‹œ ํƒ€์ž…(primitive type)์˜ ๋ฐ์ดํ„ฐ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ •์ˆ˜๋‚˜ ์‹ค์ˆ˜ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์—ฌ๊ธฐ์— ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. 

๐Ÿ’ซ ์˜ˆ์ œ ์ฝ”๋“œ๋Š” ์ดํ•ด๋ฅผ ์œ„ํ•ด C++๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
#include <iostream>
using namespace std;

void modify(int a) {
	a = 20;
}

int main() {
	int a = 10;
	modify(a);
	cout << a << endl;
}

 

์‹คํ–‰ ๊ฒฐ๊ณผ:

10

 

์œ„ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ƒํƒœ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

๋จผ์ € main ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ์Šคํƒ์— main ํ•จ์ˆ˜์˜ ์ฝœ ์Šคํƒ์ด ์ƒ์„ฑ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ณต๊ฐ„์— main ํ•จ์ˆ˜์—์„œ ์ƒ์„ฑ๋˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ฝœ ์Šคํƒ์ด ์ƒ์„ฑ๋œ ํ›„, int a = 10์ด ์ˆ˜ํ–‰๋˜๋ฉด main์˜ ์ฝœ ์Šคํƒ์— ์ž„์˜์˜ ์ฃผ์†Œ์ธ 0x001 ์ฃผ์†Œ์— 10์ด๋ผ๋Š” ๊ฐ’์„ a์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. 

 

๊ทธ ํ›„, modify(a) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด modify ์ฝœ ์Šคํƒ์ด ์ƒ์„ฑ๋˜๊ณ  ํ•ด๋‹น ์œ„์น˜์˜ ์ง€์—ญ ๋ณ€์ˆ˜ a์— ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ๋„˜๊ฒจ์ค€ main ์ฝœ ์Šคํƒ์— a๊ฐ’์˜ ๋ณต์‚ฌ๋ณธ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. 

 

๊ทธ๋Ÿฐ ํ›„์—, modify ๋ฉ”์„œ๋“œ์—์„œ ๊ฐ’์„ ์ˆ˜์ •ํ•˜์ง€๋งŒ ์ฃผ์†Œ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— main ๋ฉ”์„œ๋“œ์˜ a์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์ด main๊ณผ modify์˜ ๋ณ€์ˆ˜ ์ด๋ฆ„์€ ๊ฐ™์ง€๋งŒ ์„œ๋กœ ๋‹ค๋ฅธ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋”๋ผ๋„ ์›๋ณธ์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 

 

๊ฒฐ๋ก ์ ์œผ๋กœ ์ด๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ์›๋ž˜์˜ ๋ณ€์ˆ˜์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ๊ฐ’์„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠนํžˆ ํฐ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ๋Š” ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

Call by Reference

Call by Reference๋Š” ํ•จ์ˆ˜๊ฐ€ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฐ›์€ ๋ณ€์ˆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์›๋ž˜์˜ ๋ณ€์ˆ˜์˜ ๊ฐ’๋„ ํ•จ๊ป˜ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. 

๐Ÿ’ซ ์˜ˆ์ œ ์ฝ”๋“œ๋Š” ์ดํ•ด๋ฅผ ์œ„ํ•ด C++๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
#include <iostream>
using namespace std;

void modify(int& a) {
	a = 20;
}

int main() {
	int a = 10;
	modify(a);
	cout << a << endl;
}

์‹คํ–‰ ๊ฒฐ๊ณผ:

20

 

Call by Value์™€ ๋‹ฌ๋ฆฌ ์ด๋ฒˆ์—๋Š” ์›๋ณธ ๋ณ€์ˆ˜์˜ ๊ฐ’์ด 10์—์„œ 20์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ด๊ฒŒ ๊ฐ€๋Šฅํ•œ ๊ฑด์ง€ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ณผ์ •์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

์œ„ ์ฝ”๋“œ์—์„œ int a = 10์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

๊ทธ ํ›„, modify(a)๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด modify(int &a)๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ int& a๋Š” ์ธ์ž๋กœ ๋„˜๊ฒจ์ค€ ๋ณ€์ˆ˜์˜ ์ฐธ์กฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋กœ ์ธํ•ด modify์˜ a๋Š” ์ฃผ์†Œ๋ฅผ ํ• ๋‹น๋ฐ›์ง€ ์•Š๊ณ  main์˜ a๋ฅผ ์ง์ ‘ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋กœ ์ธํ•ด modify ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋”๋ผ๋„ a๋Š” main์— ์žˆ๋Š” a๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๊ฐ’์— ์˜ํ–ฅ์„ ๋ผ์น˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

์ •๋ฆฌํ•ด ๋ณด์ž๋ฉด Call by Value๋Š” ํ•จ์ˆ˜์— ์ธ์ž๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์›๋ž˜์˜ ๊ฐ’์˜ ๋ณต์‚ฌ๋ณธ์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ด๊ณ , Call by Reference๋Š” ๋ณ€์ˆ˜์˜ ์ฐธ์กฐ๋ฅผ ์ง์ ‘ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. 

 

Java์—์„œ์˜ Call by Value์™€ Call by Reference

์ง€๊ธˆ๊นŒ์ง€๋Š” C++๋ฅผ ํ†ตํ•ด Call by Value์™€ Call by Reference๊ฐ€ ๊ฐ๊ฐ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์‚ดํŽด๋ดค์Šต๋‹ˆ๋‹ค. C++์—์„œ๋Š” ๊ฐ’ ์ž์ฒด๋ฅผ ๋ณต์‚ฌํ•ด์„œ ์ „๋‹ฌํ•˜๋Š” Call by Value์™€ ์›๋ณธ ๊ฐ’์„ ์ง์ ‘ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” Call by Reference๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. 

 

๊ทธ๋ ‡๋‹ค๋ฉด Java์—์„œ๋Š” ์–ด๋–จ๊นŒ์š”? 

 

Java์—์„œ ๊ฐ์ฒด๋ฅผ ๋„˜๊ธฐ๋ฉด Call by Reference์ผ๊นŒ? 

์‚ฌ์‹ค Java๋Š” C++๊ณผ๋Š” ๋‹ค๋ฅธ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹์ด ์•ฝ๊ฐ„ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๋กœ Java์—๋Š” Call by Reference๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. 

 

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด Java์—์„œ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•  ๋•Œ Call by Reference์ฒ˜๋Ÿผ ๋™์ž‘ํ•œ๋‹ค๊ณ  ์ฐฉ๊ฐํ•˜๋Š”๋ฐ, ์‚ฌ์‹ค Java๋Š” ์˜ค์ง Call by Value๋งŒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์ฐธ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์ด์œ ๋Š” Java์˜ ๊ฐ์ฒด ๊ด€๋ฆฌ ๋ฐฉ์‹๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 

 

์ด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝ๋˜๋Š” ์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

class Person {
	String name;
	
	public Person(String name) {
		this.name = name;
	}
}

public class Main {
	public static void main(String[] args) {
		Person p = new Person("Jwooo");
		modify(p);
		System.out.println(p.name);
	}
	
	static void modify(Person p) {
		p.name = "woooJ";
	}
}

์‹คํ–‰ ๊ฒฐ๊ณผ:

woooJ

 

Person p = new Person("Jwooo")๋ฅผ ์‹คํ–‰ํ•œ ์ƒํƒœ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ๋Š” ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

ํ•ด๋‹น ๋ฌธ์žฅ์ด ์‹คํ–‰๋˜๋ฉด, ํž™ ๋ฉ”๋ชจ๋ฆฌ์— Person ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , main์˜ ์ง€์—ญ ๋ณ€์ˆ˜ p(0x001)์—๋Š” ํ•ด๋‹น ๊ฐ์ฒด์˜ ์ฃผ์†Œ ๊ฐ’(0x002)์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. 

 

๊ทธ ํ›„, modify ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ p(0x003)๋Š” main์˜ p(0x001)๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ์ฃผ์†Œ ๊ฐ’(0x002)์„ ๋ณต์‚ฌํ•ด์„œ ์ „๋‹ฌ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ modify ๋‚ด๋ถ€์˜ p(0x003)๋„ ๊ฐ™์€ Person ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

modify ๋‚ด๋ถ€์—์„œ๋Š” p.name์„ ์ˆ˜์ •ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์˜ p(0x003)๋Š” ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์œผ๋ฏ€๋กœ, p.name์„ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜๋ฉด ํž™ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๊ฐ์ฒด์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” main์˜ p(0x001)์™€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ํ–ฅ์„ ๋ฐ›๊ฒŒ ๋˜๊ณ  main์—์„œ p.name์„ ์ถœ๋ ฅํ•˜๊ฒŒ ๋˜๋ฉด woooJ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

 

์ด๋ ‡๊ฒŒ ์ธ์ˆ˜๋กœ ๋„˜์–ด์˜จ ๋ณ€์ˆ˜์˜ ์ฐธ์กฐ๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ์ฒด์˜ ์ฐธ์กฐ ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ๋„˜๊ธฐ๋Š” ๋ฐฉ์‹์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

 

ํ•˜์ง€๋งŒ ์•„์ง ์˜๋ฌธ์ ์ด ๋‚จ์•„์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์ œ๋ฅผ ๋ณด๊ณ  "๊ฒฐ๊ตญ ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์—ˆ์œผ๋‹ˆ Call by Reference๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ๊ฐ€?"๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๊ฐ์ฒด์˜ ์ฐธ์กฐ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ์ž…๋‹ˆ๋‹ค. 

 

๋งŒ์•ฝ Java๊ฐ€ Call by Reference๋ผ๋ฉด, ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋กœ ์žฌํ• ๋‹นํ•˜๋ฉด ์›๋ณธ ๊ฐ์ฒด๋„ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

class Person {
	String name;
	
	public Person(String name) {
		this.name = name;
	}
}

public class Main {
	public static void main(String[] args) {
		Person p = new Person("Jwooo");
		modify(p);
		System.out.println(p.name);
	}
	
	static void modify(Person p) {
		p = new Person("woooJ");
	}
}

์‹คํ–‰ ๊ฒฐ๊ณผ:

Jwooo

 

์œ„ ์ฝ”๋“œ์—์„œ๋Š” modify ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ p = new Person("woooJ")๋กœ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ์ง€๋งŒ, main์—์„œ ์ถœ๋ ฅ๋œ ๊ฐ’์€ ์—ฌ์ „ํžˆ Jwooo์ž…๋‹ˆ๋‹ค. 

 

์ด์œ ๋Š” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. Java์—์„œ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ๊ฐ์ฒด์˜ ์ฐธ์กฐ ๊ฐ’์„ ๋ณต์‚ฌํ•ด์„œ ์ „๋‹ฌํ•˜๋ฏ€๋กœ, ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์žฌํ• ๋‹นํ•ด๋„ ์›๋ž˜์˜ ์ฐธ์กฐ์™€๋Š” ๋ฌด๊ด€ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 

 

์ฆ‰, modify ๋‚ด๋ถ€์—์„œ p๊ฐ€ ์ƒˆ๋กœ์šด Person ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋˜๋”๋ผ๋„, ์ด๋Š” modify์˜ ์ง€์—ญ ๋ณ€์ˆ˜ p(0x003)์ด ๋ฐ”๋€ ๊ฒƒ์ด์ง€ main์˜ p(0x001)์™€๋Š” ์•„๋ฌด๋Ÿฐ ๊ด€๊ณ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Java๋Š” Call by Reference๊ฐ€ ์•„๋‹ˆ๋ผ "๊ฐ์ฒด์˜ ์ฐธ์กฐ ๊ฐ’"์„ Call by Value ๋ฐฉ์‹์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

 

Java๋Š” ์™œ Call by Reference๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์„๊นŒ? 

C++๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ง์ ‘ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ํฌ์ธํ„ฐ์™€ ์ฐธ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ Call by Reference๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Java๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ํฌ์ธํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๋ชจ๋“  ๊ฐ’์„ Call by Value๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์„ ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

์ด๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•˜์—ฌ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ํ†ตํ•œ ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜์—ฌ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ํฌ์ธํ„ฐ๋ฅผ ์ง์ ‘ ๋‹ค๋ฃจ๋ฉด์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์„ค๊ณ„ ์ฒ ํ•™ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 

 

๊ฒฐ๋ก 

Java์—์„œ ๊ฐ์ฒด๋ฅผ ๋„˜๊ธธ ๋•Œ ์ฐธ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๊ฐ์ฒด์˜ ์ฐธ์กฐ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์›๋ณธ ๊ฐ์ฒด์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€๋งŒ, ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๋ฉด ์›๋ณธ ๊ฐ์ฒด์—๋Š” ๋ฌด๊ด€ํ•˜๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 

 

์ด๋Ÿฌํ•œ ํŠน์ง• ๋•Œ๋ฌธ์—, Java๋Š” Call by Reference๊ฐ€ ์•„๋‹ˆ๋ผ Call by Value์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

'Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Java์˜ GC  (0) 2025.03.02
ConcurrentHashMap์€ ์–ด๋–ป๊ฒŒ ๋™์‹œ์„ฑ์„ ๋ณด์žฅํ• ๊นŒ?  (0) 2024.10.28
CompletableFuture์™€ ForkJoinPool  (0) 2024.08.08
'Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • Java์˜ GC
  • ConcurrentHashMap์€ ์–ด๋–ป๊ฒŒ ๋™์‹œ์„ฑ์„ ๋ณด์žฅํ• ๊นŒ?
  • CompletableFuture์™€ ForkJoinPool
jwooo๐ŸŒฑ
jwooo๐ŸŒฑ
jwooo's log ์ž…๋‹ˆ๋‹ค.
  • jwooo๐ŸŒฑ
    jwooo's log
    jwooo๐ŸŒฑ
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (12)
      • Java (4)
      • Project (6)
      • Computer Science (2)
        • Network (1)
        • Security (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
jwooo๐ŸŒฑ
Call by Value์™€ Call by Reference
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”