

INTRO...
C#에서 ref
와 out
키워드는 메서드에서 인자를 전달할 때 복사한 값이 아닌 참조(reference)를 사용할 수 있게 한다. 즉, 메서드가 호출된 후에도 원래 변수의 값이 변경될 수 있도록 돕는다.
ref
키워드
ref
키워드는 메서드에 전달된 변수의 기존 값을 유지하면서 수정할 수 있도록 한다. 다만 ref
를 사용하여 메서드가 호출할 땐, 해당 변수에 값이 반드시 할당된 상태여야 한다.
ref
사용 예시
using System;
class Program
{
static void ModifyValue(ref int number)
{
number += 10; // number 값을 10 증가시킴
}
static void Main()
{
int myNumber = 5;
Console.WriteLine("Before: " + myNumber);
ModifyValue(ref myNumber); // ref를 통해 값 전달
Console.WriteLine("After: " + myNumber);
}
}
실행 결과
Before: 5
After: 15
ref
키워드 특징
- 반드시 초기화된 변수를 인자로 전달해야 한다.
- 메서드 내부에서 값을 변경하면 호출한 쪽에도 반영된다.
- 값 타입(int, double, bool)뿐만 아니라 참조 타입(class, array)에도 사용할 수 있다.
out
키워드
out
키워드는 메서드가 값을 반환할 때 여러 개의 값을 반환할 수 있도록 돕는다. out
을 사용할 땐 메서드 내부에서 반드시 해당 변수에 값을 할당해줘야 한다. 즉, 메서드를 호출하기 전에 초기화할 필요는 없지만, 내부에서 값을 반드시 설정해야 한다.
out
사용 예시
using System;
class Program
{
static void GetValues(out int num1, out int num2)
{
num1 = 100; // out 매개변수는 메서드 내부에서 반드시 값 할당이 필요함
num2 = 200;
}
static void Main()
{
int a, b; // 초기화 없이 선언만 함
GetValues(out a, out b); // out을 사용하여 값 전달
Console.WriteLine($"a: {a}, b: {b}");
}
}
실행 결과
a: 100, b: 200
out
키워드 특징
- 메서드 내부에서 반드시 값을 할당해야 한다.
- 호출하기 전에 변수를 초기화할 필요는 없다.
- 주로 여러 개의 값을 반환해야 하는 경우 사용된다.
ref
와 out
이 사용되는 대표적 예시
ref
using System;
class Program
{
static void Swap(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}
static void Main()
{
int x = 10, y = 20;
Console.WriteLine($"Before Swap: x = {x}, y = {y}");
Swap(ref x, ref y);
Console.WriteLine($"After Swap: x = {x}, y = {y}");
}
}
out
using System;
class Program
{
static void Main()
{
string input = "123";
if (int.TryParse(input, out int result))
{
Console.WriteLine($"변환 성공: {result}");
}
else
{
Console.WriteLine("변환 실패");
}
}
}
'C# > TIL(Today I Learned)' 카테고리의 다른 글
2025-03-24 <C# 스택 클래스와 성능 최적화> (0) | 2025.03.24 |
---|---|
2025-03-21 <해시 테이블(Hashtable)이란?> (0) | 2025.03.21 |
2025-03-20 (2) <함수의 매개변수화 - 콜백함수와 delegate> (1) | 2025.03.20 |
2025-03-20(1) <내가 만든 데이터, Stack과 Heap 중 어디에 저장될까?> (0) | 2025.03.20 |
2025-03-19 <값 타입과 참조 타입> (0) | 2025.03.19 |
댓글