'ref' ???!!!

μœ„λ¦°μ΄Β·2025λ…„ 9μ›” 15일

πŸ”Ή C# ref ν‚€μ›Œλ“œ μ™„μ „ μ‰½κ²Œ μ΄ν•΄ν•˜κΈ°

C#을 κ³΅λΆ€ν•˜λ‹€ 보면 refλΌλŠ” ν‚€μ›Œλ“œλ₯Ό 자주 보게 λ©λ‹ˆλ‹€.
μ²˜μŒμ—” β€œμ΄κ²Œ λŒ€μ²΄ 뭐지?” μ‹Άμ§€λ§Œ, 사싀 κ°œλ…μ€ μ•„μ£Ό κ°„λ‹¨ν•©λ‹ˆλ‹€.


πŸ“‹ 1. 일반 λ³€μˆ˜ 전달은 β€œλ³΅μ‚¬λ³Έβ€ μ£ΌλŠ” 것

C#μ—μ„œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ, κΈ°λ³Έμ μœΌλ‘œλŠ” λ³€μˆ˜ 값이 λ³΅μ‚¬λΌμ„œ μ „λ‹¬λ©λ‹ˆλ‹€.

void DoubleValue(int x)
{
    x = x * 2;
}

int num = 10;
DoubleValue(num);
Console.WriteLine(num); // πŸ‘‰ 좜λ ₯: 10
  • num(10)을 ν•¨μˆ˜μ— μ£Όλ©΄, ν•¨μˆ˜λŠ” 볡사본을 λ°›μŠ΅λ‹ˆλ‹€.
  • ν•¨μˆ˜ μ•ˆμ—μ„œ xλ₯Ό 20으둜 바꿔도, μ›λž˜ num은 κ·ΈλŒ€λ‘œ 10μ΄μ—μš”.

πŸ‘‰ λΉ„μœ : μΉœκ΅¬μ—κ²Œ λ¬Έμ„œ 볡사본을 μ€¬λ”λ‹ˆ, μΉœκ΅¬κ°€ λ‚™μ„œλ₯Ό 해도 λ‚΄ 원본은 μ•ˆ λ°”λ€ŒλŠ” 것과 κ°™μ•„μš”.


πŸ“ 2. refλ₯Ό μ“°λ©΄ β€œμ›λ³Έβ€μ„ μ£ΌλŠ” 것

이제 refλ₯Ό μ¨λ΄…μ‹œλ‹€.

void DoubleValue(ref int x)
{
    x = x * 2;
}

int num = 10;
DoubleValue(ref num);
Console.WriteLine(num); // πŸ‘‰ 좜λ ₯: 20
  • μ΄λ²ˆμ—” ν•¨μˆ˜κ°€ num의 μ‹€μ œ 원본을 λ°›μŠ΅λ‹ˆλ‹€.
  • ν•¨μˆ˜ μ•ˆμ—μ„œ λ°”κΎΈλ©΄ 원본도 같이 λ°”λ€λ‹ˆλ‹€.

πŸ‘‰ λΉ„μœ : μΉœκ΅¬μ—κ²Œ λ‚΄ 원본 λ¬Έμ„œλ₯Ό 직접 μ€¬λ”λ‹ˆ, μΉœκ΅¬κ°€ λ‚™μ„œν•˜λ©΄ λ‚΄ λ¬Έμ„œμ—λ„ λ‚™μ„œκ°€ λ‚¨λŠ” 것과 κ°™μ•„μš”.


🟒 3. ref μ‚¬μš©ν•  λ•Œ κ·œμΉ™

  1. ν•¨μˆ˜ μ •μ˜ν•  λ•Œ refλ₯Ό λΆ™μ—¬μ•Ό ν•˜κ³ 
  2. ν˜ΈμΆœν•  λ•Œλ„ refλ₯Ό λΆ™μ—¬μ•Ό ν•©λ‹ˆλ‹€.
  3. ref둜 μ „λ‹¬ν•˜λŠ” λ³€μˆ˜λŠ” λ°˜λ“œμ‹œ μ΄ˆκΈ°ν™”λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

🟒 4. μ–Έμ œ μ“°λ©΄ μ’‹μ„κΉŒ?

  • ν•¨μˆ˜μ—μ„œ 값을 μ—¬λŸ¬ 개 λ°”κΎΈκ³  싢을 λ•Œ
  • 큰 κ΅¬μ‘°μ²΄λ‚˜ 데이터λ₯Ό λ³΅μ‚¬ν•˜μ§€ μ•Šκ³  λΉ λ₯΄κ²Œ μ „λ‹¬ν•˜κ³  싢을 λ•Œ
  • ν•¨μˆ˜ μ•ˆμ—μ„œ 원본을 직접 μˆ˜μ •ν•΄μ•Ό ν•  λ•Œ

🟒 5. ref, out, in 비ꡐ

ν‚€μ›Œλ“œμ˜λ―Έμ΄ˆκΈ°ν™” ν•„μš”?ν•¨μˆ˜ μ•ˆμ—μ„œ ν•΄μ•Ό ν•  일
ref원본을 읽고 μˆ˜μ • κ°€λŠ₯βœ… ν•„μš”μˆ˜μ •ν•΄λ„ 되고 μ•ˆ 해도 됨
out원본을 μˆ˜μ •λ§Œ κ°€λŠ₯❌ ν•„μš” μ—†μŒλ°˜λ“œμ‹œ 값을 ν• λ‹Ήν•΄μ•Ό 함
in원본을 읽기 μ „μš©μœΌλ‘œ μ‚¬μš©βœ… ν•„μš”κ°’ λ³€κ²½ λΆˆκ°€

βœ… 정리

  • ref = 원본 κ·ΈλŒ€λ‘œ 전달
  • ν•¨μˆ˜κ°€ λ³€μˆ˜μ˜ μ£Όμ†Œλ₯Ό λ°›μ•„μ„œ, μ•ˆμ—μ„œ λ°”κΎΈλ©΄ μ›λž˜ 값도 λ³€ν•©λ‹ˆλ‹€.
  • β€œλ³΅μ‚¬λ³Έμ„ μ€„κΉŒ? 원본을 μ€„κΉŒ?” λΌλŠ” μ„ νƒμ§€μ—μ„œ, refλŠ” 원본을 μ€€λ‹€κ³  μ΄ν•΄ν•˜λ©΄ 끝!

0개의 λŒ“κΈ€