C# 치트시트
마지막 업데이트
Hello World 및 프로그램 구조
최상위 문(.NET 6부터)을 쓰면 상용구 클래스를 생략할 수 있습니다.
| 요소 | 코드 |
|---|---|
| 최상위 프로그램 | Console.WriteLine("Hello, World!"); |
| 네임스페이스 임포트 | using System; |
| 고전적인 진입점 | static void Main(string[] args) { ... } |
| 한 줄 출력 | Console.WriteLine("text"); |
| 한 줄 읽기 | string s = Console.ReadLine(); |
| 문자열 보간 | Console.WriteLine($"Hi {name}"); |
| 주석 | // line 그리고 /* block */ |
자료형
| 타입 | 설명 |
|---|---|
int | 32비트 부호 있는 정수 |
long | 64비트 부호 있는 정수 |
double / float | 부동소수점 숫자 |
decimal | 고정밀 십진수 (금액) |
bool | true 또는 false |
char | 단일 유니코드 문자 |
string | 불변 텍스트 |
var | 컴파일러가 타입을 추론 |
int? | 널 허용 값 타입 |
변수
| 작업 | 문법 |
|---|---|
| 선언 및 초기화 | int x = 5; |
| 타입 추론 | var name = "Ada"; |
| 상수 | const double Pi = 3.14159; |
| 읽기 전용 필드 | readonly int id; |
| 널 허용 참조 | string? maybe = null; |
| 널 병합 | var y = maybe ?? "default"; |
| 널 조건부 | int? len = text?.Length; |
제어 흐름
| 문(statement) | 문법 |
|---|---|
| if / else | if (x > 0) { ... } else { ... } |
| switch 문 | switch (n) { case 1: ...; break; default: ...; } |
| switch 표현식 | var s = n switch { 1 => "one", _ => "other" }; |
| while 반복문 | while (i < n) { ... } |
| do-while 반복문 | do { ... } while (i < n); |
| for 반복문 | for (int i = 0; i < n; i++) { ... } |
| foreach 반복문 | foreach (var item in list) { ... } |
| break / continue | break;는 반복문을 빠져나가고, continue;는 다음 반복으로 건너뜀 |
메서드
| 작업 | 문법 |
|---|---|
| 메서드 정의 | int Add(int a, int b) { return a + b; } |
| 표현식 본문 | int Add(int a, int b) => a + b; |
| 반환값 없음 | void Greet() { ... } |
| 선택적 매개변수 | int Pow(int b, int e = 2) { ... } |
| 명명된 인자 | Pow(b: 2, e: 3); |
| out 매개변수 | bool TryParse(string s, out int n) { ... } |
| 정적 메서드 | static int Square(int x) => x * x; |
| 람다 표현식 | Func<int, int> f = x => x * 2; |
클래스 및 객체 지향(OOP)
| 작업 | 문법 |
|---|---|
| 클래스 정의 | class Dog { ... } |
| 자동 프로퍼티 | public string Name { get; set; } |
| 읽기 전용 프로퍼티 | public int Id { get; } |
| 생성자 | public Dog(string name) { Name = name; } |
| 객체 생성 | var d = new Dog("Rex"); |
| 상속 | class Puppy : Dog { ... } |
| 인터페이스 | interface IRunnable { void Run(); } |
| 메서드 오버라이드 | public override void Speak() { ... } |
| 레코드 (불변) | record Point(int X, int Y); |
컬렉션
System.Collections.Generic의 제네릭 컬렉션.
| 타입 | 사용법 및 예시 |
|---|---|
List<T> | 동적 배열: list.Add(1); list.Count; |
Dictionary<K, V> | 키-값: dict["a"] = 1; dict.ContainsKey("a"); |
HashSet<T> | 고유 값: set.Add(5); set.Contains(5); |
Queue<T> | FIFO: q.Enqueue(x); q.Dequeue(); |
Stack<T> | LIFO: s.Push(x); s.Pop(); |
| 배열 | int[] nums = { 1, 2, 3 }; |
| 컬렉션 초기화자 | var l = new List<int> { 1, 2, 3 }; |
| 딕셔너리 순회 | foreach (var kv in dict) { kv.Key; kv.Value; } |
LINQ
컬렉션을 유려하게 쿼리합니다. System.Linq에서 가져옵니다.
| 작업 | 문법 |
|---|---|
| 필터 | nums.Where(n => n > 0) |
| 투영 / 매핑 | nums.Select(n => n * 2) |
| 정렬 | nums.OrderBy(n => n) / OrderByDescending(...) |
| 첫 일치 | nums.First(n => n > 5) / FirstOrDefault(...) |
| any / all | nums.Any(n => n < 0) / nums.All(n => n > 0) |
| 일치 개수 세기 | nums.Count(n => n > 0) |
| 집계 | nums.Sum(), nums.Max(), nums.Average() |
| 그룹화 | items.GroupBy(i => i.Category) |
| 구체화 | .ToList() / .ToArray() |
자주 쓰는 패턴 (프로퍼티, async)
| 패턴 | 문법 |
|---|---|
| async 메서드 | async Task<int> GetAsync() { ... } |
| 태스크 await | var result = await GetAsync(); |
| try / catch | try { ... } catch (Exception e) { ... } |
| finally | finally { ... }는 항상 실행됨 |
| using (자원 해제) | using var file = File.OpenRead(path); |
| 문자열 서식 지정 | $"Total: {amount:C}" |
| 제네릭 클래스 | class Box<T> { public T Value; } |
| 패턴 매칭 | if (obj is Dog d) { d.Bark(); } |
가장 자주 쓰는 C# 문법, 컬렉션, LINQ 쿼리를 한 페이지에 담았습니다. 이 C# 치트시트는 C#를 작성하기 위한 빠른 참조 자료입니다 - 자료형, 제어 흐름, 클래스, List/Dictionary 컬렉션, LINQ, 그리고 관용적인 .NET 코드를 정의하는 프로퍼티와 async 패턴을 다룹니다.
여기 나오는 모든 내용은 .NET의 표준 C#이며 dotnet CLI로 실행됩니다. 필요한 것을 복사하거나, C# 플레이그라운드에서 어떤 코드든 바로 실행해 보세요 - SDK를 설치할 필요가 없습니다.
C# 치트시트 자주 묻는 질문
이 C# 치트시트는 무료인가요?
네. 이 C# 치트시트는 완전히 무료이며 회원 가입이 필요 없습니다. 즐겨찾기에 추가해 두고 문법, 컬렉션, LINQ 메서드를 찾아봐야 할 때마다 다시 방문하세요.
C#에서 값 타입과 참조 타입의 차이는 무엇인가요?
값 타입(
int, double, bool, struct, enum)은 데이터를 직접 담으며, 대입하거나 메서드에 전달할 때 복사됩니다 - 복사본을 바꿔도 원본에는 영향이 없습니다. 참조 타입(class, string, 배열, List<T>)은 힙에 있는 데이터에 대한 참조를 담으므로, 두 변수가 같은 객체를 가리킬 수 있고 한쪽을 통한 변경이 다른 쪽에도 보입니다. string은 참조 타입이지만 불변처럼 동작합니다.LINQ란 무엇이며 언제 사용해야 하나요?
LINQ(Language Integrated Query)는
Where, Select, OrderBy 같은 메서드 집합으로, 수동 반복문 대신 읽기 쉽고 연결 가능한 호출로 컬렉션을 필터링, 변환, 집계할 수 있게 해줍니다. 필터링되거나 투영된 리스트를 만들기 위해 반복문을 쓰게 될 상황이라면 언제든 사용하세요 - 간결하며 ToList()를 호출하거나 순회할 때까지 지연 평가됩니다.C#를 온라인에서 연습할 수 있나요?
네. C# 플레이그라운드를 열어 이 치트시트의 어떤 코드든 브라우저에서 실행해 보세요 - SDK를 설치할 필요가 없습니다. 체계적으로 배우고 싶다면, Coddy의 무료 인터랙티브 C# 강좌가 변수와 반복문부터 클래스, 컬렉션, LINQ까지 단계별로 안내합니다.
이 치트시트는 초보자에게 적합한가요?
네. 가장 흔한 구성 요소(타입, 제어 흐름, 메서드)부터 고급 요소(LINQ, async, 제네릭)까지 순서대로 정리되어 있어, 첫날부터 상단 섹션을 사용하고 점차 나머지로 넓혀갈 수 있습니다.