ref ( 참조 전달 , 매개변수 키워드 )
ref 는 메서드의 매개변수를 참조 ( Reference ) 로 전달할 때 사용하는 키워드이다.
기본적으로 C# 에서 값 형식 ( Value Type ) 은 메서드 호출 시 복사되어 전달된다.
그래서 메서드 안에서 값을 변경해도 원본에는 영향이 없다.
ref 를 붙이면 원본 변수를 직접 참조하기 때문에, 메서드 안에서 수정하면 호출한 쪽 변수도 같이 변경된다.
문법
▼메서드 정의
void ChangeValue(ref int number)
{
number = 100; // 원본 변수 자체가 변경됨
}
▼메서드 호출
int x = 10;
ChangeValue(ref x);
Console.WriteLine(x); // 100 출력
ref 는 메서드 정의와 호출 양쪽 모두에 붙여야 한다.
예시 코드
1. ref 가 없는 경우
void AddOne(int n)
{
n++;
}
int a = 5;
AddOne(a);
Console.WriteLine(a); // 5 (원본은 그대로)
2. ref 가 있는 경우
void AddOne(ref int n)
{
n++;
}
int b = 5;
AddOne(ref b);
Console.WriteLine(b); // 6 (원본이 변경됨)
주의 사항
1. 초기화 필수
- ref 로 넘길 변수는 반드시 값을 초기화한 뒤에 전달해야 한다
- 초기화 하지 않으면 컴파일 에러 발생
int num;
ChangeValue(ref num);
// 컴파일 에러 발생
2. 참조 타입에 ref
- 클래스 같은 참조형은 원래 참조 전달이다.
- ref 를 쓰면 참조 변수 자체를 바꾸는 것도 가능하다.
class Monster { public string Name; }
void ChangeMonster(ref Monster m)
{
m = new Monster(); // 아예 다른 객체를 가리키게 변경
m.Name = "고블린";
}
Monster slime = new Monster();
slime.Name = "슬라임";
ChangeMonster(ref slime);
Console.WriteLine(slime.Name); // 고블린
정리
- ref : 원본 변수를 그대로 넘긴다 ( 참조 전달 )
- 호출하는 쪽과 선언하는 쪽 둘 다 ref 표시 필요
- 값 형식도 원본 수정 가능
- 참조 형식은 "참조 자체" 를 바꿀 수 있다.
'⭐C Sharp > 07. 메서드(함수)' 카테고리의 다른 글
| in ( 매개변수 키워드 , 참조 전달 ) (0) | 2025.09.28 |
|---|---|
| out ( 매개변수 키워드 , 참조 전달 ) (0) | 2025.09.28 |
| 함수 ( Function ) (0) | 2025.09.07 |
| Convert 를 이용한 변환 (0) | 2025.09.07 |
| 문자열 숫자로 변환하기 (0) | 2025.09.07 |