C#/함수

[C#] ref, out

도도돋치 2025. 4. 17. 12:37
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