C# - Hello World

2025. 6. 14. 16:57Programming Language/C#

반응형

프로젝트 생성

먼저 C# 공부를 하기 위해서 가장 기본적인 프로젝트인 콘솔 프로젝트를 생성해주자.

새 프로젝트 만들기를 선택한 후에 콘솔 앱 프로젝트를 선택하고 

다음을 눌러주자.

프로젝트 명을 원하는 데로 구성해주고 다음을 눌러주자.

 

기본적으로 솔루션이라는 큰 항목 내부에 프로젝트는 다수가 존재할 수 도 있다.

더보기

먼저 그럼 솔루션과 프로젝트의 개념에 대해서 확인해보자.

 

1. 솔루션(Solutuin)

솔루션이란 여러개의 프로젝트를 묶는 상위 개념의 컨테이너로 .sln(Solution의 약자)라는 확장자를 가진 파일로 존재한다.

Visual Studio가 프로젝트 간 관계(참조, 종속성)을 관리하게 하기 위해 사용된다.

 

솔루션의 역할은 하나의 개발 환경에서 여러 프로젝트를 동시에 관리할 수 있게 해주는 것이다.

예를 들면 백엔드 API, 프론트엔드 앱, 공통 라이브러리 등을 프로젝트로 하나의 솔루션에 포함시키는 방식이 이에 해당한다.

MySolution/
├── MySolution.sln
├── App.Console/        ← 콘솔 실행 프로젝트
│   └── App.Console.csproj
├── App.Library/        ← 클래스 라이브러리 (공통 기능)
│   └── App.Library.csproj
└── App.Tests/          ← 유닛 테스트 프로젝트
    └── App.Tests.csproj

 

이런 식의 구조로 말이다.

 

2. 프로젝트(Project)

프로젝트는 실제 코드, 리소스, 빌드 설정 등을 담고 있는 단위로 .csproj(C# Project의 약자)라는 확장자를 가진 파일로써 관리된다

컴파일을 하면 DLL(라이브러리) 또는 EXE(실행 파일)을 생성하게 된다.

 

프로젝트의 역할은 하나의 실행 가능한 프로그램 또는 라이브러리 모듈을 정의한다.

예를 들면 콘솔 앱, 웹, 앱, 클래스 라이브러리 등이 이에 해당한다.

 

하나의 프로젝트는 아래 예시와 같은 구조를 갖게 된다.

MyConsoleApp/
├── MyConsoleApp.csproj
├── Program.cs
├── Utils.cs
└── appsettings.json

 

솔루션과 프로젝트는 기본적으로 분리되어 관리하게 되는데 이는 유지보수성과 확장성을 확보하고 각각의 프로젝트들이 명확하게 분리되게 해준다. 

또한 모듈 단위 개발 및 재사용성을 증가시키고 CI/CD 파이프라인 분리 관리에도 유리하다.

 

프로젝트를 만들때 아래 설정을 체크할 수 있는 부분이 있는데 

 

이를 선택하게 되면 솔루션과 프로젝트가 분리되지 않고(솔루션 디렉터리 아래에 프로젝트 디렉터리가 존재하는 형태가 아닌) 하나의 디렉터리가 솔루션의 역할도, 프로젝트의 역할도 하게 된다.

내부에 .sln파일이 생성되게 되나 사실상 솔루션의 기능은 하지 않는다고 봐도 된다.

 

이를 선택해서 간단한 학습용 앱과 같은 프로젝트의 경우는 하나만으로 구성하는 경우도 있으나 보통의 실제 개발 환경에서는 솔루션과 여러 프로젝트를 구성하는 것이 보편적이다.

그리고 프레임워크는 밖에 없으니까 이를 선택해서 만들어주기로 하자.

 

Hello World

콘솔 앱으로 프로젝트를 처음 만들면

이렇게 .cs파일이 하나 생성되어 있다.

 

아마 이는 .NET Core로 개발을 시작했기에 기본적인 최상위 코드가 구성되지 않은 채로 만들어 진것으로 보인다.

 

이를 위해서 기본적인 C#의 시작을 구성하는 Main 메서드에 대해서 한번 확인해보자.

 

자바와 조금은 비슷할 수 도 있는데 먼저 C#파일은 class로 시작된다.

클래스명은 파일명과 맞춰주는게 보통의 관례이다.

 

이후 class 내부에 Main 메서드를 하나 생성해준다

Main 메서드의 형태는 기본적으로 아래와 같다.

이 Main 메서드는 C#을 포함한 여러 프로그래밍 언어의 시작점의 역할을 한다.

 

프로그램이 실행되면 무조건 이 프로그램이 시작되는 시점은 Main 메서드 부터 시작되게 된다.

그렇기에 프로그램에는 항상 Main 메서드를 하나(두개 이상 불가능) 포함하게 되어 있다는 점을 알고 있자.

 

이제 내부에 아래와 같이 출력문을 입력하고 

 

Ctrl + F5를 눌러 실행해주면 

아래 콘솔 출력 쪽에 내용이 출력되면서 

이렇게 cmd 창에 입력한 Hello, World!가 출력되는 것을 볼 수 있다.

 

여기서 .NET 6 이상인 경우는 이 Main을 생략하는것이 가능하다.

그래서 초반에 아래와 같이 되어 있는 상태에서도 

 

Ctrl + F5를 눌러보면

놀랍게 그냥 잘 출력해준다.

 

이는 .NET 6 이상 부터는 

이 코드를 

이런 형태로 내부적으로 구성해주기 때문에 가능한 일이다.

 

우리는 처음 배우는거니까 기본적인 형태를 구성해준 이후에 저런 방식을 사용하도록 하자.

 

System.Console.WriteLine()

C#에서는 System.Console에 있는 함수인 Write 혹은 WriteLine함수를 사용해서 표준 출력을 할 수 있다.

Write와 WriteLine함수의 차이는 Line Feed, 줄바꿈을 만드냐 안만드냐 정도의 차이점을 갖고 있다.

보면 WriteLine은 내용을 출력한 이후 줄바꿈을 만드나 Write는 출력한 이후 줄바꿈없이 바로 다음 코드를 실행하는 것을 볼 수 있다.

 

Write 및 WriteLine함수의 내부에 인자를 분리해서 출력할 수 있는데

기본적인 방식은 아래와 같이 사용하는데 첫 전달인자에 문자열로 중괄호 내부에 인덱스를 넣으면 첫번째 인덱스 이후의 컨텐츠를 출력한다.

System.Console.WriteLine("{index}", "Content1", "Content2", ... );

 

예시를 보여주자면

위와 같이 전달인자의 순서대로 첫번째 이후 문자열부터 인덱스를 가지게 되고 이렇게 0을 출력하면

Hello만 출력하는 것을 볼 수 있다.

이렇게 넣으면 

모든 전달인자들이 붙어서 출력되는 것을 볼 수 있다.

 

이를 포맷팅 플레이스홀더(placeholder)라고 부른다.

또한 이는 첫번째 매개변수의 서식문자에서만 작동하게 되어 있어 중간에 들어가 있으면 그냥 단순한 문자열로만 인식하게 된다.

 

 

반응형

'Programming Language > C#' 카테고리의 다른 글

C# - 문자와 문자열 및 논리타입  (1) 2025.06.14
C# - 숫자 타입  (0) 2025.06.14
C# - 시작  (0) 2025.06.09