출처 :exclamation:

  • 본 내용은 C# 공부 내용이며 책과 강의를 정리한 내용입니다

| 이번 강의 목표

    1. C# 코드 컴파일 과정
    1. 첫 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()을 직접 사용할 수 있다. 출처

태그:

카테고리:

업데이트:

댓글남기기