Contents
접기
728x90
1. ref와 out이란?
C#에서 기본적으로 함수에 인자를 전달하면 값이 복사되어 전달된다.
하지만 ref, out 키워드를 사용하면 값이 아닌 변수 그 자체를 참조로 넘길 수 있다.
즉, 함수 안에서 값을 변경하면 원래 변수도 같이 변경된다..!
2. ref 키워드
- 함수 호출 전에 반드시 초기화 되어 있어야 함
- 함수 안에서 값을 변경하면 호출한 쪽 변수에도 반영됨
void DoubleValue(ref int num) { // return값이 없고 값만 바꿈
num *= 2;
}
int a = 10;
DoubleValue(ref a); // 넘길때도 ref키워드를 붙여줘야한다
Console.WriteLine(a); // 출력: 20
3. out 키워드
- 초기화하지 않아도 호출 가능
- 함수 내부에서 반드시 값을 할당해야 함 (반드시 값을 '내보내야' 함)
void GetValues(out int x, out int y) {
x = 100;
y = 200;
}
int a, b;
GetValues(out a, out b);
Console.WriteLine(a); // 출력: 100
Console.WriteLine(b); // 출력: 200
void GetUserInfo(out string name, out int age) {
name = "도치";
age = 25;
}
string userName;
int userAge;
// 초기화하지 않고도 호출 가능!
GetUserInfo(out userName, out userAge);
Console.WriteLine($"이름: {userName}, 나이: {userAge}");
// 출력: 이름: 도치, 나이: 25
4. ref, out을 사용하는 이유
① 값을 여러 개 반환하고 싶을 때
→ C#에서는 함수가 기본적으로 하나의 값만 반환할 수 있다. ref, out을 사용하면 여러 값을 전달할 수 있다.
보통 메서드는 반환값이 하나밖에 없지만 매서드 실행 후에 값이 여러개 바꼈으면 좋겠어서 씀
② 값 전달이 아닌 참조 전달이 필요할 때
→ 기본적으로 C#에서 함수에 전달된 값은 복사되지만, ref나 out을 사용하면 원본 변수에 직접 접근할 수 있다.
③ 성능 개선이 필요한 경우
→ 대용량 데이터나 구조체 등을 함수에 넘길 때 ref로 전달하면 복사 없이 참조로 넘기므로 메모리 사용과 성능 면에서 이점이 있다.
5. ref vs out 차이
항목 | ref | out |
초기화 필요 | 필요함 | 필요 없음 |
값 변경 | 함수 안에서 변경 가능 | 함수 안에서 반드시 값을 설정해야 함 |
목적 | 값을 전달하고 수정하려고 할 때 | 값을 함수로부터 받아오기 위한 용도 |
🔹 ref: 참조를 연결한것. 값을 바꿔서 써도되고 안써도 돼, 참고만 해도돼
🔹 out: 니가 이거 가져갔으면 무조건 값을 채워와. null이라도 채워와!!(값이 무조건 채워졌을거라고 예상가능)
📖 정리
- ref: 함수에 변수의 참조를 넘겨서 값을 수정할 때 사용
- out: 함수에서 여러 값을 반환하거나 값을 초기화해서 전달할 때 사용
- ref는 초기화된 값을 넘겨야 하고, out은 함수 내에서 반드시 값 설정이 필요
728x90
'C# > 함수' 카테고리의 다른 글
[C#] 재귀함수(Recursion) (0) | 2025.04.17 |
---|---|
[C#] 메서드 오버로딩(Method Overloading) (5) | 2025.04.17 |
[C#] 매개변수 (0) | 2025.04.17 |
[C#] 함수 개념 (0) | 2025.04.16 |