https://nybot-house.tistory.com/92#comment15051682
<C# Basics> 함수/메서드
컴퓨터 과학에서 함수란? 함수(function), 서브루틴(subroutine), 루틴(routine), 메서드(method), 프로시저(procedure)는 소프트웨어에서 특정 동작을 수행하는 일정 코드 부분이다. 즉, '특정한 작업을 위해
nybot-house.tistory.com
위 게시글에서 ref 와 out을 잠시 언급했었다.
메서드에서 ref 와 out 키워드를 사용하면 pass by value가 아니라 pass by reference가 된다.
이는 메서드가 전달된 매개변수 값을 수정할 수 있다는 의미이다.
(잘 모르겠다면 https://nybot-house.tistory.com/49).
1. 포인터와 레퍼런스, Pass by Value
1. Pass by Value a 가 Pass by Value 되며 카피되면서 foo 에 a=0 이 들어가게 되고, 로컬변수 b는 a+1이니까 1이 들어가게 된다. 결국 값이 복사가 되는 것. 2. Pass by Pointer 함수에서 매개변수로 포인터를 받
nybot-house.tistory.com
즉, 이번 게시글에서는 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 |