본문 바로가기

Programming/C#

C# - 01. C#으로 Hello World 출력 / 데이터 보관

이 포스팅은 이것이 C#이다. 라는 책의 공부 및 정리를 위해 작성되었습니다.

Visual studio 다운로드 후 새프로젝트 콘솔앱(.NET FRAMEWORK)를 생성한 후 program.cs를 아래와 같이 변경.

1. Hello world 출력하기.

using System; // System이라는 namespace안에 있는 클래스를 사용하겠다고 컴파일러에게 알림.
using static System.Console; //어떤 데이터형식의 정적멤버를 데이터 형식의 이르을 명시하지 않고 참조하겠다고 선언 (CH.7에서 다룰 예정)

namespace ConsoleApp1 //namespace는 하는 일이 비슷한 클래스나 구조체 등을 하나의 이름아래 묶는 역할
{
    class HelloWorld
    {
        // 프로그램 실행이 시작되는 곳, 모든 프로그램은 반드시 Main이라는 이름을 가진 메소드를 가지고 있어야 함.
        // static: modifier(한정자), 프로그램이 처음 구동될 때부터 메모리에 할당이 됨. (일반적으로는 코드가 실행이 될 때 할당이 됨.) 이는 CLR(common language runtime)이 진입점인 main함수를 시작 시 찾기 위함임.
        static void Main(string[] args) 
        {
            if (args.Length == 0)
            {
                Console.WriteLine("usage: HelloWorld.exe <이름>");
                return;
            }

            WriteLine("Hello, {0}!", args[0]);
        }
    }
}

// C#으로 만들어진 프로그램들은 CLR위에서 실행이 됨.
// 하드웨어 위에 운영체제 위에 .NET FRAMEWORK 위에 CLR위에 어플리케이션이 돌아감.
// C#컴파일러는 C# 코드를 IL(intermediate language)로 작성된 실행파일로 만들고, CLR이 이 IL을 하드웨어가 이해할 수 있는 네이티브 코드로 컴파일 한 후 실행시킴. 이를 JIT(Just In Time)컴파일이라고 함.
// IL은 서로 다른 언어들이 만나기 위한 지점.

 

crtl + shift + b를 통해 컴파일을 하여 bin/debug 디렉토리에 생성된 실행파일을 실행한다.

 

2. 메모리 보관

2-1. 메모리영역 stack과 heap
- stack: 값형식의 변수들이 모두 스택에 저장됨. 모든 값 형식의 변수들은 해당 블록이 끝나면 모두 메모리에서 제거됨.
- heap: heap에 저장된 메모리들은 스스로 제거되지 않음. 따라서 CLR의 가비지 컬렉터가 존재함. 이는 코드 블록이 끝나는 시점과 상관없이 데이터를 유지하고자 할 경우에 이용됨. 참조형식의 변수는 힙과 스택을 이용하는데 힙 영역에 데이터를 저장하고 스택 영역에 해당 데이터가 저장되어있는 주소를 저장함.

 

이번장의 추가 번외 지식.

1. 큰 자리수의 정수 리터럴을 표시할 때, 자릿수 구분자로 언더바(_)를 활용가능함. ex) int a = 100_000;
2. 이진수 표기시에는 0b를, 16진수 표기시에는 앞에 0X를 붙여 구분한다.
3.  nullable 형식 이용시 데이터형식? 변수이름; 을 사용한다. ex. int? a = null;
4. var이라는 데이터형식은 알아서 데이터 형식을 파악하여 대입한다. (파이썬처럼.) 단, 클래스의 필드를 선언할 경우는 사용이 불가능하며, 지역변수로만 사용한다.

 

... 생각보다 책이 완전 초심자를 대상으로 기초부터 가르친다. 쉽게 이해하는 내용은 이제 다 스킵하면서 정리해야지..