Why C#?


  1. C#์˜ ์ •์ฒด์„ฑ

    • Microsoft๊ฐ€ ๋งŒ๋“  ํ˜„๋Œ€์  ๋‹ค์ค‘ ํŒจ๋Ÿฌ๋‹ค์ž„ ์–ธ์–ด (OOP, ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋“ฑ ์ง€์›)
    • ๊ฐ•๋ ฅํ•œ ํƒ€์ž… ์‹œ์Šคํ…œ, ๊ฐ„๊ฒฐํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฌ์šด ๋ฌธ๋ฒ•, ๊พธ์ค€ํ•œ ์ง„ํ™” ๋ฐ ์˜คํ”ˆ์†Œ์Šคํ™”
    • ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ(Windows, Linux, Mac ๋“ฑ)์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅ, .NET ๊ธฐ๋ฐ˜
  2. ์–ธ์–ด ํŠน์„ฑ

    • ๊ฐ์ฒด์ง€ํ–ฅ, ์ œ๋„ค๋ฆญ, ๋žŒ๋‹ค, LINQ, async/await, ๋ฉ”๋ชจ๋ฆฌ ์ž๋™๊ด€๋ฆฌ(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜)
    • ๊น”๋”ํ•œ ํ”„๋กœํผํ‹ฐ, immutable ๊ฐ์ฒด๋ฅผ ์œ„ํ•œ record, ๋ฉ”์„œ๋“œ ์ฐธ์กฐ(๋ธ๋ฆฌ๊ฒŒ์ดํŠธ)
    • null ์•ˆ์ „์„ฑ, ํŒจํ„ด ๋งค์นญ, ์ปฌ๋ ‰์…˜ ํ‘œํ˜„์‹ ๋“ฑ ์ตœ์‹  ๋ฌธ๋ฒ• ๋‹ค์ˆ˜ ์ง€์›
  3. .NET ์ƒํƒœ๊ณ„

    • .NET 9 ๋“ฑ ๋‹ค์ˆ˜ ๋Ÿฐํƒ€์ž„(.NET Core, Mono, UWP)
    • ASP.NET Core(์›น), Blazor(์›น ํ”„๋ก ํŠธ์—”๋“œ), MAUI(ํฌ๋กœ์Šคํ”Œ๋žซํผ ์•ฑ), Unity(๊ฒŒ์ž„), ML.NET(๋จธ์‹ ๋Ÿฌ๋‹) ๋“ฑ ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ
    • NuGet ํŒจํ‚ค์ง€ ์ˆ˜์‹ญ๋งŒ ๊ฐœ, ํ’๋ถ€ํ•œ ํ‘œ์ค€/์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  4. ๊ฐ•๋ ฅํ•œ ๊ฐœ๋ฐœ ๋„๊ตฌ

    • Visual Studio(๋Œ€ํ‘œ IDE), VS Code, JetBrains Rider ๋“ฑ ๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
    • .NET CLI๋กœ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ/๋นŒ๋“œ/ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ์šฉ์ด
    • ๋›ฐ์–ด๋‚œ ๋””๋ฒ„๊น…, ๋ฆฌํŒฉํ† ๋ง, ์ฝ”๋“œ ๋ถ„์„ ๊ธฐ๋Šฅ
  5. ๋ฌธ์„œ์™€ ํ•™์Šต ์ž๋ฃŒ

    • Microsoft ๊ณต์‹๋ฌธ์„œ(learn.microsoft.com) ๋ฐ ๋ฐฉ๋Œ€ํ•œ ํŠœํ† ๋ฆฌ์–ผ, C# ์ „์šฉ ์„œ์  ๋‹ค์ˆ˜, ์ปค๋ฎค๋‹ˆํ‹ฐ ์ œ๊ณต ์ž๋ฃŒ ํ’๋ถ€
    • ์ ์ง„์  ํ•™์Šต ๊ฐ€๋Šฅ(์ดˆ๋ณด์ž-์ˆ™๋ จ์ž ๋ชจ๋‘ ๋Œ€์‘)
  6. ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ์„ฑ์žฅ์„ฑ

    • Microsoft ๊ณต์‹/๋น„๊ณต์‹ ์ปค๋ฎค๋‹ˆํ‹ฐ, .NET Foundation, Reddit, Discord, ์ „ ์„ธ๊ณ„ ๋ฐ‹์—…๊ณผ ํ–‰์‚ฌ(Microsoft Build, .NET Conf)
    • ์˜คํ”ˆ์†Œ์Šค ์ฐธ์—ฌ, ํ™œ๋ฐœํ•œ ๊ธฐ์ˆ  ํ”ผ๋“œ๋ฐฑ ๋ฌธํ™”
  7. ์ธ๊ธฐ์™€ ์‹œ์žฅ ์ƒํ™ฉ

    • TIOBE, Stack Overflow, PyPL ์ง€์ˆ˜์—์„œ ์ƒ์œ„๊ถŒ ์œ ์ง€
    • ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ, ์›น, ๊ฒŒ์ž„(Unity), iOS/Android, ๋น…๋ฐ์ดํ„ฐ, AI ๋“ฑ ์ทจ์—…์‹œ์žฅ ๊ฐ•์„ธ
    • ์—ฐ๋ด‰๋„ ์ƒ์œ„๊ถŒ(์œ ๋Ÿฝ/๋ฏธ๊ตญ ๊ธฐ์ค€ 10๋งŒ~30๋งŒ ๋‹ฌ๋Ÿฌ๋Œ€)
  8. ํƒ€ ์–ธ์–ด์™€์˜ ๋น„๊ต

    • Java: ์œ ์‚ฌํ•˜์ง€๋งŒ C#์ด ๋” ์ง„ํ™”ํ•œ ๊ธฐ๋Šฅ๊ณผ ์ƒ์‚ฐ์„ฑ, ๋” ํ˜„๋Œ€์ ์ž„
    • Python: C#์ด ์†๋„/์ •์  ํƒ€์ž…/๋Œ€๊ทœ๋ชจ ์•ฑ์— ๊ฐ•์ , Python์€ ์Šคํฌ๋ฆฝํŒ…/๊ณผํ•™๊ณ„์‚ฐ
    • F#: ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŠนํ™”, C#์€ ๋ฒ”์šฉ/์ƒํƒœ๊ณ„ ํผ
    • JS/TS: ์›น ํ”„๋ก ํŠธ๋Š” JS, C#์€ Blazor๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅ, ๋ฐฑ์—”๋“œ๋Š” C#์ด ์„ฑ๋Šฅ/๋””๋ฒ„๊น…/ํˆด๋ง์—์„œ ์šฐ์œ„
  9. ๋ฏธ๋ž˜์™€ ์ „๋ง

    • ์ง€์†์ ์œผ๋กœ ํ˜์‹  ์ค‘(๋งค๋…„ ์—…๊ทธ๋ ˆ์ด๋“œ, ์‹ ๊ธฐ๋Šฅ ์ถœ์‹œ)
    • ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ํ˜‘์—…ํ•˜๋ฉฐ, backwards compatibility(๊ธฐ์กด ์ฝ”๋“œ ํ˜ธํ™˜์„ฑ)๋„ ๋ณด์žฅ
    • ๋ธ”๋ ˆ์ด์ €(Blazor) ๋“ฑ ์›น/ํด๋ผ์šฐ๋“œ๋กœ ์˜์—ญ ํ™•์žฅ
  10. ๊ฒฐ๋ก 

    • ์„ฑ๋Šฅ, ๊ฐ€๋…์„ฑ, ์ƒ์‚ฐ์„ฑ, ๋‹ค์žฌ๋‹ค๋Šฅํ•จ, ์ƒํƒœ๊ณ„, ์ปค๋ฎค๋‹ˆํ‹ฐ, ๊ณ ์—ฐ๋ด‰ ๋“ฑ์˜ ์ด์œ ๋กœ โ€œ๋งŒ๋Šฅ ์–ธ์–ดโ€์— ๊ฐ€๊นŒ์›€
    • ์ดˆ๋ณด์ž-์ „๋ฌธ๊ฐ€ ๋ชจ๋‘์—๊ฒŒ ์ถ”์ฒœํ•  ๋งŒํ•œ ๊ท ํ˜• ์žกํžŒ ์–ธ์–ด
  11. ๋ณด๋„ˆ์Šค: ์ฃผ์š” ์—ญ์‚ฌ

    • 2000๋…„๋Œ€ ์ดˆ ๋“ฑ์žฅ โ†’ C# 1.0 ~ 13.0๊นŒ์ง€ ์ง„ํ™”
    • ์ œ๋„ค๋ฆญ, LINQ, async/await ๋“ฑ ํ˜์‹  ๊ธฐ๋Šฅ ์ฃผ๋„, .NET Core/5/6/7/8/9๋กœ ์ƒํƒœ๊ณ„ ํ™•์žฅ
