프로그래밍공부/C#기초

C# 프로그램 기초 - 05

Roslyn 2024. 1. 5. 15:15
반응형

 

프로그램도 하나의 언어이고, 언어를 배우기 위한 과정은 다양한 방법으로 존재합니다.

 

우리는 흔히 "교과서적인 방법"이란 표현을 사용하곤 하는데, 먼저 기반 지식에 대한 공부를 다 한 다음에 실질적인 학습에 들어가는 과정을 말합니다.

이는 대부분 과거의 학교들이 수행했던 방법으로, 이 방법은 언어를 습득하는데 있어서는 결코 좋지 않은 방법이란 것을 다들 알고 있습니다.

 

그럼에도 불구하고, 아직까지도 그저 "시험을 잘 보기 위한" 수단으로 언어를 교과서적인 방법으로 학습하고 있습니다.

 

하지만 프로그래밍 언어까지 그렇게 공부할 필요는 없습니다.  우리의 목표는 자격증이나 시험이 아니니깐요.

그렇기 때문에 모든 개념, 모든 요소를 하나하나 그게 뭔지 일일이 알고 접근할 필요는 없습니다.

그런 "절차"들은 오히려 진짜 본질을 배우는데 높은 진입장벽이 될 뿐입니다.

 

우리는 지난 번에 Hello World 라는 글귀를 출력하는 콘솔 프로그램을 만들었지만, 정작 단 한줄도 코딩하지 않았습니다.

코딩에 필요한 최소한의 지식을 습득해야 하는데, 오늘 여기서 이야기하는 지식은 그냥 한번 흘려보고 흘려듣는다 생각해야 합니다.

이것 하나하나에 너무 깊숙이 파고들면, C# 이란 언어를 익히기 전에 먼저 지쳐 버릴지도 모릅니다.

 

영어를 공부하려면 대화부터 하는게 효율적인 것처럼, C#을 공부하기 위해서는 그냥 코딩부터 하는게 답일지도 모릅니다.

다만, 영어도 ABCD는 알고 이야기 해야 하는 것처럼, C#도 최소한의 코딩을 시작하기에 앞서 알아야 하는 것들이 있습니다.

 

앞서 이야기한 것처럼 그 요소와 개념을 간단하게 짚고 넘어갈 것이니, 참고만 하고 애써 외우거나 이해하려고 하지 마세요.

편한 마음으로 보시기 바랍니다.

 

(1) 콘솔 (Console)

우리는 이전에 프로그램이란 것이 입력을 받으면 출력하는 거라고 이야기 했습니다.

그런데 입력을 하기 위해서는 입력할 수단이 필요하죠.  물리적으로 키보드와 마우스가 입력 도구인 것 처럼, 프로그램은 UI(User Interface) 라는 것을 통해 수단을 제공하게 됩니다.

유아이(UI)라고 부르는 이것은 텍스트 기반에 콘솔(Console) UI와 그래픽 기반에 GUI가 있는데, 통상 우리가 게임할 때, 혹은 우리가 지금 보고 있는 이런 인터넷 브라우저, 윈도우 OS 등이 모두 그래픽 기반 GUI 입니다.

마우스로 뭔가를 클릭하거나, 스마트폰에서 뭔가를 터치해서 실행하는 것들은 모두 GUI로 이루어져 있다고 보시면 됩니다.

반면 콘솔은 텍스트 기반입니다.  윈도우 실행창에서 CMD 라고 입력하고 엔터를 치면 콘솔창을 볼 수 있습니다.

 

 

 

여기서 실행되는 프로그램을 콘솔 앱(앱은 App, 어플리케이션 Application 의 약자입니다.) 이라고 부릅니다.

그리고 대부분의 프로그래밍 언어는 초반에, 바로 이 콘솔을 통해서 학습을 하게 됩니다.

 

(2) 네임스페이스(Namespace)

Hello world를 작성했던 코드의 맨 첫줄을 보면 namespace 라는게 보일겁니다.

네임스페이스란 "공통요소끼리의 집합"이라고 보시면 됩니다.  사실 이 말 자체가 지금은 이해하기 힘드실 텐데, 본인이 만들고자 하는 프로그램을 하나의 집으로 비유하자면, 네임스페이스는 그 집의 바닥이라고 생각하세요.

앞으로 여러분이 만드는 것들을 그 집의 바닥에 하나씩 차곡차곡 놓아서 집 구조를 완성하게 될테니깐요.

 

(3) 인터널(internal)

사전적 의미로 "내부의" 라는 표현으로 해석되는데, "내부에 공개된 요소" 를 의미합니다.

우리는 이것을 "접근 제어자" 라고 부르는데, 지금은 굳이 그런 어려운 단어를 써가며 이해할 필요 없습니다.

그냥 지금은 "누구는 접근할 수 있고, 누구는 접근할 수 없는 단계"라고 생각하시면 됩니다.

- 퍼블릭(public ) : 모두다 써라.

- 인터널(internal) : 내부 사람만 써라.

- 프로텍티드(protected) : 내 식구(자식)만 써라.

- 프라이빗(private) : 나만 쓸래.

지금은 이렇게 이해하고 넘어갑니다.

 

(4) 클래스(class)

프로그램을 구성하는 큰 줄기의 단위라고 생각하시면 됩니다.

네임스페이스를 바닥이라고 묘사했으니, 클래스는 "가구" 정도가 되겠네요.

어디에 어떤 클래스(=가구)를 놓느냐에 따라서 그 프로그램의 구성(배치)이 달라지겠죠?

클래스를 이해할때는 "특정 목적을 수행하는 기능들의 집합"이라고 이해하면 조금 편해지실 겁니다.

