Program.cs 의 거짓 #8

좜처: C# Hard Truths: Program.cs was a Lie, Startup.cs is a Waste of Space, and more... - YouTube

아티클 λ³΄μ‹œκΈ°μ „μ— μ €λŠ” μ˜μ–΄λ₯Ό λͺ»ν•©λ‹ˆλ‹€. μœ νŠœλ²„ λ²ˆμ—­κΈ°λ₯Ό
μ‚¬μš©ν•˜λ‹€λ³΄λ‹ˆ μ œκ°€ 잘λͺ»μ΄ν•΄ν• μˆ˜λ„ μžˆμœΌλ‹ˆ μ°Έκ³  바라면 ν•΄λ‹Ή κ°•μ’Œλ₯Ό 직접 μ‹œμ²­ν•΄λ³΄μ‹œκ³ 
μ§€μ ν•΄μ£Όμ‹œλ©΄ μˆ˜μ •ν•˜κ² μŠ΅λ‹ˆλ‹€. 그리고 1μ‹œκ°„ 짜리 κ°•μ˜λ₯Ό λ΄€λŠ”λ° μ†”μ§νžˆ ν°λ‚΄μš©μ΄ μ—†μ–΄μ„œ μ˜€λŠ˜λ„ pick을 잘λͺ»ν•œκ²ƒ κ°™μ•„ κ΄΄λ‘­μŠ΅λ‹ˆλ‹€.γ… γ… 


program.csλŠ” 거짓이닀. λ‹€μ†Œ μ΄μƒν•œ λͺ…μ œλ‘œ μ‹œμž‘ν•˜λŠ” κ°•μ’Œμž…λ‹ˆλ‹€.
program.csλŠ” .net6 κΉŒμ§€λŠ” μš”μ‹ ν–‰μœ„μ˜€μŠ΅λ‹ˆλ‹€. startup.cs λŠ” λ‚­λΉ„μ˜€μŠ΅λ‹ˆλ‹€.



vs2022μ—μ„œ console ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€μ–΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

버전은 5.0을 μ„ νƒν•˜κ² μŠ΅λ‹ˆλ‹€.


using System;

namespace oldconsole
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

μ΅μˆ™ν•œ templateμž…λ‹ˆλ‹€.

.net 7.0으둜 console을 μƒμ„±ν•˜κ² μŠ΅λ‹ˆλ‹€.

Console.WriteLine("Hello, World!");

κ°‘μžκΈ° λ°”λ€Œμ–΄ μˆ˜λ§Žμ€ .Net κ°œλ°œμžλ“€μ„ κ΄΄λ‘­ν˜”λ˜ μƒˆλ‘œμš΄ templateμž…λ‹ˆλ‹€.
훨씬 simple ν•˜μ§€λ§Œ 이 문법은 아직도 λ‚―μ„­λ‹ˆλ‹€.(개인차)
new templateμ—μ„œλŠ” using을 λͺ…μ‹œμ μœΌλ‘œ μ„ μ–Έλ˜μžˆμ§€ μ•Šμ§€λ§Œ
μˆ¨κ²¨μ Έμžˆμ–΄ System.Console.WriteLine μ•„λ‹Œ Console.WriteLine
단좕 μ‚¬μš©μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.
이건 κ°œλ°œμžμ— 따라 ν˜ΈλΆˆν˜Έκ°€ μžˆλŠ” ms의 κ°€μ΄λ“œμž…λ‹ˆλ‹€.
λ§Žμ€κ²ƒμ΄ μƒλž΅λμŠ΅λ‹ˆλ‹€. μ•„λ‹ˆ κ°μΆ”μ–΄μ ΈμžˆμŠ΅λ‹ˆλ‹€.

Console.WriteLine("Hello, World!");
Console.WriteLine("zzz");
Console.WriteLine(args[0]);

심지어 args 선언적 λ³€μˆ˜λ„ κ°μΆ”μ–΄μ ΈμŠ΅λ‹ˆλ‹€.
이 μƒˆλ‘œμš΄ TemplateλŠ” κΈ°μ‘΄κ³Ό 많이 λ‹€λ¦…λ‹ˆλ‹€.

