반응형
https://nybot-house.tistory.com/92#comment15051682
위 게시글에서 ref 와 out을 잠시 언급했었다.
메서드에서 ref 와 out 키워드를 사용하면 pass by value가 아니라 pass by reference가 된다.
이는 메서드가 전달된 매개변수 값을 수정할 수 있다는 의미이다.
(잘 모르겠다면 https://nybot-house.tistory.com/49).
즉, 이번 게시글에서는 ref와 out에 대해 더 자세히 다뤄보도록 하겠다
'ref' 키워드
목적: 메서드에서 전달받은 값을 직접 수정하기를 원할 때 사용한다.
작용: 전달받은 매개변수(Parameter)의 값을 reference(참조)로 전달받아, 메서드가 직접적으로 매개변수의 진짜 값을 바꿀 수 있도록 한다.
조건: 메서드로 값을 전달하기 전에 변수는 반드시 초기화되어야만 한다.
예제:
namespace CSharp
{
internal class Program
{
//메서드 함수
static void ModifyValue(ref int value)
{
value = 10; //modifies the original value
}
static void Main(string[] args)
{
int original = 5;
ModifyValue(ref original);
Console.WriteLine(original);
}
}
}
'out' 키워드
목적: 메서드에서 변수를 초기화 하고 싶을 때 사용/ 메서드로 1개 이상의 값을 반환하고 싶을 때 사용.
작동: 'ref' 키워드와 마찬가지로, 매개변수에 참조값을 전달(pass by reference). 메서드에서 반환값을 확실하게 표기하고 싶을 때 사용한다.
조건: 메서드에 out으로 표기될 값들은 먼저 선언(메모리에 올라가 있어야 한다)되어야 한다. 초기화는 필요 없다.
예제: 나누기의 몫과 나머지를 구하는 함수 Divide를 out을 활용해 만들어 보았다.
namespace CSharp
{
internal class Program
{
//메서드 함수
static void Divide(int a, int b, out int quotient, out int remainder)
{
quotient = a / b;
remainder = a % b;
}
static void Main(string[] args)
{
int num1 = 10;
int num2 = 3;
int quotient;
int remainder;
Divide(num1, num2, out quotient, out remainder);
Console.WriteLine(quotient);
Console.WriteLine(remainder);
}
}
}
반응형
'C# 기초 프로그래밍 > C# Basic' 카테고리의 다른 글
[C# Basics] 재귀 함수 (0) | 2024.06.11 |
---|---|
[C# Basics] 다형성 (polymorphism) - OOP의 핵심 개념 (0) | 2024.04.15 |
[C# Basics] 캡슐화 / 은닉성 - OOP 의 핵심 개념(객체 지향 프로그래밍) (0) | 2024.04.12 |
[C# Basics] 객체지향 OOP란 무엇인가? - 핵심 4개념과 개론 (0) | 2024.04.12 |
[C# Basics] 생성자 Constructor (0) | 2024.04.02 |
[C# Basics] 스택과 힙 정리 - feat.복사와 참조, value, reference (0) | 2024.04.01 |
<C# Basics> 복사와 참조 (struct, class의 차이, 깊은 복사) (0) | 2023.12.23 |
<C# Basics> 함수/메서드 (2) | 2023.12.11 |