변수와 기본 타입
int score = 10;
string name = "Mina";
bool isReady = true;
var level = 3;변수 선언, 타입 추론, 문자열과 숫자 타입처럼 가장 먼저 익혀야 하는 C# 기본 타입 문법입니다.
Quick Reference
입문 문법부터 컬렉션, 객체지향, 예외 처리, 비동기까지 C# 핵심 개념을 카드형 레퍼런스로 빠르게 탐색합니다.
제목, 요약, 태그, 섹션 제목 기준으로 찾습니다.
섹션
7 cards
int score = 10;
string name = "Mina";
bool isReady = true;
var level = 3;변수 선언, 타입 추론, 문자열과 숫자 타입처럼 가장 먼저 익혀야 하는 C# 기본 타입 문법입니다.
using System;
namespace Game.Tools;
public class DamagePrinter
{
public void Print() => Console.WriteLine("Hit!");
}`using` 지시문과 `namespace` 구조를 이해하면 클래스 위치와 파일 구성을 훨씬 읽기 쉽게 정리할 수 있습니다.
int total = price * count;
bool passed = score >= 60;
bool canEnter = age >= 20 && hasTicket;사칙연산, 비교, 논리 연산자는 거의 모든 조건문과 계산 코드의 기반이 되는 C# 핵심 문법입니다.
int Add(int left, int right)
{
return left + right;
}
int sum = Add(2, 3);값을 받아서 결과를 반환하는 C# 메서드 선언과 호출의 가장 기본적인 형태를 빠르게 정리합니다.
string title = "RefDock";
int length = title.Length;
bool hasDock = title.Contains("Dock");
string upper = title.ToUpper();문자열 길이 확인, 포함 여부 검사, 분리와 정리처럼 텍스트 처리에서 가장 자주 쓰는 C# 기본 패턴입니다.
string name = "Mina";
int score = 1200;
string message = $"{name} has {score} points.";
string report = $"Next rank in {1500 - score} points.";문자열을 연결하지 않고 `$""` 문법으로 변수와 표현식을 바로 넣는 C# 문자열 보간 패턴입니다.
int count = int.Parse("42");
if (int.TryParse(text, out int value))
{
Console.WriteLine(value);
}문자열을 숫자나 날짜로 변환할 때 쓰는 `Parse`와 예외 없이 안전하게 검사하는 `TryParse` 차이를 정리합니다.
4 cards
if (score >= 90)
{
grade = "A";
}
else if (score >= 80)
{
grade = "B";
}
else
{
grade = "C";
}조건에 따라 다른 코드를 실행할 때 쓰는 `if`, `else if`, `else` 기본 패턴입니다.
string label = state switch
{
GameState.Ready => "Ready",
GameState.Playing => "Playing",
GameState.Paused => "Paused",
_ => "Unknown"
};조건 분기를 값으로 바로 반환하고 싶을 때 유용한 C# switch expression 기본 패턴입니다.
for (int i = 0; i < numbers.Count; i++)
{
Console.WriteLine(numbers[i]);
}
foreach (string name in names)
{
Console.WriteLine(name);
}`for`, `foreach`, `while`처럼 데이터를 반복해서 처리할 때 자주 쓰는 C# 반복문 기초입니다.
if (input is string text)
{
Console.WriteLine(text.Length);
}
string result = score switch
{
>= 90 => "A",
>= 80 => "B",
_ => "C"
};타입 검사와 값 분기를 더 읽기 좋게 정리할 수 있는 C# 패턴 매칭 기본 문법입니다.
5 cards
int[] fixedNumbers = { 1, 2, 3 };
List<string> names = new List<string>();
names.Add("Mina");
names.Add("Jin");고정 길이 배열과 가변 길이 `List<T>`의 차이와 기본 사용 패턴을 빠르게 정리합니다.
var scores = new Dictionary<string, int>
{
["Mina"] = 1200,
["Jin"] = 980,
};
if (scores.TryGetValue("Mina", out int score))
{
Console.WriteLine(score);
}`Dictionary<TKey, TValue>`는 키로 값을 빠르게 찾을 수 있어서 설정값, 캐시, 매핑 테이블에서 매우 자주 쓰입니다.
var numbers = new List<int> { 1, 2, 3, 4 };
var scores = new Dictionary<string, int>
{
["mina"] = 24,
["lee"] = 19
};List, Dictionary 같은 컬렉션을 선언과 동시에 깔끔하게 채우는 C# 초기화 패턴 모음입니다.
List<string> highScores = players
.Where(player => player.Score >= 1000)
.OrderByDescending(player => player.Score)
.Select(player => $"{player.Name}: {player.Score}")
.ToList();필터링, 변환, 정렬 같은 컬렉션 작업을 짧고 읽기 쉬운 체인으로 표현하는 LINQ 핵심 흐름입니다.
var tags = new HashSet<string> { "csharp", "dotnet" };
tags.Add("linq");
bool hasDotnet = tags.Contains("dotnet");중복 없는 집합과 빠른 포함 여부 검사를 다룰 때 유용한 `HashSet<T>` 기본 패턴을 정리합니다.
9 cards
public class Player
{
public string Name;
public int Score;
}
Player player = new Player();
player.Name = "Mina";
player.Score = 100;데이터를 묶고 기능을 함께 정의하는 C# 클래스와 객체 생성의 가장 기본적인 형태입니다.
public class Player
{
public string Name { get; }
public Player(string name)
{
Name = name;
}
}생성자는 객체가 만들어지는 순간 필요한 값을 안전하게 넣어 주는 가장 기본적인 초기화 문법입니다.
public class Player
{
public string Name { get; set; } = "";
public int Score { get; private set; }
}필드에 직접 접근하는 대신 값을 안전하게 읽고 쓰게 해 주는 C# 프로퍼티 기본 문법입니다.
public interface IDamageable
{
void TakeDamage(int amount);
}
public class Enemy : IDamageable
{
public void TakeDamage(int amount) { }
}`interface`는 클래스가 어떤 기능을 제공해야 하는지 약속하는 문법으로, 교체 가능한 구조를 만들 때 유용합니다.
public enum GameState
{
Idle,
Playing,
Paused,
GameOver
}`enum`은 상태나 종류를 숫자 대신 의미 있는 이름으로 표현할 때 가장 먼저 떠올릴 수 있는 C# 문법입니다.
public record User(string Name, int Level);
User first = new User("Mina", 5);
User second = first with { Level = 6 };값 비교 중심의 불변 데이터 모델을 만들 때 유용한 C# record의 기본 문법과 장점을 정리합니다.
public class Player
{
public string Name { get; private set; }
private int score;
protected int level;
}`public`, `private`, `protected`, `internal`로 클래스와 멤버의 노출 범위를 제어하는 C# 기본 규칙입니다.
public class Animal
{
public virtual void Speak() => Console.WriteLine("...");
}
public class Dog : Animal
{
public override void Speak() => Console.WriteLine("Woof");
}공통 동작을 부모 클래스에서 재사용하고, 필요한 부분을 자식 클래스에서 확장하는 C# 상속 기본 구조입니다.
public struct Point
{
public int X { get; init; }
public int Y { get; init; }
}작은 데이터 묶음을 값 타입으로 표현할 때 쓰는 C# `struct`의 기본 역할과 클래스와의 차이를 정리합니다.
3 cards
try
{
SaveFile(path);
}
catch (IOException ex)
{
Console.WriteLine(ex.Message);
}
finally
{
Console.WriteLine("done");
}오류가 발생할 수 있는 코드를 안전하게 감싸는 `try`, `catch`, `finally` 예외 처리 기초입니다.
string path = Path.Combine("data", "memo.txt");
File.WriteAllText(path, "hello");
string content = File.ReadAllText(path);텍스트 파일을 읽고 쓰거나 경로를 다룰 때 가장 많이 쓰는 `File`과 `Path` 기본 패턴입니다.
using var reader = new StreamReader(path);
string line = reader.ReadLine() ?? "";파일, 스트림, 데이터베이스 연결처럼 정리가 필요한 자원을 안전하게 닫는 C# `using` 패턴을 정리합니다.
4 cards
public async Task<string> LoadDataAsync(HttpClient http)
{
using HttpResponseMessage response = await http.GetAsync("/api/items");
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}I/O 작업을 기다리는 동안 스레드를 막지 않고 자연스럽게 이어가는 C# 비동기 기본 패턴입니다.
public event Action? Clicked;
public void RaiseClick()
{
Clicked?.Invoke();
}메서드를 값처럼 전달하거나 특정 시점의 알림 구조를 만들 때 쓰는 `delegate`와 `event` 기본 패턴입니다.
event가 publisher에서 subscriber로 어떻게 전달되는지 이미지와 함께 빠르게 확인하는 시각화 예제 카드입니다.
Task<User> userTask = LoadUserAsync();
Task<Order[]> orderTask = LoadOrdersAsync();
await Task.WhenAll(userTask, orderTask);
User user = await userTask;
Order[] orders = await orderTask;여러 비동기 작업을 한 번에 기다릴 때 자주 쓰는 `Task.WhenAll`의 기본 패턴과 주의점을 정리합니다.
8 cards
string displayName = user?.Profile?.Nickname ?? "Guest";
settings.Theme ??= "light";null 가능 값을 안전하게 처리할 때 가장 자주 쓰는 `?.`, `??`, `??=` 패턴을 빠르게 정리합니다.
Func<int, int> square = x => x * x;
int result = square(4);람다 식은 짧은 함수 표현식으로, LINQ와 이벤트 처리, 콜백 코드에서 거의 필수처럼 자주 쓰입니다.
public class Box<T>
{
public T Value { get; set; }
}
Box<int> numberBox = new Box<int> { Value = 10 };타입을 고정하지 않고 재사용 가능한 코드 구조를 만들 때 쓰는 C# 제네릭의 가장 기본적인 형태입니다.
(int width, int height) size = (1920, 1080);
var (x, y) = GetPoint();
static (int x, int y) GetPoint()
{
return (10, 20);
}여러 값을 임시로 묶어 반환하거나 구조를 분해해서 받을 때 자주 쓰는 tuple과 deconstruction 패턴입니다.
public static class StringExtensions
{
public static bool IsBlank(this string value)
{
return string.IsNullOrWhiteSpace(value);
}
}
bool empty = "".IsBlank();기존 타입을 수정하지 않고도 메서드를 추가한 것처럼 쓸 수 있는 extension method의 기본 패턴입니다.
#nullable enable
string name = "Mina";
string? nickname = null;
if (nickname is not null)
{
Console.WriteLine(nickname.Length);
}null 안전성을 더 엄격하게 관리하기 위해 C#에서 제공하는 nullable reference type 문법과 해석 규칙입니다.
int a = 10;
int b = a;
b = 20;
Player first = new Player("Mina");
Player second = first;
second.Name = "Jin";변수 대입과 함수 호출에서 복사가 일어나는지, 같은 객체를 공유하는지 이해하기 위한 C# 핵심 비교 카드입니다.
void Increment(ref int value) => value++;
bool TryDivide(int left, int right, out int result)
{
if (right == 0)
{
result = 0;
return false;
}
result = left / right;
return true;
}함수가 호출자 변수를 직접 수정하거나 추가 결과를 돌려줄 때 쓰는 `ref`, `out` 매개변수 차이를 정리합니다.