예λ₯Όλ“€μ–΄ Test λΌλŠ” 둜컬 Methodλ₯Ό μ„ μ–Έν–ˆμ„λ•Œ λͺ¨μŠ΅μž…λ‹ˆλ‹€.
μƒλ‹Ήνžˆ κΉ”λ”ν•˜κ³  codeκ°€ 쀄어든것을 μ•Œμˆ˜μžˆμŠ΅λ‹ˆλ‹€.

심지어 main ν•¨μˆ˜μ—μ„œλŠ” namespace κΉŒμ§€ μƒλž΅λœκ²ƒμ„ λ³Όμˆ˜μžˆμŠ΅λ‹ˆλ‹€.
Why ?? μ™œμΌκΉŒμš” ? namespace 의 μš©λ„λŠ” λ‹€λ₯Έκ³³μ—μ„œ μ°Έμ‘°ν•˜κΈ° μœ„ν•΄μ„œμž…λ‹ˆλ‹€.main은 μ°Έμ‘°ν•  μ΄μœ κ°€ μ—†κΈ° λ•Œλ¬Έμ΄λΌκ³  ν•©λ‹ˆλ‹€.그리고 main methodλŠ” ν•œλ²ˆλ§Œ 호좜되고 거의 λ³€κ²½ν•  일이 μ—†λŠ” μ΅œμƒμœ„ λ¬Έμž…λ‹ˆλ‹€.


ν•˜μ§€λ§Œ 이점은 junior κ°œλ°œμžμ—κ²Œ λ…μ΄μ§€λ§Œ μ‹œλ‹ˆμ–΄ κ°œλ°œμžμ—κ²Œ 쒋은 κ²½ν—˜μΌμˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

μ—¬κΈ°κΉŒμ§€ μ œκ°€ μ œλŒ€λ‘œ μ΄ν•΄ν–ˆλŠ”μ§€ λͺ¨λ₯΄μ§€λ§Œ tim μ•„μ €μ”¨κ»˜μ„œλŠ” console μ—μ„œλŠ”
쒋은 λ°©λ²•μœΌλ‘œ μ—¬κΈ°λŠ”κ²ƒ κ°™μŠ΅λ‹ˆλ‹€.


이제 webν”„λ‘œμ νŠΈμ—μ„œ κΈ°μ‘΄
startup.cs κ°€ μ–Όλ§ˆλ‚˜ 곡간 낭비이고 ν˜Όλž€μ„ μ£ΌλŠ”μ§€ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.


λ‘κ°œμ˜ Razor μ›Ήμ•± ν”„λ‘œμ νŠΈλ₯Ό μƒμ„±ν•˜κ² μŠ΅λ‹ˆλ‹€.

ν•œκ°œλŠ” .net 5.0 templateμž…λ‹ˆλ‹€.

λ‹€λ₯Έ ν•œκ°œλŠ” 7.0 template μž…λ‹ˆλ‹€.


μ•„μ‹œλ‹€μ‹œν”Ό 5.0 template λŠ” 10개 μ΄μƒμ˜ using λ¬Έκ³Ό program,startup λ“±
λ³΅μž‘ν•œ ꡬ성을 ν•©λ‹ˆλ‹€.


μ™Όμͺ½ 5.0 였λ₯Έμͺ½ 7.0 ꡉμž₯ν•œ 변화이고 같은 λͺ©μ μ΄μ§€λ§Œ 맀우 λ§Žμ€ 차이λ₯Ό λ³΄μž…λ‹ˆλ‹€.
κΈ°μ‘΄ 5.0μ—μ„œ program.csλŠ” startup.csλ₯Ό λ‹¨μˆœ 호좜만 ν•΄μ£Όκ³  ν”„λ‘œκ·Έλž¨ μ§„μž…μ μ˜ μ—­ν• λ§Œ ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 7.0μ—μ„œλŠ” configuration,Configure methodλ₯Ό ν•˜λ‚˜μ˜ μ§„μž…μ μœΌλ‘œ λ‹¨μˆœν™”ν–ˆμŠ΅λ‹ˆλ‹€. 이것은 57쀄+27μ€„μ˜ codeλ₯Ό 25μ€„λ‘œ μ€„μ˜€μŠ΅λ‹ˆλ‹€.

그리고 μš°λ¦¬λŠ” global using을 ν™œμš©ν• μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.

