일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- c#문제
- c#
- 유니티상호작용
- 스파르타코딩클럽
- c#코테
- 유니티공부
- c#코딩기초트레이닝
- C#문법
- unity게임
- 유니티
- c# 백준
- c# c#프로그래머스
- 시샵
- c#기초문법
- unity3d
- 유니티서바이벌게임만들기
- c#기본문법
- 시샵문법
- 오블완
- Console.WriteLine
- 스파르타
- 유니티3dui
- Unity
- unity3d게임만들기
- unity3dservival
- unity게임만들기
- c#프로그래머스기초문법
- 유니티게임만들기
- unity공부
- 티스토리챌린지
- Today
- Total
나 개발자 진짜 되냐?
[ C# 기본 문법 18 ] out 과 ref 본문
고급문법 두 번째
out와
ref가 있다.
둘 다 메서드에서 매개변수로 전달할 때 사용한다.
하나씩 알아보자!!
🌟 out 🌟
메서드에서 반환 값을 매개변수로 전달하는 경우에 사용
🌟 ref 🌟
메서드에서 매개변수를 수정하여 원래 값에 영향을 주는 경우에 사용
결국 변수를 만지작하는 것이기 때문에
굉장히 주의해야 한다.
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Diagnostics.Metrics;
namespace ConsoleApp1
{
internal class Program
{// out 키워드 사용 예시
// main함수를 그대로 가져오는 것이기 때문에 우리는 static으로 맞춰준다.
static void Divide(int a, int b, out int quotient, out int remainder)
//out으로 매개변수를 받았으면 무조건 값이 바껴서 나간다! 즉 반환이 필요없다.
{
quotient = a / b;
remainder = a % b;
}
static void Main(string[] args)
{
int quotient, remainder;
Divide(7,3,out quotient,out remainder);
Console.WriteLine($"{quotient}, {remainder}");
}
}
}
out이다.
여기서 int a b는
7과 3이 복사해서 들어간 것이고
out 은 자료구조처럼 가리킨다 라는 의미로 해석한다.
그래서 out 이 있다면 Divide 메서드에 있던 매개변수 두 개가
main의 quo와 rem을 가리킨다고 보면 된다!
그래서 return 없이도 가능! 한 것
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Diagnostics.Metrics;
namespace ConsoleApp1
{
internal class Program
{// main함수를 그대로 가져오는 것이기 때문에 우리는 static으로 맞춰준다.
// ref 키워드 사용 예시
static void Swap(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}
static void Main(string[] args)
{
int x = 1, y = 2;
Swap(ref x, ref y); // 이 x y가 a b랑 연결!
Console.WriteLine($"{x}, {y}");
}
}
}
out이든 ref든
이 키워드는 메서드에서 값을 반환하는 것이 아니라,
return이 필요 없는!
매개변수를 이용하여 값을 전달할 수 있다.
❗❗ 유의사항 ❗❗
out의 매개변수는
메서드 내에서 반드시 값을 할당해야 한다.
즉
매개변수가 메서드 내에서 무조건 값이 바뀌어야 한다.
예를 들면 우리가 int a = 10으로 지정해 줬는데
out으로 메서드에 들어가서
a = 99로 정했다.
그러면 10은 지워지는 것이다.
그렇기 때문에 원본을 잘 간수해야 한다.
전달할 때 해당 변수의 이전 값이 유지되지 않으므로 주의
ref의 매개변수는
값에 대한 복사 없이
메서드 내에서 직접 접근할 수 있기 때문에
성능상 이점
대신 많으면 독이 된다!
또
ref의 매개변수는
사용하게 되면 메서드 내에서
해당 변수의 값을 직접 변경할 수 있기 때문에
주의가 필요!
반환을 안 해줘서 좋다! 생각할 수 있지만
생각보다 위험한 친구이다.
양날의 검 이 친구를
쓰게 된다면
조심해서 써야겠다 (●'◡'●)
'C# 을 맛보았어요! > 문법정리를 해보았어요!' 카테고리의 다른 글
[ C# 기본 문법 20 ] 예외 처리 (0) | 2024.09.23 |
---|---|
[ C# 기본 문법 19 ] 인터페이스와 열거형 (0) | 2024.09.23 |
[ C# 기본 문법 17 ] 제너릭 (0) | 2024.09.23 |
[ C# 기본 문법 16 ] 상속과 다형성 (0) | 2024.09.23 |
[ C# 기본 문법 15 ] 클래스란? 객체란? (0) | 2024.09.23 |