๐Ÿ” ์ž๋ฐ”๋Š” Call By Value์ผ๊นŒ, Call By Reference์ผ๊นŒ

์—…๋ฐ์ดํŠธ:
1 ๋ถ„ ์†Œ์š”

๐Ÿง  ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋ฐฉ์‹์—๋Š” ์–ด๋–ค ๊ฒŒ ์žˆ์„๊นŒ?

โœ… ๊ฐ’์— ์˜ํ•œ ํ˜ธ์ถœ (Call By Value)

  • ๊ฐ’ ์ž์ฒด๋ฅผ ๋ณต์‚ฌํ•ด์„œ ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด๋„ ์›๋ณธ์€ ๋ฐ”๋€Œ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ž๋ฐ”์˜ ์›์‹œ ํƒ€์ž…(int, boolean, double ๋“ฑ)์€ ์ด ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

โœ… ์ฐธ์กฐ์— ์˜ํ•œ ํ˜ธ์ถœ (Call By Reference)

  • ์ฐธ์กฐ(์ฃผ์†Œ)๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์—์„œ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์›๋ณธ ๊ฐ์ฒด๋„ ๊ฐ™์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.
  • C++์—์„œ๋Š” ์ฐธ์กฐ์ž๋ฅผ ํ†ตํ•ด ์ด ๋ฐฉ์‹์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

โ˜• ์ž๋ฐ”๋Š” ์–ด๋–ค ๋ฐฉ์‹?

์ž๋ฐ”๋Š” ์˜ค์ง Call By Value๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

โœ… ๊ทธ๋Ÿฐ๋ฐ ์ฐธ์กฐํ˜• ๊ฐ์ฒด ๋„˜๊ธฐ๋ฉด ๋ฐ”๋€Œ์ง€ ์•Š๋‚˜์š”?

public void foo() {
    Student student = new Student();
    var(student); // student ๊ฐ์ฒด ๋„˜๊น€
}

public void var(Student student) {
    student.study(); // ์›๋ณธ ๊ฐ์ฒด์— ์˜ํ–ฅ ์คŒ
}
  • ์ด ์ฝ”๋“œ๋Š” Call By Reference์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ
  • ์ž๋ฐ”๋Š” student๋ผ๋Š” ์ฐธ์กฐ๊ฐ’ ์ž์ฒด๋ฅผ ๋ณต์‚ฌํ•ด์„œ ๋„˜๊ธด ๊ฒƒ
  • ๊ฒฐ๊ตญ, ๊ฐ’์„ ๋ณต์‚ฌํ•œ ๊ฒƒ = Call By Value

๐Ÿ“ฆ ์Šคํƒ๊ณผ ํž™

๐Ÿ—ƒ๏ธ ๋ณ€์ˆ˜ ์ €์žฅ ๊ตฌ์กฐ

  • ์›์‹œ ํƒ€์ž…: ๋ณ€์ˆ˜ + ๊ฐ’ ๋ชจ๋‘ ์Šคํƒ์— ์ €์žฅ
  • ์ฐธ์กฐ ํƒ€์ž…: ๋ณ€์ˆ˜(์Šคํƒ) + ๊ฐ์ฒด(ํž™)์— ์ €์žฅ๋จ
๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ โ†’ ์Šคํƒ์— ๋ณต์‚ฌ๋œ ์ฐธ์กฐ๊ฐ’๋งŒ ์ „๋‹ฌ

alt


๐Ÿ”„ ์ •๋ฆฌ

ํƒ€์ž… ํ˜ธ์ถœ ๋ฐฉ์‹ ์›๋ณธ ์˜ํ–ฅ ์—ฌ๋ถ€ ์„ค๋ช…
์›์‹œ ํƒ€์ž… Call By Value โŒ ์˜ํ–ฅ ์—†์Œ ๊ฐ’๋งŒ ๋ณต์‚ฌ๋จ
์ฐธ์กฐ ํƒ€์ž… Call By Value โœ… ๋‚ด๋ถ€ ๊ฐ’ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ์ฐธ์กฐ๊ฐ’์ด ๋ณต์‚ฌ๋จ, ๊ฐ์ฒด๋Š” ๊ฐ™์Œ

๐Ÿ’ก ๊ฒฐ๋ก 

  • ์ž๋ฐ”๋Š” ๋ฌด์กฐ๊ฑด Call By Value
  • ์ฐธ์กฐํ˜•๋„ โ€œ์ฐธ์กฐ๊ฐ’โ€์„ ๋ณต์‚ฌํ•ด์„œ ๋„˜๊ธฐ๋Š” ๊ฒƒ
  • ์›๋ณธ ๊ฐ์ฒด ์ž์ฒด๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๊ฐ™์€ ๊ฐ์ฒด์˜ ํ•„๋“œ๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ

๐Ÿ“˜ ํ—ท๊ฐˆ๋ฆฐ๋‹ค๋ฉด?
โ€œ์ž๋ฐ”๋Š” Call By Reference๊ฐ€ ์—†๋‹ค.
์ฐธ์กฐํ˜•์€ ์ฐธ์กฐ๊ฐ’์„ ๋ณต์‚ฌํ•ด์„œ ๋„˜๊ธฐ๋Š” Call By Value๋‹ค.โ€

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