코딩테스트 (C#)

C#의 기본 구조 완전히 이해하기

UniCoti-sub 2024. 7. 7.
반응형
using System;

namespace unicoti
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

 

이건 가장 간단한 C#의 예시입니다. 위의 코드는 Hello World를 출력하는 기능을 하고 있습니다.

하지만 그걸 실행하는 줄은 단 한 줄입니다. C#에서 유독 이런 "구조"가 심하게 나타나는데요,

오늘은 C#의 이러한 기본 구조에 대하여 알아보겠습니다.

1. using System;

먼저 가장 위에 있는 using System부터 알아보겠습니다.

System 네임스페이스에 있는 메서드나 변수 등을 바로 사용할 수 있게 해 줍니다.

여기서 네임스페이스라는 단어를 이해 못 하실 수 있는데요,

간단하게 생각하여 클래스의 상위 포지션으로 보면 됩니다.

 

함수들과 변수들을 기능에 맞게 묶어놓은 단위가 클래스라면

클래스를 묶어놓은 단위는 네임스페이스이라고 생각하시면 편합니다.

(사실 네임스페이스는 클래스, 인터페이스, 열거형, 구조체등을 모두 포함하는 개념이긴 합니다)

 

물론 이러한 연속적인 상위구조가 불필요하고 과하다고 느끼실 수도 있으나

조금 더 큰 프로젝트로 나아가다 보면 구조화하기 용이합니다.

2. namespace unicoti { }

앞서 소개한 네임스페이스를 정의하는 공간입니다.

이렇게 간단한 문제풀이를 할 때는 함수 나눠놓는 경우도 거의 없어서

클래스까지 나눠 네임스페이스로 분류할 일이 없다 보니 의미 없게 제 이름을 쓴 것입니다.

소개한 대로 클래스를 묶어놓는 단위인 만큼 대주제를 적어놓는 것이 일반적입니다.

3. class Program { }

네임스페이스 때도 조금 말했지만 클래스를 정의하는 공간입니다.

네임스페이스의 하위 버전이라 함수와 변수의 상위버전입니다.

소주제를 묶어놓는 공간으로 이해하시면 편할 겁니다.

4. static void Main(string [] args) { }

여기는 본격적으로 프로그램이 실행되는 공간입니다.

클래스의 내부인만큼 이것도 함수로 취급되며,

Main이라는 이름을 가지는 함수이기에 프로그램의 실행 첫 부분이라는 의미를 가지게 됩니다.

 

프로그램을 실행할 때, programName.exe arg1 arg2 이렇게 값을 줄 수 있게 때문에

Main(string [] args)로 정의해서 실행할 때 주는 값들을 받아오게 됩니다.

물론 실행 이후 입력하는 것과는 달라서 ReadLine이라는 함수도 존재합니다.

static으로 설정하여 인스턴스를 만들지 않고도 접근 가능하게 하느라 static이 붙었네요.

5. Console.WriteLine("Hello World!");

Main 함수 안에서 직접적으로 실행이 되는 부분입니다.

" "로 문자열이라는 점을 알려주었으며, 출력하라는 명령으로

Hello World라는 문장을 출력시키게 됩니다.

 

원래는 앞에 System. 이 붙어야 이 코드가 실행이 가능해지는데,

맨 위에서 using System; 달아놨기에 System. 을 입력하지 않아도

간단하게 실행이 가능해지는 것입니다. 기본 기능에 포함시킨다고 보면 편할 것 같습니다.

 

이렇게 한 줄의 코드로 인해 출력이라는 결과가 나타나지만 이 한 줄을 실행시키기 위해서

앞선 많은 구조의 코드들이 필요하게 됩니다. 다른 언어들에 비해서 C#이 유독

이런 기본 코드들이 많은지라 릴스에서 장난식으로 어렵다고 표현하기도 합니다만

언어 중에서 그렇게 어려운 편은 아닙니다.


오늘의 느낀 점)

원래는 게임 개발자로서 유니티만으로 C#을 익혀 기본 구조에 대해 하나도 몰랐다.

유니티에서 스크립트를 만들면 기본적으로 MonoBehaviour를 상속받는데, 이때 네임스페이스가 UnityEngine으로

정해진다는 것과 네임스페이스 자체의 정의, (원래는 class까지 밖에 몰랐다) 네임스페이스와 클래스의 관계 등

좀 더 구조적인 면에서 내가 작성하던 스크립트를 다시 돌아볼 수 있게 되었다.

 

유니티가 코딩하기 쉽도록 많이 배려해 준 결과라는 것을 다시 알게 되었고, 
순수 코딩면에서도 더욱 노력해야겠다고 느꼈다. 가장 쉬운 문제였지만 게임을 개발할 때보다도

얻은 점이 많을 수 있겠다고 느껴졌으며 당연하게도 기본부터 쌓아야 함을 다시 느꼈다.

유니티, 실무적인 게임 개발 기술 말고도 순수 코딩, 구조, 알고리즘 연습을 하기로 다짐했다.


이상으로 도움이 되었길 바라며,

 

끝.

반응형

댓글