cyphen156

C# 기초1 본문

프로그래밍/C#

C# 기초1

cyphen156 2023. 11. 28. 10:59

이번에 .Net에 대해 배우기 전에 C#에 대해 정리하고 넘어갈 예정이다.

 

사실 나는 GC(Garbage Collector), VM(Vitual Machine)  환경을 별로 좋아하지 않는다. 오히려 싫어하는 편이다. 

하지만 프로젝트 진행을 위해서 배워볼 예정이다.

 

C#은 MicroSoft에서 C/C++를 자바와 유사한 형태로 개발한 언어이다. 

유니티때 스크립팅을 통해 잠깐 해봤던 기억을 떠올리면 플랫폼에 종속되지 않는, 가상 머신위에서 돌아가는 객체지향 컴파일 언어라고 기억된다. 하지만 실제로 사용해보면 컴파일 언어와 인터프리터 언어 둘 사이의 어딘가에 있는 것과 같은 느낌을 받은 언어라고 생각한다.

 

이런 C#의 핵심적인 특징이라면 단언코 .Net이라는 프레임 워크라고 할 수 있다. 

MS는 .Net을 통해 C#, F#, Visual Basic.NET과 같은 언어들이 서로 다른 프로그래밍 언어임에도 불구하고 컴파일러를 거쳐 공통 언어 기반(Common Language Infrastructure)로 컴파일되고, 이 CLI는 다시 공통 언어 런타임(Common Language Runtime)을 거쳐 프로그램이 사용될 플랫폼에서 동작할 수 있는 맞춤형 기계어로 변형된다. 한마디로 C#을 통해 플랫폼에 종속적이지 않는 프로그램을 개발할 수 있다는 것이다. 

 

이 방식은 크로스플랫폼 라이브러리(React/Vue/Flutter)와 상당히 유사하다. 

.NET글에서 다시 정리할 예정이지만 .NET은 프로그램의 메인 타겟 플랫폼에 따라 사용되는 라이브러리/프레임워크가 다르다.

Windows 기반이라면 .NET 5(6/7/8), 웹 애플리케이션이라면 ASP.NET Core (with Blazor 또는 다른 크로스플랫폼 라이브러리), 모바일 환경이라면 .NET MAUI와 같은 템플릿 라이브러리가 존재한다.

 

C#을 사용하기 위해선 Visual Studio에 다음과 같은 관련 워크로드를 추가적으로 설치해줘야한다. 다 설치할 필요는 없고 4번만 선택해도 된다.

  1. ASP.NET 및 웹 개발 : Blazor를 통한 웹 앱 개발관련 워크로드
  2. Azuer 개발 : 서버 관련 워크로드
  3. .NET Multi-Platform App UI 개발 : MAUI를 활용하는 워크로드
  4. .NET 데스크톱 앱 개발 : WPF를 사용한 데스크톱 앱 개발 워크로드(필수)
  5. 유니버셜 Windows 플랫폼 개발 : 지금은 버려진 UWP라는 기능이다. .NET Framework, UWP, Xamarin을 합쳐서 .NET MAUI로 대체되었다.

 

워크로드 추가 설치를 위해선

1. Visual Studio Installer를 실행시키고 수정을 누른다. 

 

2. 설치할 워크로드를 선택하고 수정/설치를 누른다.

 

3. 프로젝트를 생성한다.

특이한 점은 사용 언어를 C#으로, 콘솔 앱 템플릿을 생성하고, .NET 버전은 6, 7, 8이 있는데 선택적 하위 호환이 되므로 8로 일단 생성한다.

** 최상위 문 사용 안 함 이라는 옵션이 존재하는데 저것은 간소화된 C#코드가 아닌 전체 C#코드를 보여주므로, CLI관련 코드까지 모두 보여주는 기능이다. C# 10버전 이상부터 지원되는데, .NET 8은 C# 12 문법을 사용한다.

*** 조금 더 자세히 설명하자면 문법 공부나 간단하게 프로젝트의 실행 파일이 하나의 C#파일로 구성될 때 main함수를 암시적으로 사용하는 방법이다. 이 방법을 사용하는 또 다른 언어는 python3 ~이 있어 간단한 스크립팅으로 프로젝트가 진행될 때 사용하는 편의 기능이다. 

프로젝트 규모가 커지거나 여러개의 파일이 패키지화 되어 사용되어야 할 경우 최상위 문을 사용하지 않고, main 함수를 명시하여 프로그램에서 가장 핵심 파일이 어떤것이 될 지 명확하게 보여주는 역할을 할 수 있다. 

 

4. F5키를 눌러 생성된 프로젝트를 실행해본다.

왼쪽 : 최상위 문 사용                                                                                               오른쪽 : 최상위 문을 사용 안한 전체 코드