[ 학습 흐름 ]
[ 학습 흐름]
- Hello World !
- 첫번째 프로그램 뜯어보기
- using System;
- using static System.Console;
- namespace Hello {}
- class MainApp {}
- //프로그램 실행이 시작되는 곳
- static void Main(string[]args){}
- if(args.Length==0){}
- CLR에 대하여
[ Hello, World! ]
[ 간단한 프로그램 만들어보기 ]
Visual Studio 실행하기
- 시작메뉴에서 Visual Studio 2022를 찾아 실행
새 프로젝트 만들기
- 새 프로젝트 만들기 - 콘솔앱 - 생성할 위치 지정
- "솔루션 및 프로젝트를 같은 디렉터리에 배치 / 최상위 문 사용 안함" 옵션 활성화후 생성
전역 using 사용 암시적 사용 안하게 처리
- 프로젝트 - Hello 속성 - 전역using - "암시적 전체사용" 옵션 비활성화
파일 이름 변경
- 솔루션 탐색기에서 "Program.cs"선택후 F2로 이름변경
소스 코드 작성
using System;
using static System.Console;
namespace Hello
{
internal class MainApp
{
//프로그램 실행이 시작되는 곳
static void Main(string[] args)
{
if(args.Length == 0)
{
Console.WriteLine("사용법 : Hello.exe <이름>");
return;
}
WriteLine("Hello,{0}!", args[0]);
}
}
}
컴파일
- ctrl + Shift + B로 컴파일
- Hello.exe가 해당 프로젝트 디렉터리 안 bin/Debug에 생성되어 있을것임
실행
- Window + R 키를 눌러 명령 프롬프트 열기
cd 경로명
- 위 명령어를 통해 해당 실행 파일 디렉토리로 이동
Hello 이름
Hello.exe 이름
- 위 명령어중 아무거나 선택하여 입력하면 다음과 같이 출력됨
[ 첫 번째 프로그램 뜯어보기 ]
[ using System; ]
using
- using은 C#의 키워드 ( C#의 규격에 미리 정의되어 있는 특별한 단어 )로 ~를 사용한다를 의미함 .
System
- C#코드에 필요한 클래스를 담고 있는 nameSpace .
- using System은 System nameSpace안에 있는 클래스를 사용하겠다고 컴파일러에 알리는 것 .
;
- 컴파일러에 문장의 끝을 알리는 기호 .
[ using static System.Console; ]
using static System.Console
- Console.WriteLine을 WriteLine으로 줄여주는 역할을 했음 .
- using Static은 어떠한 데이터 형식 (ex.클래스)의 정적 멤버를 데이터 형식의 이름을 명시 없이 참조함을 선언하는 기능.
- System.Console은 이러한 멤버 Write()/Read()메서드 등등이 있음.
[ namespace Hello {} ]
namespace
- namespace는 성격,하는 일이 비슷한 클래스/구조체/인터페이스/대리자/열거 형식등을 하나로 묶는 역할을 함 .
- System.IO에는 파일 입출력 / System.Printing에는 출력을 다루는 클래스 등이 소속됨 .
- namespace 선언뒤 { }가 아닌 ; 를 붙이면 해당 파일의 모든 코드는 해당 namespace의 소속이 된다 .
(파일 범위 namespace)
[ class MainApp {} ]
Class
- 클래스는 프로그램을 구성하는 기본단위로 데이터 + 데이터 처리 기능으로 이루어짐 .
- 위 예제는 MainApp 클래스 내부 코드 블록에 Main()메서드가 담겨있다 .
[ //프로그램 실행이 시작되는 곳 ]
//
- //로 시작되는 코드는 주석이다 .
- 컴파일러는 주석을 무시하고 지나간다 . 즉,메모의 기능으로만 사용된다 .
[ static void Main(string[]args) {} ]
static void Main()string[]args
- 프로그램 시작시 실행되며 해당 메서드가 끝나면 프로그램도 끝난다 (프로그램의 진입점) .
- 메서드 코드는 한정자(static) + 반환형식(void) + 메서드 이름(Main) + 매개변수(string[]args)으로 이루어짐 .
한정자
- 메서드,변수등을 수식한다 .
- 코드 실행시 메모리에 할당되는 다른 요소와 다르게 static 한정자는 프로그램 처음 구동시 메모리에 할당된다 .
반환형식
- 해당 메서드가 어떤 것을 반환 할 지 알려준다.
- void는 해당 메서드가 어떠한 결과도 반환하지 않음을 컴파일러에게 알려준다 .
메서드 이름
- 해당 메서드의 이름 .
매개 변수
- 메서드에 입력되는 변수
- Main메서드의 매개변수는 특별한데 , 프로그램 실행시 입력하는 매개변수가 입력됨 .
[ if(args.Length ==0 ]
if 코드
- 조건을 평가해서 프로그램의 흐름을 결정하는 코드
[ CLR (Commom Language Runtime) ]
CLR
- C#이 만든 프로그램이 실행되는 환경 .
- CLR은 .Net라이브러리와 함께 운영체제 위에 설치됨 .
- CLS 규격을 따르는 모든 언어로 작성된 프로그램을 지원한다 .
- 실행뿐 아닌 서로 다른 언어간 호환성도 제공
JIT 컴파일
- 운영 체제는 네이티브 코드로 작성된 프로그램은 실행 가능하지만 , C# 컴파일러가 만들어낸 실행파일은 불가
- C# 컴파일러는 소스코드를 컴파일해서 IL(Intermediate Language)라는 중간언어로 작성된 실행파일을 생성함 .
- 실행하면 CLR은 IL을 읽어 네이티브 코드로 컴파일 후 실행한다 .이 과정을 JIT 컴파일이라고 한다 . (두번의 컴파일)
- 적시 컴파일 . 즉 ,실행에 필요한 코드를 실행할때마다 실시간으로 컴파일해서 실행한다는 말 .
JIT 컴파일의 이유
- CLR은 C#외 다른 언어도 지원하며 , 이 언어들이 만나는 지점이 IL이다 .
- IL로 쓰인 코드를 CLR이 다시 설치된 플랫폼에 최적화해 컴파일 후 실행하는 것 .
- 장점은 플랫폼 최적화된 코드
- 단점은 실행시 이루어지는 컴파일 비용의 부담
CLR의 다른 기능
- C#등의 언어 동작 환경 기능외에도 , 프로그램의 오류 (예외)발생시 처리 기능
- 언어간 상속 지원
- COM과의 상호 운용성 지원
- 자동 메모리 관리 기능 (가비지 컬렉션)
'C# > 이것이 C#이다' 카테고리의 다른 글
[ 이것이 C#이다 ] Chapter 06 . 메소드로 코드 간추리기 (0) | 2024.03.04 |
---|---|
[ 이것이 C#이다 ] Chapter 05 . 코드의 흐름 제어하기 (0) | 2024.02.28 |
[ 이것이 C#이다 ] Chapter 04 . 데이터를 가공하는 연산자 (0) | 2024.02.27 |
[ 이것이 C#이다 ] Chapter 03 . 데이터 보관하기 (0) | 2024.02.15 |
[ 이것이 C#이다 ] Chapter 01 . 프로그래밍을 시작합시다 (0) | 2024.02.13 |