λ°˜λ³΅λ˜λŠ” using 을 ν•œκ³³μ— λͺ°μ•„λ„£μ„μˆ˜ μžˆλŠ” 획기적인 λ°©λ²•μž…λ‹ˆλ‹€.
μ—¬κΈ°μ—μ„œ κ·ΈμΉ˜μ§€ μ•Šκ³  micro softλŠ” {} κ°€λ‘œλ„ μ—†μ•΄μŠ΅λ‹ˆλ‹€.
그리고 또 변화점은

μ΄ˆκΈ°κ°’λ„ 섀정이 κ°€λŠ₯ν•˜κ³ μš” ν•˜μ§€λ§Œ null ν—ˆμš©μ€ μœ„ν—˜ν•©λ‹ˆλ‹€. ? λ₯Ό 뢙이고 nullable
즉 null을 ν—ˆμš©ν•œλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.

λͺ…μ‹œμ  null의 κ΄€λ¦¬λŠ” μš°λ¦¬κ°™μ€ compile μ–Έμ–΄λ₯Ό λ‹€λ£¨λŠ” κ°œλ°œμžμ—κ²Œ μ€‘μš”ν•œ λ¬Έμ œμΌμˆ˜λ„
μžˆμŠ΅λ‹ˆλ‹€. msλŠ” 이것에 λŒ€ν•œ 선택 μ˜΅μ…˜μ„ μ œκ³΅ν–ˆμŠ΅λ‹ˆλ‹€.

μš”μ¦˜ TIM COREY λ‹˜μ˜ κ°•μ’ŒλŠ” 개발자둜 ν•˜μ—¬κΈˆ 이 방식이 어떠냐 이건 μ–΄λ–»κ²Œ μƒκ°ν•˜λƒλ“± 개발자의 μ„±ν–₯에 λŒ€ν•œ 화두λ₯Ό 많이 λ˜μ§€μ‹œλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

정말 1μ‹œκ°„μ˜ λ­”κ°€ μžˆμ–΄λ³΄μ΄λŠ” 제λͺ©μ˜ κ°•μ˜λ₯Ό λ³΄λ©΄μ„œ μ œκ°€ μ œλŒ€λ‘œ 이해λ₯Ό λͺ»ν•œκ²ƒμ΄κ² μ§€λ§Œ 큰 λ‚΄μš©μ΄ μ—†μ–΄μ„œ μ•½κ°„ μ–΅μšΈν•©λ‹ˆλ‹€. γ… γ…  μ•„λ§ˆ tim μ„ μƒλ‹˜μ˜ κ°•μ˜λ₯Ό 직접 μˆ˜κ°•ν•΄μ•Ό 100% λ‚΄μš©μ΄ λ‚˜μ˜€λŠ”μ§€ …

11개의 μ’‹μ•„μš”

λ‹¨μˆœνžˆ β€œμ΅œμƒμœ„ λ¬Έ μ‚¬μš©β€ 여뢀에 λ”°λ₯Έ 차이일뿐인데, 이걸 μ™œ was a lie라고 ν‘œν˜„ν•œκ±ΈκΉŒμš”?

1개의 μ’‹μ•„μš”

μˆ¨κ²¨μ§€λŠ” 뢀뢄이 λ„ˆλ¬΄ λ§Žμ§€ μ•Šλ‚˜ κ±±μ •ν•˜λŠ” 게 μ•„λ‹κΉŒ ν•˜λŠ” 좔츑을 ν•΄λ΄…λ‹ˆλ‹€ γ…Žγ…Ž

μ΅œκ·Όλ“€μ–΄ .NET7 으둜 λ°±μ—”λ“œ κ°œλ°œμ„ μ‹œμž‘ν•œ μ €λ‘œμ„œλŠ”
λ‹€λ₯Έ λΆ€λΆ„λ³΄λ‹€λŠ” μ•„μ§κΉŒμ§€ μˆ˜λ§Žμ€ μ˜ˆμ œλ“€μ΄ κΈ°μ‘΄ ν…œν”Œλ¦Ώμ— 맞좰져 μžˆλ‹€λ³΄λ‹ˆ (심지어 MSDN도)
κΈ°λŠ₯듀을 μ μš©ν•˜λŠ”λ° 어렀움이 λ§Žμ•˜μŠ΅λ‹ˆλ‹€β€¦