9๊ฐœ์˜ ์ข‹์•„์š”

์ •์น˜๊ฐ€ ์•ˆ์ •๋˜๋ฉด, ๊ณต๊ณต ๋ถ„์•ผ์—์„œ ๋…์ ํ™” ๋˜์–ด ์žˆ๋Š” Hwp, Java ๊ฐ•์ œ๋ฅผ ํ•ด์ง€ํ•˜๋ผ๊ณ  ๊ตญ๋ฏผ ์ฒญ์› ๋„ฃ์์‹œ๋‹ค.

8๊ฐœ์˜ ์ข‹์•„์š”

C#์€ ์ •๋ง ์•ˆ์ •์ ์ด๊ณ  ๋งŒ๋Šฅ์ธ ์–ธ์–ด ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฐ์Šคํฌํƒ‘, ์•ฑ, ์›น ํ•œ๊ฐ€์ง€ ์–ธ์–ด๋กœ ๋‹ค๋˜๋Š” ์–ธ์–ด๋Š” ํ”์น˜ ์•Š์„ ๊ฒƒ ๊ฐ™๋„ค์š”.

6๊ฐœ์˜ ์ข‹์•„์š”

์ค‘๊ตญ์€ C#์ด ์ž๋ฐ”๋ณด๋‹ค ์ธ๊ธฐ๊ฐ€ ๋†’๋˜๋ฐ