그 세부적인 개념과 이해는 나중에 프로그램을 조금 알고 난 다음에 하세요.

이거 하나만 기억하세요.  클래스라는 개념은 아주 중요한 개념이다.  나중에라도 꼭 잘 알고 넘어가야하는 개념이다.  이렇게만 기억합시다.

 

(5) 스태틱(static) 

스태틱은 정적 요소를 의미합니다.  "정적인게 뭐지?"라고 할 수 있습니다.

그래서 지금은 정적이란 단어에 휘둘리지 마시고, 아무나 쓰라고 가져다 놓은 도구라고 생각하세요.

집을 비유로 들었으니, 청소도구 정도로 생각해 볼 수 있겠습니다.

집을 사용하다가 누구든 청소할게 필요하면 와서 빗자루를 가져가 쓸어 버릴 수 있듯이, 스태틱은 그런 도구라고 생각하세요.

 

(6) 보이드(void)

이는 반환할 게 없다는 의미입니다.

우리는 이미 프로그램이란 입력과 출력이라고 정의했습니다.

그런데 간혹, 어떤 프로그램은 입력만 받고 아무런 결과를 출력하지 않습니다.

이렇게 출력(Output)이 없는 기능을 보이드(void)로 정의합니다.

 

(7) Main 함수

Main은 함수의 이름입니다.  함수란 "기능"을 의미하는데, 기능에 Main이란 이름을 붙인겁니다.

다만 Main함수는 조금 특별한 의미를 가지는데, 프로그램이 시작될 때, 제일 처음에 실행되는 함수로 "약속"되어 있습니다.

이를 "진입점"이라고 하는데, 프로그램을 실행시키면 이 Main 함수가 자동으로 호출됩니다.

 

(8) string[] args

앞서 자료구조에 대해 이야기할 때, 문자열(string)에 대해 이야기 했었고, 배열(Array)에 대해서도 이야기 했죠.

string[] 는 문자열로된 배열을 의미합니다.

그냥 "문자열끼리 모아놓은 것" 또는 좀 더 큰 "문자열", "문자열의 집합" 정도로 이해하고 넘어가세요.

뒤에 args 는 문자열배열의 이름입니다. args라는 string[] 문자열 배열이 선언된거고, 괄호() 안에 들어가 있는데, 이것을 함수의 파라미터(parameter)라고 부릅니다.

 

(9) 파라미터(Parameter)

파라미터란 함수가 실행될 때, 함수에게 제시하는 조건을 의미합니다.

가령 A라는 함수가 있습니다.  이 A라는 함수는 파라미터로 소문자 a 라는 숫자(int)를 받는다고 가정합니다.

그럼 다음과 같은 형식이 됩니다.

int A(int a)

앞에 int 는 A라는 함수가 int라는 숫자를 반환(출력)한다는 의미이고, int a는 a라는 숫자를 파라미터로 입력받는다는 의미입니다.

이 함수가 입력받은 값에 5를 더하는 함수라고 가정한다면,

 

A(3) = 8

A(7) = 12

와 같이 숫자가 반환되는 것이죠.

아직 좀 어려운 개념일 수 있으니, "그런 것들이 있다" 정도로만 이해하고 넘어갑니다.

 

(10) 코드블럭 

앞서도 한번 설명했었던 코드블럭 { } 은 이 함수의 몸체입니다.

함수의 내용이 선언된 내용이 코드블럭 {} 안에 내용이 되는 겁니다.

 

 

이제 다시 코드를 봅시다.

 

namespace Examples.Example01

//여기서부터는 네임스페이스야~ 그리고 네임스페이스의 이름은 이거야~ 라고 알려주는 겁니다.
{

//이게 네임스페이스의 코드블럭 시작 기호로  이 네임스페이스에 포함되는 내용은 여기서부터야~ 라고 알려주는 겁니다.
    internal class Program

   //내부에서만 이용하는 클래스인  Program 이라는 상징적 클래스로 Main 함수와 함께 프로그램의 진입점을 의미합니다.
    {

    //프로그램의 코드블럭 시작 위치입니다.
        static void Main(string[] args)

        //공용함수인 Main은 아무것도 반환하지 않습니다(void), 그리고 args라는 문자열배열을 파라미터로 입력 받습니다.
        {

        //여기서부터가 Main 함수의 코드블럭 시작점입니다.
            Console.WriteLine("Hello, World!");

            //Consolw.WriteLine 이라는 명령을 통해 콘솔 화면에 Hello, World라는 텍스트를 출력하라는 내용입니다.

            //이 내용에 대해서는 추후 보다 자세히 다루겠습니다.
        }

        //Main함수가 여기서 종료됩니다.  여기까지가 Main함수라는 코드블럭의 종료기호입니다.
    }

    //여기까지가 Program이라는 클래스라는 코드블럭의 종료기호 입니다.
}

//여기까지가 네임스페이스라는 코드블럭의 종료기호 입니다.

 

자, 오늘은 어제 작성한 코드에 대해 간략한 리뷰를 진행해 보았습니다.

아직 모르는 것들 투성이고 알아야할것들이 산더미지만, 차근 차근 하나씩 알아가 보도록 합시다.

 

화이팅~

 

 

반응형

'프로그래밍공부 > C#기초' 카테고리의 다른 글

C# 프로그램 기초 - 07  (2) 2024.01.08
C# 프로그램 기초 - 06  (0) 2024.01.08
C# 프로그램 기초 - 04  (2) 2024.01.04
C# 프로그램 기초 - 03  (2) 2024.01.04
C# 프로그램 기초 - 02  (2) 2024.01.03