3. Console App 만들어 보기 (Visual Studio 2022)
지금부터 만들어볼 환경은 Windows상에서 Visual Studio 2022를 사용하는 것으로 간단한 Console App을 만드는 과정을 담고 있습니다.
Visual Studio 2022는 설루션(Solution)이라고 하는 다수의 Project를 관리할 수 있는 개념을 가지고 있으므로 Project를 생성하면 자동으로 하나의 설루션 안에 Project를 담아두는 구조로 생성될 것입니다.
Visual Studio 2022를 실행하여 처음 나오는 Create a new project화면에서 C#언어의 Console App template을 선택합니다.
Project설정 화면에서 Project name을 설정합니다. 프로젝트가 위치하는 Location은 필요한 임의의 경로로 잡아줄 수 있으며 필요한 경우 Solution name 또한 개별적으로 생성할 수 있습니다.
다음 화면에서는 .NET 버전을 5로 선택해 줍니다. .NET6아닌 .NET5를 선택하는 이유는 버전에 따른 차이를 확인해 봄으로서 Application의 구조를 좀 더 명확하게 파악하기 위함입니다. .NET6부터는 일부 코드를 뒤에서 감추는 구조가 도입되었기에 처음 시작하는 경우라는 구조를 파악하는데 맞지 않을 수 있습니다.
위 설정을 모두 마치고 나면 최종적으로 다음과 같은 화면을 보실 수 있습니다.
일부 IDE나 Font의 색상 같은 경우는 환경설정에 따라 달라질 수 있으므로 무시하고 Visual Studio의 ▶ 모양이나 F5키를 눌러 Project를 실행하고 아래와 같은 결과나 나오는지 확인합니다.
● Compile관련 폴더 및 파일
Visual Studio의 Solution Explorer에서 'Show All Files'를 선택하거나
Project가 위치한 폴더로 이동해 보면 bin과 obj라는 2개의 폴더를 볼 수 있습니다.
Compiler에서 필요로 하는 이 2개의 폴더 중 obj는 각각의 Source file을 Compile 한 object를 포함하고 있으며 아직 실행 가능한 형태가 아닙니다. 반면 bin은 Project에 대한 DLL이나 EXE와 같은 Assembly파일을 포함하는 폴더입니다.
Project가 몇 개씩 추가되거나 다른 Class Library들을 참조하는 경우 이들 폴더가 다수의 파일로 채워질 수 있으며 종종 이들을 정리하기 위해 'Build'메뉴의 'Clean Solution'기능을 사용하기도 합니다.
생성된 Project의 Program.cs를 보면 다음과 같은 코드를 볼 수 있는데
using System;
namespace MyConsoleApp
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
다수의 라인으로 걸쳐진 탓에 그저 'Hello World!'라는 문자열을 표현하기 위해 많은 코드가 작성된 것이 아닌가 하는 생각이 들 수 있습니다.
하지만 C# 9와 그 이후의 버전에서는 'Top-Level Program'이 도입되어 다음과 같은 코드로 간소화될 수 있게 되었습니다.
using System;
Console.WriteLine("Hello World!");
이 구조는 Compile시에 Namespace와 Program Class 그리고 Main Method가 위에서와 같은 간소화된 코드를 감싸는 형태로 자동으로 만들어주기 때문에 오류 없이 실행이 가능한 것입니다. 다시 말해 본래 구문에서 없어도 될 부분은 없으며 그저 보이지 않는 형태로 추가될 뿐입니다.
이번에는 같은 프로젝트를 .NET6를 사용한 버전으로 다시 생성합니다.
프로젝트를 완성하고 나면 Program.cs는 다음과 같은 내용으로 바뀔 것입니다.
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
.NET6부터는 C#9에서 소개된 Top-Level Program이 자동으로 적용됨을 알 수 있습니다. 다만 위에서 Top-Level Program을 소개할 때 작성했던 'using System;'구문은 존재하지 않는다는 차이가 있습니다.
● 암시적인 namespaces Import
그렇다고 해서 'using System;'이 필요 없는 것은 아닙니다. 이것은 C#10에서 새롭게 소개된 것으로 Global Namespace라는 것이 존재하기 때문입니다.
지금 Visual Studio 2022의 Solution Explorer에서 'Show All Files'를 선택하고 obj -> Debug -> .net6.0 폴더에서 TopLevelProgram.GlobalUsings.g.cs 파일을 열어보면 그 형태를 확인하실 수 있습니다.
이 파일은 .NET6에서 Compiler가 Project를 위해 자동으로 생성한 것으로서 System과 같은 일반적인 Namespace들을 Import 함으로써 다른 파일에서 같은 이름의 Namespace를 새롭게 Import 해야 하는 번거로움을 줄여줍니다.
4. Console App 만들어 보기 (Visual Studio Code)
사실 간단한 Console용 App을 만드는데 Visual Studio 2022를 사용하기보다는 Visual Studio Code를 사용하는 편이 훨씬 빠르고 간단한 방법이 될 수 있습니다.
Visual Studio 2022에서 Solution의 개념은 Visual Studio Code에서 Workspace로 적용되며 Project를 생성할 때 이 개념을 적용해볼 수 있습니다.
Visual Studio Code를 실행해 'File - Save Workspace As...'를 선택합니다. 그리고 Workspace를 생성할 폴더를 선택하고 저장합니다. (예제에서는 Document폴더에서 Work라는 이름의 폴더를 생성해 Workspace파일을 저장하였습니다.)
다시 Work안에서 Visual Studio 2022의 Solution 격에 해당하는 폴더를 만들고(예제에서는 TestApp) Visual Studio Code의 'File -> Add Folder to Workspace…'를 선택해 방금 전 생성한 프로젝트 폴더를 추가합니다. 그러면 Visual Studio Code안에서 해당 폴더 이름으로 새로운 WORKSPACE가 생성될 것입니다.
TestApp폴더 안에서는 프로젝트에 해당하는 새로운 폴더를 만들고(예제에서는 ConsoleApp) Visual Studio의 'View -> Terminal'을 선택하거나 새로운 Console창을 열어 ConsoleApp폴더로 이동한 뒤 아래 명령을 통해 .NET6 버전의 새로운 프로젝트를 생성합니다.
dotnet new console |
프로젝트를 생성한 뒤 Program.cs파일을 열면 아마도 다음과 같은 알림 팝업이 열릴 것입니다.
말 그대로 프로젝트를 빌드하고 디버깅하는데 추가적인 assets 이 필요하다는 것으로 'Yes'를 선택하고 잠 시기 다리면 프로젝트의 상위 폴더에 IntelliSense와 같은 기능을 제공하기 위한 .vscode폴더가 생성됩니다.
그리고 해당 프로젝트의 다른 폴더와 파일들 그리고 Program.cs내용은 이전에 Visual Studio 2022에서 만들었던 .NET6 프로젝트와 동일한 것임을 확인할 수 있습니다.
참고로 Visual Studio Code의 'File -> Auto Save'를 선택해 자동 저장 기능을 사용할 수 있도록 하는 것을 권장합니다. 이 설정은 프로젝트를 빌드하기 전 파일을 일일이 저장하는 수고를 덜어줄 수 있습니다.
프로젝트가 생성되면 이번에는 아래 명령을 통해 해당 프로젝트를 빌드하고 실행시켜 봅니다.
dotnet run |
5. .NET Interactive Notebooks 사용하기
.NET Interactive Notebooks는 아주 간단한 코드를 작성하고 실행결과를 바로 확인할 수 있도록 하는 Visual Studio Code의 확장 기능입니다.
우선 Visual Studio Code의 확장 기능에서 '.NET Interactive'로 검색해 '.NET Interactive Notebooks'확장기능을 설치해 줍니다.
설치가 완료되면 'View - Command Palette'를 선택하고 뒤이어 '.NET Interactive: Create new blank notebook'항목을 찾아 선택해 줍니다.
잠 시기 다리면 '.dib'나 '.ipynb'중 어느 것을 만들지를 선택하게 되는데 이 중 '.dib'를 사용하도록 합니다. .dib는 Python interactive notebooks에서 사용하는 '.ipynb'와의 호환성 및 혼란에 따른 문제를 피하기 위해 마이크로소프트에서 정의한 실험적인 파일 형식에 해당합니다. '.ipynb'는 과거 'Jupyter notebooks'를 위한 것으로 interactive의 I와 Python code의 PY를 결합하고 notebook file(NB)로 출력한다는 개념에서 출발합니다. .NET Interactive Notebooks에서는 이러한 개념이 확장되어 C#, F#, SQL, HTML, JavaScript 등 다른 언어까지도 사용할 수 있게 된 것입니다.
'.dib'를 선택한 뒤 이어 'C#'언어를 선택하면 다음과 같은 화면을 볼 수 있게 됩니다.
참고로 Visual Studio Code의 'View -> Output'창에서 '.NET Interactive : diagnostics'를 선택하면 새로운 버전에 대한 사용 가능성 여부 등을 확인할 수 있습니다. (새로운 버전이 존재하고 이를 설치하는 경우라면 'Kernel for ~~~ started'라는 메시지가 나올 때까지 다시 시간이 걸릴 수 있습니다.)
언어를 'C#'으로 선택하는 경우라면 문제가 없지만 만약 다른 언어를 통해 .NET Interactive Notebooks셀을 생성한 경우라면 셀의 오른쪽 하단에 언어를 선택하여 변경할 수 있습니다.
셀에서는 실행해볼 코드를 입력할 수 있는데 아래와 같은 내용의 C#코드를 입력하고
Console.WriteLine("abc...")
▷ 모양의 'Execute Cell'을 클릭하면 코드의 실행결과를 볼 수 있게 됩니다.
구문을 입력할 때는 문장의 끝을 의미하는 세미콜론(;)은 필요하지 않습니다.
또한 '+ Code'를 선택하면 새로운 셀을 생성할 수 있습니다.
여러 개의 셀이 생성된 경우라면 아래 셀에서는 이전 셀의 구문을 공유할 수 있습니다. 예를 들어 첫 번째 셀에서 다음과 같은 구문을 실행하고 나면
int i = 10;
두 번째 셀에서는 이전 셀에서 정의한 변숫값을 출력하도록 할 수 있습니다.
Console.WriteLine(i);
하지만 여기서 주의해야 할 것은 첫 번째 셀을 실행하지 않으면 두 번째 셀에서는 오류가 발생하므로 반드시 첫 번째 셀부터 실행해야 한다는 것이며 역(밑에 셀에서 먼저 실행하는 경우)으로는 실행이 불가능합니다. 또한 여러 셀에 걸쳐 코드를 실행하는 경우라면 세미콜론(;)을 작성해 줘야 합니다.
'.NET > C#' 카테고리의 다른 글
[C#] C# 개요 - 2. 변수 (0) | 2022.06.24 |
---|---|
[C#] C# 개요 - 1. C#의 특징및 개요 (0) | 2022.06.24 |
[C#] C#과 .NET6 시작하기 - 2. .NET 이해하기 (0) | 2022.06.24 |
[C#] C#과 .NET6 시작하기 - 1. 개발환경설정 (0) | 2022.06.24 |
[C#] Entity Framework Core - 5. Code First Model (0) | 2022.06.24 |