languages/c#

[C#] 2장 namespace

och 2024. 11. 5. 14:47

현재 씨샵을 공부 중에 있습니다. 한번 보기는 했지만 익숙하게 하기 위해서 책으로 공부 중입니다. 해당 내용은 '이것이 C#이다'를 참고해서 공부한 내용입니다.

C#은 특이하게 메서드 이름의 첫글자가 대문자라 자바와는 좀 헷갈리는 부분이 있습니다.
클래스 내부에 클래스를 선언할 수 없는 걸까요? 이 경우 구분을 어떻게 하는 건지... 궁금하네요..

using System;
using static System.Console;

namespcae Hello{
    class MainApp
    {
        public static void Main(string[] args){ // 앞으로 해당 이름은 psvM으로 대체하겠다.
            if (args.Length == 0;){
                Console.WriteLine("Error no args");
                return;
            }
            WriteLine("Hello, {0}!", args[0]);
        }
    }
}

using System : 시스템 네임스페이스 내부 데이터(클래스, 인터페이스, 구조체 등)을 사용하겠다.

System.Console.WriteLine() -> Console.WriteLine() 으로 사용가능하게 된다.

네임스페이스

성격이나 하는 일이 비슷한 클래스, 구조체, 인터페이스, 열거 형식 등을 하나의 이름 아래로 묶는 것을 의미.

using static System.Console; //System네임스페이스 안의 Console클래스
using System; // System네임스페이스

using static은 어떤 클래스의 정적메서드를 사용할 때 사용하게 됩니다.
콘솔에 데이터를 입력하거나 출력하는 Write(), WriteLine(), Read(), ReadLine() 등이 대표적인 정적메서드입니다.

전역 using

global using 키워드로 사용하게 되면 프로젝트 내 다른 파일에 using키워드를 사용할 필요가 없다.
다만 호불호가 많은데 내 생각은 사용하지 않는 게 좋을 것 같다. 왜냐하면 코드를 읽을 때 이게 어디서 가져오는 메서드인지 알 수 없기 때문이다.

파일 범위 네임스페이스

대부분의 경우 하나의 파일에 하나의 네임스페이스가 선언된다. 따라서 굳이 {}로 묶지 않고 namespce Hello; 하면 해당 파일은 Hello네임스페이스에 묶이게 된다. (C# 10부터 가능하다.)

클래스

객체를 찍어내기 위한 틀. 정적클래스도 객체냐?! 하면은 음.. 그 자체로 역할이 있기 때문에 객체라고 볼 수 있다고 생각한다. 내 생각이 맞는지는 잘 모르겠다..

psvM()

프로그램의 시작 포인트.

static : 프로그램이 처음 구동될 때부터 메모리 할당. 없는 경우는 실행 중 메모리에 할당.

CLR(Common Language Runtime)

JVM과 같은 C#애플리케이션이 동작하는 프로그램 혹은 환경. 이름이 CLR인 이유는 C#말고도 CLS규격을 따르는 언어로 작성된 프로그램도 지원하기 때문.
CLR을 사용하는 이유는 윈도우나 맥과 같이 OS와 무관하게 실행할 수 있게 하기 위해서.

C#컴파일

씨샵 컴파일러는 IL(Intermediate Language)라는 중간 실행 파일을 만들어 낸다. 실행 시 네이티브 코드로 컴파일 후 실행시킨다. (네이티브 코드 : 특정 하드웨어 아키텍처와 OS에서 실행되는 기계어) 이때 IL을 실행하면 현재 내 컴퓨터 환경에 맞게 컴파일된다. 이를 JIT(Just In Time)컴파일이라고 한다. 이러면 OS에 독립적으로 실행할 수 있다. 맥에서도 실행가능하고 Window에서도 실행가능하다.