[C#]2. 처음 만드는 C# 프로그램
출처
- 본 내용은 C# 공부 내용이며 책과 강의를 정리한 내용입니다
| 이번 강의 목표
-
- C# 코드 컴파일 과정
-
- 첫 c# 프로그램 만들기 & 분석하기
| 컴파일
- 소스코드를 분석하여 그 결과를 기계 코드로 생성하는 과정
분석 : 어휘 분석 => 구문 분석 => 의미 분석 과정을 통해 오류가 없는지 파악하고 그 결과를 기계코드로 생성
어휘 분석 단계
: 각각의 키워드를 분리해냄
ex. a / = / 3 / + / b / ; /구문 분석 단계
: 어휘들이 올바른 관계로 놓여져 있는지 본다. 문법 검사를 하는 것
ex. a 3 + b; => 이런건 컴파일러가 구문오류가 있다고 판단 (할당기호가 없네)의미 분석 단계
a = 3 + b ; 에서 b가 숫자가 아니라 문자면 문제가 됨
| 컴파일러
- 컴파일을 하는 프로그램
- 소스코드를 분석해서 그 결과를 기계 코드로 생성하는 절차를 수행하는 프로그램
| C#컴파일러
-
c#소스코드를 분석하여 그 결과를 .NET용 IL코드로 생성하는 프로그램
IL코드
실행파일로 만들어주는데, 이것을 컴퓨터가 직접 실행하지 않음
CLR 이라는 가상머신이 IL코드를 읽어들이고 기계 코드로 바꾼다
C#은 컴파일 과정과 인터프리터 과정이 어느정도 섞여있다.
| visual studio 구성
- 위쪽 메뉴
- 가운데 코드 편집기
- 오른쪽 솔루션 탐색기
| 실습
- 솔루션 탐색기에서 Program.cs 이름 바꾸기 => MainApp.cs
- 클래스의 이름도바뀌게 된다 => 비쥬얼 스튜디오에서 지원해주는 리팩토링 기능
- 예제 : 프로그램을 실행할때 사용자 이름을 입력하게 하여 프로그램이 그 이름을 출력하도록 해보겠음
- 코드
using System;
using static System.Console;
namespace Hello
{
class MainApp
{
//프로그램 실행이 시작되는 곳
static void Main(string[] args)//args = arguments 라는 뜻
{
if (args.Length == 0)
{
Console.WriteLine("사용법 : Hello.exe<이름>");
return;
}
WriteLine("Hello , {0}!",args[0]); //Hello, World를 프롬프트에 출력
}
}
}
- 실행 : 프로그램을 실행하려면 실행파일을 생성해야한다
- 빌드 > 솔루션 빌드 : 경로에 빌드된 결과물이 저장된다
1>------ 빌드 시작: 프로젝트: Hello, 구성: Debug Any CPU ------
1>Hello -> C:\Users\my\source\repos\Hello\Hello\bin\Debug\netcoreapp3.1\Hello.dll
========== 빌드: 성공 1, 실패 0, 최신 0, 생략 0 ==========
- 해당 디렉토리로 이동하기 위해 솔루션 탐색기에서 Hello 프로젝트항목을 선택하고 우클릭해서 ‘파일 탐색기에서 폴더 열기’
- 명령 프롬프트 창열기 : window + r키 +q키 -> cmd입력 -> 파일탐색기 주소 복사 or cd 하고 끌어 당기기
C:\Users\my>cd C:\Users\my\source\repos\Hello\Hello
- bin이라는 디렉토리에 실행 파일이 저장되어있음
C:\Users\my\source\repos\Hello\Hello 디렉터리
2022-06-25 오후 07:47 <DIR> .
2022-06-25 오후 07:47 <DIR> ..
2022-06-25 오후 05:59 <DIR> bin
2022-06-25 오후 05:59 178 Hello.csproj
2022-06-25 오후 07:47 498 MainApp.cs
2022-06-25 오후 05:59 <DIR> obj
2개 파일 676 바이트
4개 디렉터리 26,919,305,216 바이트 남음
C:\Users\my\source\repos\Hello\Hello>
- 파일 열기 : 강의에는 net5.0 으로 되어있는데 나는 netcoreapp3.1폴더로 되어있어서 그렇게 했다
C:\Users\my\source\repos\Hello\Hello>cd bin
C:\Users\my\source\repos\Hello\Hello\bin>cd Debug
C:\Users\my\source\repos\Hello\Hello\bin\Debug>cd net5.0
지정된 경로를 찾을 수 없습니다.
C:\Users\my\source\repos\Hello\Hello\bin\Debug>cd netcoreapp3.1
C:\Users\my\source\repos\Hello\Hello\bin\Debug\netcoreapp3.1>Hello.exe
사용법 : Hello.exe<이름>
C:\Users\my\source\repos\Hello\Hello\bin\Debug\netcoreapp3.1>Hello 꽁주킴
Hello , 꽁주킴!
- 실행 결과
인수가 없어서
사용법 : Hello.exe<이름>
이렇게 나옴
인수가 있으면Hello , 꽁주킴!
이렇게 나옴
| 실행 코드 분석
using System;
using static System.Console;
namespace Hello
{
class MainApp
{
//프로그램 실행이 시작되는 곳
static void Main(string[] args)//args = arguments 라는 뜻
{
if (args.Length == 0)
{
Console.WriteLine("사용법 : Hello.exe<이름>");
return;
}
WriteLine("Hello , {0}!",args[0]); //Hello, World를 프롬프트에 출력
}
}
}
-
static void Main
: 프로그램 시작점! -
.Length
: 문자열 길이
| 질문
Q.
using System
이랑using static System.Console
의 차이?
A. C# 6.0에서는 using static 클래스명을 써 준다면, 해당 C# 파일 내에서는 해당 클래스명 없이 메서드를 직접 사용할 수 있게 하였다. 예를 들어 아래 예제에서 처럼 처음 System.Console 클래스를 using static 과 함께 지정한 후에는 본문에서 Console.WriteLine() 대신 WriteLine()을 직접 사용할 수 있다. 출처
댓글남기기