Program.cs 의 거짓

닷넷디벨·2023년 5월 16일
0
post-custom-banner

출처: https://youtu.be/aSNqqZqYTk4

아티클 보시기전에 저는 영어를 못합니다. 유튜버 번역기를
사용하다보니 제가 잘못이해할수도 있으니 참고 바라면 해당 강좌를 직접 시청해보시고
지적해주시면 수정하겠습니다. 그리고 1시간 짜리 강의를 봤는데 솔직히 큰내용이 없어서 오늘도 pick을 잘못한것 같아 괴롭습니다.ㅠㅠ


program.cs는 거짓이다. 다소 이상한 명제로 시작하는 강좌입니다.
program.cs는 .net6 까지는 요식 행위였습니다. startup.cs 는 낭비였습니다.


c# 6.0은 최상위문은 문제가 있으면 원래 방식이 나은 이유에 대해서 설명하겠습니다.

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는 이것에 대한 선택 옵션을 제공했습니다.

정말 1시간의 뭔가 있어보이는 제목의 강의를 보면서 제가 제대로 이해를 못한것이겠지만 큰 내용이 없어서 약간 억울합니다. ㅠㅠ

profile
hardcore developer
post-custom-banner

0개의 댓글