ํ•œ๊ตญ์€ ์ „์ž์ •๋ถ€ํ”„๋ ˆ์ž„์›Œํฌ ๋•Œ๋ฌธ์— ํž˜๋“ค๋“ฏ

7๊ฐœ์˜ ์ข‹์•„์š”

C# ํŽธํ•˜๊ธด ํ•œ๋ฐ GC on/off ๋˜๋ฉด ์™„๋ฒฝ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
xml๋„ ์ข€ ๋ฒ„๋ฆฌ๊ณ โ€ฆ ์“ธ๋ฐ ์—†์ด ๋งŽ์€ ํŒŒ์ผ ์ฐŒ๋„๋ ˆ๊ธฐ๋„ ์ข€ ๋ฒ„๋ฆฌ๊ณ โ€ฆ ๋ฐฐํฌ ์ข€ ์‹ฌํ”Œํ•ด์ง€๋ฉด ๋” ์™„๋ฒฝํ• ํ…๋ฐโ€ฆ

3๊ฐœ์˜ ์ข‹์•„์š”

์„ค๋งˆ wpf xaml์„ ์–˜๊ธฐํ•˜๋Š” ๊ฑด ์•„๋‹ˆ์‹œ์ฃ ?
์ €๋Š” xaml, ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์žฅ์ /๋‹จ์ ์ด ์žˆ์ง€๋งŒ,
์ด xaml(UI)๋ฅผ ๋ณต์‚ฌํ•ด์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ๋„ ๋„ˆ๋ฌด ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

4๊ฐœ์˜ ์ข‹์•„์š”

yaml, toml ์ข‹์€ ํฌ๋งท ์žˆ์ž–์•„์š”
๊ตฌ๋‹ฅ๋‹ค๋ฆฌ xml ํฌ๋งท ์ •๋ง ๋ณด๊ธฐ ์‹ซ์–ด์š” ใ… 

2๊ฐœ์˜ ์ข‹์•„์š”

xaml์ด ui๋ฅผ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ ๊ทธ๊ฑธ yaml๋กœ ๊ฐ€๋ฉด ์Šคํฌ๋กค์˜ ์••๋ฐ•์ดโ€ฆ

xaml์— attribute ๋ฐฉ์‹์œผ๋กœ ์„ค์ •์ด ์ถ”๊ฐ€๋˜๋ฏ€๋กœ xml ๋ฐฉ์‹์ด ์ข‹์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์•„๋งˆ ๋ญ ๋ฌธ๋ฒ• ๋ฐ”๊พธ๋Š”๊ฒŒ ์–ด๋ ค์šด๊ฑด ์•„๋‹ˆ๊ฒ ์ง€๋งŒ(converter๋งŒ ์žˆ์œผ๋ฉด)
๊ทผ๋ฐ ๊ทธ๊ฒŒ ์•„๋‹ˆ๋ฉด yaml, toml์€ ui๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ™”๋ฉด์— ๋งž์„์ง€๋Š” ์ƒ๊ฐ์„ ์ข€๋” ํ•ด๋ด์•ผ ํ•˜์ง€ ์•Š์„๊นŒ์š”

2๊ฐœ์˜ ์ข‹์•„์š”

