[C#] out과 ref 키워드

PIAZZI·2024년 5월 2일

C#

목록 보기
7/9
post-thumbnail

ref 키워드

  • 변수를 참조 형태로 전달할 때 사용.
  • C 나 C++의 &와 비슷하다고 생각하면 된다. (변수의 주소값을 넘겨주는 느낌)
  • 변수를 전달하기 전에, 변수는 초기화가 된 상태여야 한다.
public void Plus(int i, ref int value) // 5와 value의 주소값을 받음.
{
	value += i // value의 주소값을 통해서 내부의 저장된 10과 5가 더해져서 다시 value에 대입된다.
}

static public void Main(string[] args)
{
	int value = 10;		// 참조 형태로 넘기기 위해서는 미리 초기화가 되어 있어야 한다.
    Plus(5, ref value); // 참조 형태로 매개 변수에 넣었다. (value의 주소가 넘어감)
    Console.WriteLine(Plus); //참조 형태로 인해 값이 바뀌었기 떄문에, value의 값은 15로 출력된다.
}

ref 키워드를 전달할 때나 받을 때 명시적으로 적어줘야 한다.


out 키워드

  • ref 키워드와 비슷하게 참조 형태로 변수를 전달할 때 사용된다. 다만 목적성이 다르다.
  • ref 키워드와 다르게 초기화가 되지 않아도 변수를 매개변수로 전달 할 수 있다.
    하지만, 매개 변수로 사용된 메소드 내에서 무조건 값이 할당되야 한다.

public void Setting(out int value) // 다만 이 메소드 내에서 무조건 값의 할당이 일어나야한다.
{
	value = 15; // 값의 할당이 일어난 모습
}


static public void Main(string[] args)
{
	int value; 		// 초기화를 안해도 된다.
    Setting(out value); 
    Console.WriteLine(value); // 15 출력
}

out 키워드도 전달할 때나 받을 때 명시적으로 적어줘야 한다.

이러면 ref와 별 차이점을 못느낄테니 예시를 하나를 더 두도록 하겠다.

public void Setting(int a, float b, out int value1, out float value2)
{
	value1 = a; 
    value2 = b;
}

static public void Main(string[] args)
{
	int value1;
    int value2;
    Setting(10, 3.14, out value1, out value2); 
    Console.WriteLine(value1, value2); // 10과 3.14 출력
}

ref 키워드는 이미 할당된 값을 다른 메소드 내에서 바꾸거나 참조 할 때 쓰는 느낌이라면,
out 키워드는 변수 선언부가 아닌 다른 메소드 내에서 초기화를 하고 싶을 때 사용하는 느낌이다.

(ref - 변수의 주소값(초기화 이미 된 상태)을 줄테니 거기서 변경해봐)
(out - 변수의 주소값(초기화가 되지 않은 상태)을 줄테니 거기서 초기화 해봐)


개인적인 공부를 위해 정리한 내용이며, 틀린 점이 있을 수 있습니다.
만일 틀린 내용이 있다면, 댓글로 알려주시면 감사하겠습니다.

profile
범부에오

0개의 댓글