[C# 개념] 2.2 첫 번째 프로그램 뜯어보기
using System;
using System.Data;
using static System.Console;
namespace Hello
{
class MainApp
{
// 프로그램 실행이 시작되는 곳
static void Main(string[] args)
{
if(args.Length == 0)
{
Console.WriteLine("사용법 : Hello .exe <이름>");
return;
}
WriteLine("Hello, {0}!", args[0]);
}
}
}
2.2.1 using System;
- using 은 c#의 키워드중 하나.
- 키워드 : c#의 규격에 미리 정의 되어 있는 특별한 단어
- System : c# 코드에 기본적으로 필요한 클래스를 담고 있는 네임스페이스
- using System 은 system 네이스페이스 안에 있는 클래스를 사용하겠다고 컴파일러에 알리는 역할
- System.Console.WriteLine -> Console.WriteLine
- 세미콜론(;) : 컴파일러에 문장의 끝을 알리는 기호
2.2.2 using static System.Console;
- Console WriteLine -> WirteLine
- using 키워드만 사용하면 네임스페이스 전체를 사용한다는 의미
- using static 은 어떤 데이터형식(ex.클래스)의 정적 멤버를 데이터 형식의 이름을 명시하지 않고 참조하겠다고 선언하는 기능
- System.Console 은 이러한 정적 멤버를 여럿 가지고 있따.
- 메소드 : 일련의 기능을 수행하는 명령어
- Write() , WriteLine() 메소드 , Read(), ReadLine() 메소드 : Console 클래스의 대표적인 정적 멤버
2.2.3 namespace Hello {}
- 네임스페이스 : 성격이나 하는 일이 비슷한 클래스, 구조체, 인터페이스, 대리자, 열거 형식 등을 하나의 이름 아래 묶는 일을 한다.
- System.IO 네임스페이스 : 파일 입출력을 다루는 각종 클래스, 구조체, 대리자 ,열거 형식등이 있다.
- System.Printing 네임스페이스 : 출력에 관련한 일을 하는 클래스 등이 소속
- .NET 클래스 라이브러리 에 1만개가 훨씬 넘는 클래스가 있어도 프로그래머가 전혀 혼돈을 느끼지 않고 이 클래스 를 사용할수 있는 비결이 이렇게 각 용도별/분야별로 정리되어 있는 네임스페이스에 있다.
<네임스페이스 만들기>
- 다음 네임스페이스 에서 MainApp 클래스를 사용하려면 using Hello; 문장을 이용해서 Hello 네임 스페이스를 참조하거나 Hello.MainApp 처럼 클래스가 소속되어 있는 네임스페이스와 클래스의 이름을 붙여 줘야 합니다.
2.2.4 class MainApp { }
- 클래스 : c# 프로그램을 구성하는 기본단위로서 데이터와 데이터를 처리하는 기능(메소드) 으로 이루어 집니다.
- C# 프로그램은 최소한 하나 이상의 클래스로 이루어지며, 수백 수천개의 클래스들로 구성되기도 한다.
- MainApp 클래스 안에는 Main() 메소드가 담겨있다.
2.2.5 //프로그램 실행이 시작되는 곳
- 한줄 주석 : //
- /* */
2.2.6 static void Main(string[] args) { }
- static void Main(string[] args){} 는 특별한 메소드인데, 이 메소드는 프로그램의 진입점으로 프로그램이 시작하면 실행되고, 이 메소드가 종료되면 프로그램도 종료 됩니다.
- 따라서 모든 프로그램은 반드시 Main 이라는 이름을 가진 메소드를 하나 가지고 있어야 합니다.
- 다른 언어에서는 메소드를 서브루틴 이나 함수 라고 부르기도 한다.
- 메소드라는 용어는 객체지향 프로그래밍 세계에서 함수를 일컫는 말입니다. 객체지향 프로그래밍 에서는 모든 것이 객체이고, 함수는 객체의 일부로서 존재.
- 한정자(static) : 메소드나 변수등을 수식한다. c# 프로그램의 각 요소는 코드가 실행되는 시점에 비로소 메모리에 할당되는 반면, static 키워드로 수식되는 코드는 프로그램이 처음 구동 될때 부터 메모리에 할당된다는 특징이 있다.
- 프로그램이 실행되면 CLR(Common Language Runtime) 은 프로그램을 메모리에 올린 후 프로그램의 진입점을 찾는데, 이때 Main() 메소드가 static 키워드로 수식되어 있지 않다면 진입점을 찾지 못했다는 에러 메시지를 남기고 프로그램이 종료됩니다.
- 메소드의 반환 형식(void) : void는 비어있는 이라는 뜻으로 이 메소드가 어떤 결과도 돌려주지 않을 것 이라는 것을 컴파일러에게 알려주는 기능
- 메소드의 이름 (Main)
- 메소드의 입력되는 매개변수(string[] args) : Main 메소드의 매개변수는 조금 특별한데, 프로그램을 실행 할 때 입력하는 매개변수가 입력됩니다.
- 메소드의 코드블록 : 메소드가 실행 될때 실행할 세부 코드를 담습니다.
2.2.7 if(args.Length ==0) { }
- if 문은 조건을 평가해서 프로그램의 흐름을 결정하는 코드
- 우리 예제 프로그램에서는 매개변수 목록의 길이가 0 일때 안내문을 출력하고 프로그램을 종료 시킵니다.
- return : 원래 메소드의 호출자에게 메소드 실행결과를 돌려주는 역할을 하지만 ,여기서는 Main() 메소드를 종료하는 용도로만 사용했습니다.