xml ์‹ซ์–ดํ•˜๋Š” ๊ฑด ๊ฐœ์ธ ์ทจํ–ฅ์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ
xaml ์ฝ”๋”ฉํ•˜๋ฉด์„œ ui ๋งŒ๋“œ๋Š” ๊ฒŒ ๋„ˆ๋ฌด ํ˜„ํƒ€ ์˜ต๋‹ˆ๋‹ค. ๊ณผ์—ฐ ์ด๊ฒŒ ์‹œ๋Œ€์— ๋งž๋Š” ๋ฐฉ๋ฒ•์ธ์ง€โ€ฆ
c# ์–ธ์–ด ๋ฐœ์ „์— ๋น„ํ•ด ๊ฐœ๋ฐœํˆด์€ ๊ฐœ๋–ก ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

3๊ฐœ์˜ ์ข‹์•„์š”

์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ XAML์„ ํ†ตํ•œ ์„ ์–ธํ˜• UI ๋ฐฉ์‹์˜ ์œ ์—ฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ, ๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ฐœ ํˆด์ด ์ œ๊ณตํ•˜๋Š” ์ƒ์‚ฐ์„ฑ์— ๋งค์šฐ ๋งŒ์กฑํ•˜๊ณ  ์žˆ๋Š”๋ฐ์š”. ๋ฌผ๋ก  ๊ธฐ๋ณธ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ถˆํŽธํ•จ์„ ํ•ด์†Œํ•˜๊ธฐ ์œ„ํ•ด ์ธํ•˜์šฐ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ฑฐ๋‚˜, ์ž…๋ง›์— ๋งž๋Š” ๋นŒ๋“œ๋‚˜ ๋ฐฐํฌ ๊ตฌ์„ฑ์„ ๋งˆ๋ จํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ธฐ๋Š” ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

4๊ฐœ์˜ ์ข‹์•„์š”

์ €๋„ xaml ์ด ๋งŽ์ด ๋ถˆํŽธํ•˜๋‹ค๊ณ  ์ƒ๊ฐ์€ ํ•˜๋Š”๋ฐ, ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์ด๋ฉด ๋ชฐ๋ผ๋„, UI ๋„๊ตฌ๋กœ yaml, toml ์€ ๋„ˆ๋ฌด ๋นˆ์•ฝํ•  ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ญ๋‹ˆ๋‹ค.

๊ตฌ๊ธ€๋„ yaml ๊ธฐ๋ฐ˜ UI ํ”„๋ ˆ์ž„์›Œํฌ ์‹œ๋„ํ•˜๋‹ค๊ฐ€ ์‹คํŒจํ•œ ๋“ฏ ๋ณด์ž…๋‹ˆ๋‹ค.

์‚ฌ์‹ค C# ์œ ์ €์—๊ฒŒ๋Š” ๋ธ”๋ ˆ์ด์ €๋ผ๋Š” ๊ฑธ์ถœํ•œ ๋„๊ตฌ๊ฐ€ ์ด๋ฏธ ์žˆ๊ณ , WPF, ์œˆํผ, Maui ๋ชจ๋‘ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ์‚ฌ์‹ค ์™œ ์•„์ง๋„ ๋ธ”๋ ˆ์ด์ € ์•ˆ ์“ฐ๊ณ  XAML ๋งŒ ์“ฐ๋Š” ์ง€ ์ดํ•ด๊ฐ€ ์•ˆ ๊ฐ€๊ธฐ๋Š” ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ๋„ ํŠน์ • ํšŒ์‚ฌ์˜ ์œ ๋ฃŒ ํ”„๋ ˆ์ž„์›Œํฌ์— ์ข…์†๋˜๋Š” ๊ฒฝ์šฐ๋„ ์ ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์€๋ฐ ๋ง์ด์ฃ .

6๊ฐœ์˜ ์ข‹์•„์š”

ใ…Žใ…Žใ…Žใ…Ž ์ด๋ฏธ ์„ธ์ƒ์€ ์ž๋ฐ” ์ฒœ๊ตญโ€ฆ ์•„์˜ค ์งฑ๋‚˜
์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์žฅ์—์„œ ๋ฐ€๋ ค ๋‚œ์ง€ ์˜ค๋ž˜โ€ฆ
๊ณต์งœ ์ข‹์•„ ํ•˜๋Š” ๋Œ€ํ•œ๋ฏผ๊ตญ์—์„œ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Œโ€ฆ
์ฒœ์ƒ ํ”„๋ก ํŠธ์—”๋“œ ๋‚˜ ๊นจ์ž‘ ๊ฑฐ๋ ค์•ผํ•  ํŒ”์ž ใ… ใ… 

2๊ฐœ์˜ ์ข‹์•„์š”