01. C# 시작하기
C#은 마이크로소프트가 만든 정적 타입 언어로, 게임(Unity), 웹(ASP.NET), 데스크톱, 모바일까지 두루 쓰입니다. 이 단원에서는 .NET 8 SDK를 설치하고, 콘솔 프로젝트를 만들어 직접 실행해 봅니다.
이 강의에서 배우는 것
- 1.NET 8 LTS의 의미와 SDK/Runtime의 차이를 안다
- 2IDE(Visual Studio / VS Code / Rider) 중 하나를 골라 설치한다
- 3`dotnet new console`로 첫 프로젝트를 만든다
- 4`dotnet run`으로 실행하고 결과를 확인한다
- 5`Console.WriteLine` / `Console.ReadLine` 으로 간단한 입출력을 한다
소개
C#은 마이크로소프트가 만든 정적 타입 언어로, 게임(Unity), 웹(ASP.NET), 데스크톱, 모바일까지 두루 쓰입니다. 이 단원에서는 .NET 8 SDK를 설치하고, 콘솔 프로젝트를 만들어 직접 실행해 봅니다.
핵심 개념
1) .NET 이란?
**.NET**은 C#, F#, VB.NET 같은 언어를 실행해 주는 런타임 + 표준 라이브러리 + SDK의 묶음입니다. 한 번 작성한 코드를 Windows/macOS/Linux에서 모두 돌릴 수 있습니다.
- **.NET 8 LTS**: 2023년 11월 공개된 장기 지원(Long Term Support) 버전. 2026년 11월까지 공식 지원.
- **SDK**: 개발에 필요한 컴파일러·도구 모음 (`dotnet` CLI 포함)
- **Runtime**: 만든 프로그램을 실행만 할 때 필요한 최소 구성요소
2) SDK 설치 확인
설치 후 터미널에서 아래 명령어로 확인합니다.
dotnet --version
# 출력 예: 8.0.xxx`8.0` 으로 시작하면 OK. 만약 명령어가 없다고 나오면 [https://dotnet.microsoft.com/download](https://dotnet.microsoft.com/download) 에서 **.NET 8 SDK** 를 받아 설치하세요.
3) IDE 선택
- **Visual Studio 2022 (Windows)** — 무거우나 통합 환경 최강
- **VS Code + C# Dev Kit (크로스 플랫폼)** — 가볍고 빠름, 추천
- **JetBrains Rider** — 유료지만 강력한 리팩토링
이 강의는 IDE에 구애받지 않습니다. 어떤 것이든 `dotnet` CLI 로 동작은 같습니다.
4) 첫 프로젝트 만들기
dotnet new console -o HelloApp
cd HelloApp
dotnet run- `dotnet new console` : 콘솔 앱 템플릿 생성
- `-o HelloApp` : `HelloApp` 폴더에 생성
- `dotnet run` : 빌드(필요 시 `restore` 자동) → 실행
처음 실행 시 `Hello, World!` 가 출력됩니다.
5) Top-level statements
.NET 6 이후 `Main` 메서드를 생략하고 곧바로 코드를 쓸 수 있습니다.
// Program.cs
Console.WriteLine("안녕하세요!");`Console.WriteLine` 은 줄바꿈 포함 출력, `Console.Write` 는 줄바꿈 없이 출력합니다.
핵심 예제
예제 1 — `HelloApp/Program.cs` : 가장 기본
// 첫 C# 프로그램
Console.WriteLine("Hello, C# !");**실행 결과**
Hello, C# !**메모:** 세미콜론(`;`)을 빼먹지 마세요. C#은 줄바꿈이 아니라 `;`로 문장을 구분합니다.
예제 2 — `Echo/Program.cs` : 입력 받아 인사
Console.Write("이름을 입력하세요: ");
string? name = Console.ReadLine();
Console.WriteLine($"안녕하세요, {name}님!");**실행 결과**
이름을 입력하세요: 지수
안녕하세요, 지수님!**메모:** `Console.ReadLine()` 은 입력이 없을 경우 `null` 을 반환할 수 있어 타입이 `string?` 입니다. (자세한 내용은 2단원에서)
예제 3 — `MultiPrint/Program.cs` : 여러 줄 + 문자열 보간
string product = "사과";
int count = 3;
int price = 1500;
Console.WriteLine("=== 구매 내역 ===");
Console.WriteLine($"상품: {product}");
Console.WriteLine($"수량: {count}개");
Console.WriteLine($"합계: {count * price}원");**실행 결과**
=== 구매 내역 ===
상품: 사과
수량: 3개
합계: 4500원**메모:** `$"..."` 안의 `{ }` 는 표현식을 그대로 넣을 수 있습니다. 이를 **문자열 보간(string interpolation)** 이라 부릅니다.
전체 예제 코드 (src/)
src/Echo/Echo.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<RootNamespace>CodingNow.Lecture.Basics01</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
src/Echo/Program.cs
// 사용자 이름을 받아 인사
Console.Write("이름을 입력하세요: ");
string? name = Console.ReadLine();
Console.WriteLine($"안녕하세요, {name}님!");
src/HelloApp/HelloApp.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<RootNamespace>CodingNow.Lecture.Basics01</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
src/HelloApp/Program.cs
// 첫 C# 프로그램
Console.WriteLine("Hello, C# !");
src/MultiPrint/MultiPrint.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<RootNamespace>CodingNow.Lecture.Basics01</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
src/MultiPrint/Program.cs
// 여러 줄 출력 + 문자열 보간
string product = "사과";
int count = 3;
int price = 1500;
Console.WriteLine("=== 구매 내역 ===");
Console.WriteLine($"상품: {product}");
Console.WriteLine($"수량: {count}개");
Console.WriteLine($"합계: {count * price}원");
자주 하는 실수
- `Console.Writeline` 처럼 대소문자를 틀린다 — C#은 **대소문자 구분**.
- 문장 끝 `;` 누락 — 컴파일 에러.
- `$` 없이 `"{name}"` 만 써서 `{name}` 그대로 출력됨.
- `dotnet run` 을 프로젝트 폴더 밖에서 실행해 "프로젝트를 찾을 수 없다" 에러가 남.
- `.NET Framework 4.x` 와 `.NET 8` 을 혼동 — 이 강의는 **.NET 8** (Core 계열) 기준.
정리
- .NET 8 SDK 설치 후 `dotnet --version` 으로 확인한다
- `dotnet new console -o 이름` → `dotnet run` 이 기본 흐름이다
- `Console.WriteLine` 으로 출력, `Console.ReadLine` 으로 입력 받는다
- `$"..."` 문자열 보간으로 변수를 깔끔하게 끼워 넣는다
과제
**과제 - 01. C# 시작하기**
문제 1 — 자기 소개 출력기
- 프로젝트 폴더: `Homework01/`
- 핵심 개념: `Console.WriteLine`, 문자열 보간
요구사항
- 이름, 나이, 사는 도시 변수 3개를 선언한다
- 다음 형식으로 출력한다:
``` 안녕하세요! 제 이름은 OOO이고, 나이는 OO세입니다. 저는 OO에 살고 있습니다. ```
예상 출력
안녕하세요!
제 이름은 지수이고, 나이는 25세입니다.
저는 서울에 살고 있습니다.힌트
- 변수는 `string name = "지수";` 처럼 선언한다
- 문자열 보간 `$"제 이름은 {name}..."` 을 활용한다
문제 2 — 현재 시각과 함께 인사
- 프로젝트 폴더: `Homework02/`
- 핵심 개념: `DateTime.Now`, 문자열 보간
요구사항
- 사용자에게 이름을 입력받는다
- 현재 시각을 함께 출력한다 (`DateTime.Now` 사용)
예상 출력
이름: 민수
민수님, 안녕하세요!
지금 시각은 2025-05-18 14:30:00 입니다.힌트
- 시각 포맷은 `$"{DateTime.Now:yyyy-MM-dd HH:mm:ss}"` 와 같이 쓸 수 있다
- `Console.ReadLine()` 의 반환 타입은 `string?` 이다
정답 확인
직접 풀어 본 후 [`answer/`](./answer/) 폴더의 정답과 비교해 보세요.
정답 (answer/)
homework/answer/Homework01/Homework01.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<RootNamespace>CodingNow.Lecture.Basics01</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
homework/answer/Homework01/Program.cs
// 자기 소개 출력기
string name = "지수";
int age = 25;
string city = "서울";
Console.WriteLine("안녕하세요!");
Console.WriteLine($"제 이름은 {name}이고, 나이는 {age}세입니다.");
Console.WriteLine($"저는 {city}에 살고 있습니다.");
homework/answer/Homework02/Homework02.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<RootNamespace>CodingNow.Lecture.Basics01</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
homework/answer/Homework02/Program.cs
// 현재 시각과 함께 인사
Console.Write("이름: ");
string? name = Console.ReadLine();
Console.WriteLine($"{name}님, 안녕하세요!");
Console.WriteLine($"지금 시각은 {DateTime.Now:yyyy-MM-dd HH:mm:ss} 입니다.");
직접 해 보기
cd src/HelloApp
dotnet run
cd ../Echo
dotnet run
cd ../MultiPrint
dotnet run왜 C# 인가 — 입문자가 알아두면 좋은 강점
C# 은 Microsoft 가 2000년 발표 후 25년째 다듬어 온 정적 타입·객체지향 언어입니다. **.NET 생태계의 표준 언어** 이며, 2020년 .NET 5 통합 이후로는 Windows·macOS·Linux 어디서나 동일하게 동작하는 진정한 크로스플랫폼 언어가 되었습니다.
1) Java 와 닮았지만 더 "실용적"
문법은 Java 와 80% 유사하지만, C# 은 매년 새 버전(`record`, `init` 접근자, `global using`, top-level statements 등) 으로 보일러플레이트를 꾸준히 줄여 왔습니다. `Program.cs` 단 4줄로 hello world 가 끝나는 것이 그 예입니다.
// .NET 6+ top-level statements — Java 의 'public static void main' 없음
Console.WriteLine("Hello, C#!");
var name = "지수";
Console.WriteLine($"안녕, {name}!");2) 무엇을 만들 수 있나
- **웹 백엔드** — ASP.NET Core (Stack Overflow 가 사용. 초당 수만 요청 처리)
- **게임** — Unity (전 세계 인디 게임의 절반 이상)
- **데스크톱 앱** — WPF / WinUI / Avalonia / MAUI
- **모바일 (iOS/Android)** — .NET MAUI
- **클라우드 함수** — Azure Functions / AWS Lambda
- **CLI 도구** — System.CommandLine + AOT 컴파일
3) 산업 현장에서
금융권·게임 회사·SaaS 백엔드에서 광범위하게 사용됩니다. 한국에서도 NEXON·NCSoft 같은 게임사 (Unity 클라이언트), 금융 IT (트레이딩 시스템), 정부·공공 (Windows Server 기반) 등에서 채용 수요가 꾸준합니다.
자주 묻는 질문 (FAQ)
Q1. .NET 8 과 .NET 9 중 어느 쪽을 쓰나요?
**.NET 8 (LTS, 2026년 11월까지 지원) 권장**. 본 강의는 .NET 8 기준입니다. .NET 9 는 STS(Standard Term Support)로 18개월만 지원되어 실무·학습 모두 장기 안정성이 떨어집니다. 다음 LTS 는 .NET 10 (2025년 11월 출시 예정). 일반 학습은 LTS 만 깔면 충분합니다.
Q2. Visual Studio 와 VS Code 의 차이는?
**Visual Studio (Community)** 는 Windows/macOS 전용의 풀 IDE — 디버거·프로파일러·디자이너가 강력. **VS Code + C# Dev Kit** 은 가볍고 크로스플랫폼. 입문은 어느 쪽이든 OK 입니다. Unity·WPF·WinForms 같은 GUI 개발은 Visual Studio 가 압도적, 백엔드·CLI 는 VS Code 도 충분합니다.
Q3. `Program.cs` 에 클래스 없이 `Console.WriteLine` 만 적혀있던데 이게 정상인가요?
네, .NET 6 이후 도입된 **top-level statements** 기능입니다. 컴파일러가 자동으로 `Program` 클래스와 `Main` 메서드를 감싸줍니다. 작은 프로그램/스크립트에 편리합니다. 큰 프로젝트에서는 명시적으로 `class Program { static void Main() {...} }` 를 쓰는 경우도 많습니다.
Q4. `.csproj` 파일은 직접 편집해야 하나요?
대부분 IDE 가 자동으로 관리해 줍니다. 패키지 추가는 `dotnet add package` 명령 한 줄이면 `.csproj` 가 자동 갱신됩니다. 다만 `Nullable` / `ImplicitUsings` / `TargetFramework` 같은 핵심 속성은 한 번 직접 봐두면 도움이 됩니다.
Q5. C# 으로 Mac/Linux 도 진짜 잘 돌아가나요?
네, .NET 5 통합(2020) 이후 완전한 1급 플랫폼입니다. macOS 에서 `dotnet run` 으로 ASP.NET Core 백엔드를 띄우거나, Linux 컨테이너에 .NET 앱을 배포하는 것이 표준 워크플로우입니다. 한 가지 예외는 WPF/WinForms 같은 Windows 전용 GUI 프레임워크 — 이것들은 Linux 에서 안 됩니다(대안: Avalonia, MAUI).
Q6. Unity 게임 개발도 본 강의로 입문 가능한가요?
이 기초 6주차까지는 Unity 와 무관한 순수 C# 문법입니다. 변수·조건문·반복문·클래스를 익히면 Unity 의 `MonoBehaviour` / `Update()` 패턴이 훨씬 빠르게 이해됩니다. 즉, **본 강의 → Unity 공식 튜토리얼** 순으로 가는 것이 정석입니다.
다음 단원
[02_변수와_타입](../02_변수와_타입/) — 값을 담는 그릇, 변수와 타입을 익힙니다.