Quick Reference

C#

입문 문법부터 컬렉션, 객체지향, 예외 처리, 비동기까지 C# 핵심 개념을 카드형 레퍼런스로 빠르게 탐색합니다.

40 cards

제목, 요약, 태그, 섹션 제목 기준으로 찾습니다.

섹션

시작과 문법

7 cards

시작과 문법

변수와 기본 타입

csharp
int score = 10;
string name = "Mina";
bool isReady = true;

var level = 3;

변수 선언, 타입 추론, 문자열과 숫자 타입처럼 가장 먼저 익혀야 하는 C# 기본 타입 문법입니다.

시작과 문법

using 과 namespace

csharp
using System;

namespace Game.Tools;

public class DamagePrinter
{
    public void Print() => Console.WriteLine("Hit!");
}

`using` 지시문과 `namespace` 구조를 이해하면 클래스 위치와 파일 구성을 훨씬 읽기 쉽게 정리할 수 있습니다.

시작과 문법

연산자 기초

csharp
int total = price * count;
bool passed = score >= 60;
bool canEnter = age >= 20 && hasTicket;

사칙연산, 비교, 논리 연산자는 거의 모든 조건문과 계산 코드의 기반이 되는 C# 핵심 문법입니다.

시작과 문법

메서드 기본

csharp
int Add(int left, int right)
{
    return left + right;
}

int sum = Add(2, 3);

값을 받아서 결과를 반환하는 C# 메서드 선언과 호출의 가장 기본적인 형태를 빠르게 정리합니다.

시작과 문법

문자열 기본

csharp
string title = "RefDock";
int length = title.Length;
bool hasDock = title.Contains("Dock");
string upper = title.ToUpper();

문자열 길이 확인, 포함 여부 검사, 분리와 정리처럼 텍스트 처리에서 가장 자주 쓰는 C# 기본 패턴입니다.

시작과 문법

문자열 보간

csharp
string name = "Mina";
int score = 1200;

string message = $"{name} has {score} points.";
string report = $"Next rank in {1500 - score} points.";

문자열을 연결하지 않고 `$""` 문법으로 변수와 표현식을 바로 넣는 C# 문자열 보간 패턴입니다.

시작과 문법

Parse와 TryParse

csharp
int count = int.Parse("42");

if (int.TryParse(text, out int value))
{
    Console.WriteLine(value);
}

문자열을 숫자나 날짜로 변환할 때 쓰는 `Parse`와 예외 없이 안전하게 검사하는 `TryParse` 차이를 정리합니다.

제어 흐름

4 cards

제어 흐름

if / else 조건문

csharp
if (score >= 90)
{
    grade = "A";
}
else if (score >= 80)
{
    grade = "B";
}
else
{
    grade = "C";
}

조건에 따라 다른 코드를 실행할 때 쓰는 `if`, `else if`, `else` 기본 패턴입니다.

제어 흐름

switch expression

csharp
string label = state switch
{
    GameState.Ready => "Ready",
    GameState.Playing => "Playing",
    GameState.Paused => "Paused",
    _ => "Unknown"
};

조건 분기를 값으로 바로 반환하고 싶을 때 유용한 C# switch expression 기본 패턴입니다.

제어 흐름

반복문 기초

csharp
for (int i = 0; i < numbers.Count; i++)
{
    Console.WriteLine(numbers[i]);
}

foreach (string name in names)
{
    Console.WriteLine(name);
}

`for`, `foreach`, `while`처럼 데이터를 반복해서 처리할 때 자주 쓰는 C# 반복문 기초입니다.

제어 흐름

pattern matching 기본

csharp
if (input is string text)
{
    Console.WriteLine(text.Length);
}

string result = score switch
{
    >= 90 => "A",
    >= 80 => "B",
    _ => "C"
};

타입 검사와 값 분기를 더 읽기 좋게 정리할 수 있는 C# 패턴 매칭 기본 문법입니다.

컬렉션과 LINQ

5 cards

컬렉션과 LINQ

배열과 List

csharp
int[] fixedNumbers = { 1, 2, 3 };

List<string> names = new List<string>();
names.Add("Mina");
names.Add("Jin");

고정 길이 배열과 가변 길이 `List<T>`의 차이와 기본 사용 패턴을 빠르게 정리합니다.

