내일배움캠프 7일차 TIL: C# 기초 및 주요 개념 정리
Method 사용법
out, ref
out
과 ref
는 메서드 매개변수로 사용되어, 반환값 대신 사용할 수 있다. 이 때 원래 값이 바뀌므로 조심해야 한다. ref
는 값을 ref
로 받아서 ref
로 돌려줄 때 유용하다.
예시
void Divide(int a, int b, out int quotient, out int remainder)
{
quotient = a / b;
remainder = a % b;
}
문법 조심
알 수 없는 [] 에러
Array, List 등을 초기화할 때 { 0, 0, 0 }
대신 [0, 0, 0]
으로 초기화되는 문제를 겪었다. 이는 .NET 8.0 같은 최신 버전에서 발생하는 추가 기능이었다. 유니티는 .NET 4.x 버전을 사용하므로 기존 문법을 따르는 것이 좋다.
디버그
디버그에서 변수 보는 법
디버깅할 때 break point를 찍어 변수에 마우스를 대면 변수값을 쉽게 알 수 있다. 디버그는 차근차근 끈기 있게 진행해야 한다. 오늘의 에러는 index out of range
였는데, y값을 x값으로 잘못 쓴 것이 문제였다.
클래스 상속
C#에서는 기본적으로 클래스의 메서드 상속이 금지되어 있다. 특별한 메서드만 상속이 가능하다.
virtual
virtual
로 설정한 메서드는 자식 클래스에서 override
로 상속 가능하다.
예시
public virtual void Method() {}
abstract
abstract
클래스와 메서드는 자식 클래스에서 반드시 구현해야 한다. 부모 클래스에서 abstract
메서드는 body를 정의할 수 없다.
예시
abstract class Parent
{
public abstract void Method();
}
interface
interface
는 클래스에서 구현해야 하는 멤버를 선언만 해두는 곳이다. 이를 상속한 클래스는 인터페이스의 모든 멤버를 구현해야 한다. 인터페이스는 다중 상속이 가능하다.
예시
interface IBase
{
void Method();
}
enum
enum
값에 특정 값을 주어 형 변환이 가능하다. 1개만 값을 주면 나머지는 자동으로 순서대로 값을 가진다.
예시
enum E
{
a = 1,
b,
c
}
int i = (int)E.a;
Enum e = (E)1;
delegate
C#의 함수 포인터로, 메서드를 등록하여 사용할 수 있다. 메서드와 delegate
의 인자가 같아야 한다. 여러 개의 메서드를 등록하면 한번에 모두 실행된다.
함수 등록 예시
delegate int Calculus(int x, int y);
static int Add(int x, int y)
{
return x + y;
}
...
Calculus C = Add;
int result = C(1, 2);
람다
람다 표현식은 간단한 문법으로 사용 가능하다.
예시
delegate void D(string str);
D del = (message) => {
// 작업
};
Func<type, type, type…, return type>, Action
Func
은 마지막 인자가 반환값의 형태이고, Action
은 전부 인자이다.
LINQ
쿼리문을 사용하여 데이터를 간편하게 처리할 수 있다.
예시
List<int> nums = ...;
var oddNumbers = from num in nums
where num % 2 == 1
select num;
C# Nullable
int?
형식으로 null을 허용할 수 있다. .HasValue
로 null이 아닌 값을 가지고 있는지 확인 가능하다. int i = nullvar ?? 0;
형식으로 null인 경우 대체값을 지정할 수 있다.
StringBuilder
문자열을 Append()
, Insert()
, Replace()
, Remove()
등의 기능으로 조작할 수 있다. 문자열에 자주 변화를 줄 때 동적으로 크기를 조절해 메모리 효율을 높일 수 있다.