컬렉션과 LINQ

Dictionary 기본

csharp
var scores = new Dictionary<string, int>
{
    ["Mina"] = 1200,
    ["Jin"] = 980,
};

if (scores.TryGetValue("Mina", out int score))
{
    Console.WriteLine(score);
}

`Dictionary<TKey, TValue>`는 키로 값을 빠르게 찾을 수 있어서 설정값, 캐시, 매핑 테이블에서 매우 자주 쓰입니다.

컬렉션과 LINQ

컬렉션 초기화

csharp
var numbers = new List<int> { 1, 2, 3, 4 };

var scores = new Dictionary<string, int>
{
    ["mina"] = 24,
    ["lee"] = 19
};

List, Dictionary 같은 컬렉션을 선언과 동시에 깔끔하게 채우는 C# 초기화 패턴 모음입니다.

컬렉션과 LINQ

LINQ 기본 흐름

csharp
List<string> highScores = players
    .Where(player => player.Score >= 1000)
    .OrderByDescending(player => player.Score)
    .Select(player => $"{player.Name}: {player.Score}")
    .ToList();

필터링, 변환, 정렬 같은 컬렉션 작업을 짧고 읽기 쉬운 체인으로 표현하는 LINQ 핵심 흐름입니다.

컬렉션과 LINQ

HashSet 기본

csharp
var tags = new HashSet<string> { "csharp", "dotnet" };
tags.Add("linq");
bool hasDotnet = tags.Contains("dotnet");

중복 없는 집합과 빠른 포함 여부 검사를 다룰 때 유용한 `HashSet<T>` 기본 패턴을 정리합니다.

객체지향

9 cards

객체지향

클래스와 객체

csharp
public class Player
{
    public string Name;
    public int Score;
}

Player player = new Player();
player.Name = "Mina";
player.Score = 100;

데이터를 묶고 기능을 함께 정의하는 C# 클래스와 객체 생성의 가장 기본적인 형태입니다.

객체지향

생성자 기본

csharp
public class Player
{
    public string Name { get; }

    public Player(string name)
    {
        Name = name;
    }
}

생성자는 객체가 만들어지는 순간 필요한 값을 안전하게 넣어 주는 가장 기본적인 초기화 문법입니다.

객체지향

프로퍼티 기본

csharp
public class Player
{
    public string Name { get; set; } = "";
    public int Score { get; private set; }
}

필드에 직접 접근하는 대신 값을 안전하게 읽고 쓰게 해 주는 C# 프로퍼티 기본 문법입니다.

객체지향

interface 기본

csharp
public interface IDamageable
{
    void TakeDamage(int amount);
}

public class Enemy : IDamageable
{
    public void TakeDamage(int amount) { }
}

`interface`는 클래스가 어떤 기능을 제공해야 하는지 약속하는 문법으로, 교체 가능한 구조를 만들 때 유용합니다.

객체지향

enum 기본

csharp
public enum GameState
{
    Idle,
    Playing,
    Paused,
    GameOver
}

`enum`은 상태나 종류를 숫자 대신 의미 있는 이름으로 표현할 때 가장 먼저 떠올릴 수 있는 C# 문법입니다.

객체지향

record 기본

csharp
public record User(string Name, int Level);

User first = new User("Mina", 5);
User second = first with { Level = 6 };

값 비교 중심의 불변 데이터 모델을 만들 때 유용한 C# record의 기본 문법과 장점을 정리합니다.

객체지향

접근 제한자 기본

csharp
public class Player
{
    public string Name { get; private set; }
    private int score;
    protected int level;
}

`public`, `private`, `protected`, `internal`로 클래스와 멤버의 노출 범위를 제어하는 C# 기본 규칙입니다.

객체지향

상속 기본

csharp
public class Animal
{
    public virtual void Speak() => Console.WriteLine("...");
}

public class Dog : Animal
{
    public override void Speak() => Console.WriteLine("Woof");
}

공통 동작을 부모 클래스에서 재사용하고, 필요한 부분을 자식 클래스에서 확장하는 C# 상속 기본 구조입니다.

객체지향

struct 기본

csharp
public struct Point
{
    public int X { get; init; }
    public int Y { get; init; }
}

작은 데이터 묶음을 값 타입으로 표현할 때 쓰는 C# `struct`의 기본 역할과 클래스와의 차이를 정리합니다.

입출력과 예외

3 cards

입출력과 예외

예외 처리 기본

csharp
try
{
    SaveFile(path);
}
catch (IOException ex)
{
    Console.WriteLine(ex.Message);
}
finally
{
    Console.WriteLine("done");
}

오류가 발생할 수 있는 코드를 안전하게 감싸는 `try`, `catch`, `finally` 예외 처리 기초입니다.

입출력과 예외

파일 읽기와 쓰기 기본

csharp
string path = Path.Combine("data", "memo.txt");

File.WriteAllText(path, "hello");
string content = File.ReadAllText(path);

텍스트 파일을 읽고 쓰거나 경로를 다룰 때 가장 많이 쓰는 `File`과 `Path` 기본 패턴입니다.

입출력과 예외

using과 IDisposable

csharp
using var reader = new StreamReader(path);
string line = reader.ReadLine() ?? "";

파일, 스트림, 데이터베이스 연결처럼 정리가 필요한 자원을 안전하게 닫는 C# `using` 패턴을 정리합니다.

비동기와 이벤트

4 cards

비동기와 이벤트

async / await 기본 패턴

csharp
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# 비동기 기본 패턴입니다.

비동기와 이벤트

delegate와 event

csharp
public event Action? Clicked;

public void RaiseClick()
{
    Clicked?.Invoke();
}

메서드를 값처럼 전달하거나 특정 시점의 알림 구조를 만들 때 쓰는 `delegate`와 `event` 기본 패턴입니다.

비동기와 이벤트

event 흐름 이미지 예제

event가 publisher에서 subscriber로 어떻게 전달되는지 이미지와 함께 빠르게 확인하는 시각화 예제 카드입니다.

비동기와 이벤트

Task.WhenAll 기본

csharp
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

고급 주제

null 체크와 ?? 연산자

csharp
string displayName = user?.Profile?.Nickname ?? "Guest";

settings.Theme ??= "light";

null 가능 값을 안전하게 처리할 때 가장 자주 쓰는 `?.`, `??`, `??=` 패턴을 빠르게 정리합니다.

고급 주제

람다 식 기본

csharp
Func<int, int> square = x => x * x;

int result = square(4);

람다 식은 짧은 함수 표현식으로, LINQ와 이벤트 처리, 콜백 코드에서 거의 필수처럼 자주 쓰입니다.

고급 주제

제네릭 기본

csharp
public class Box<T>
{
    public T Value { get; set; }
}

Box<int> numberBox = new Box<int> { Value = 10 };

타입을 고정하지 않고 재사용 가능한 코드 구조를 만들 때 쓰는 C# 제네릭의 가장 기본적인 형태입니다.

고급 주제

tuple 과 deconstruction

csharp
(int width, int height) size = (1920, 1080);

var (x, y) = GetPoint();

static (int x, int y) GetPoint()
{
    return (10, 20);
}

여러 값을 임시로 묶어 반환하거나 구조를 분해해서 받을 때 자주 쓰는 tuple과 deconstruction 패턴입니다.

고급 주제

extension method 기본

csharp
public static class StringExtensions
{
    public static bool IsBlank(this string value)
    {
        return string.IsNullOrWhiteSpace(value);
    }
}

bool empty = "".IsBlank();

기존 타입을 수정하지 않고도 메서드를 추가한 것처럼 쓸 수 있는 extension method의 기본 패턴입니다.

고급 주제

nullable reference type 기본

csharp
#nullable enable

string name = "Mina";
string? nickname = null;

if (nickname is not null)
{
    Console.WriteLine(nickname.Length);
}

null 안전성을 더 엄격하게 관리하기 위해 C#에서 제공하는 nullable reference type 문법과 해석 규칙입니다.

고급 주제

값 타입과 참조 타입

csharp
int a = 10;
int b = a;
b = 20;

Player first = new Player("Mina");
Player second = first;
second.Name = "Jin";

변수 대입과 함수 호출에서 복사가 일어나는지, 같은 객체를 공유하는지 이해하기 위한 C# 핵심 비교 카드입니다.

고급 주제

ref와 out 매개변수

csharp
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` 매개변수 차이를 정리합니다.