CodeGym /행동 /C# SELF /C#에서 일반적인 프로그램 구조

C#에서 일반적인 프로그램 구조

C# SELF
레벨 8 , 레슨 1
사용 가능

1. 프로그램 — 부서가 가득한 사무실처럼

프로그래밍을 처음 배울 때는 그냥 코드 한 줄씩 쭉쭉 쓰면 다 잘 돌아갈 것 같지? 근데 프로그램이 조금만 복잡해지면 머릿속이 막 헷갈리기 시작해: 뭐가 어디 있는지, 왜 이렇게 썼는지, 한 줄 바꿔야 하면 그게 어디 있는지조차 모르겠고...

그래서 C#도 그렇고, 요즘 언어들은 대부분 코드를 "정리정돈"할 수 있는 방법을 줘. 언제든 프로그램이 뭘 하는지 딱 알 수 있고, 필요한 부분도 금방 찾을 수 있게 말이야.

회사라고 생각해봐. 인사팀, 회계팀, IT팀, 물류팀 등등 있잖아. 각 부서는 자기만의 책임, 직원, 할 일이 있어.

C# 프로그램에서 이런 "부서" 하나하나가 클래스야. 어떤 클래스는 사용자 관리, 다른 클래스는 계산, 또 다른 클래스는 파일 작업을 담당하지.

간단한 프로젝트 구조 예시:

  • Program.cs — 본사: 여기서 "시작점"이 있어, 모든 게 여기서 출발해.
  • User.cs — 사용자 데이터 저장/처리 부서.
  • Calculator.cs — 계산 담당 부서.
  • FileHelper.cs — 파일 전문가들.

아주 작은 프로그램에도 보통 클래스가 최소 하나는 있어. 대형 프로젝트는 수백 개 클래스가 쌓인 "초고층 빌딩"이지!

2. 클래스 — 도구 상자 같은 거야

C#은 객체지향 언어고 모든 게 객체야. 객체의 타입을 클래스라고 불러.

클래스는 우리가 필요한 것들(변수, 메서드, 프로퍼티 등)을 담아두는 상자나 캐비닛 같은 거야. "망치"라고 적힌 상자엔 망치 관련 도구만 들어있는 것처럼.

class Example
{
    // 여기에 우리 도구들: 변수, 메서드, 프로퍼티가 들어갈 거야
}
C#에서 클래스 선언하기

클래스엔 보통 변수랑 함수가 들어가. C#에선 클래스의 변수를 필드, 함수는 메서드라고 부르지만, 사실 의미는 똑같아.

우리 첫 코드 기억나?

Console.WriteLine("모두 안녕!");
string name = Console.ReadLine();

이 코드에도 클래스랑 메서드가 있어:

  • Console — 콘솔 작업용 메서드(함수)들이 들어있는 클래스야.
  • WriteLineConsole 클래스의 메서드로, 화면에 텍스트를 출력해.
  • ReadLineConsole 클래스의 메서드로, 키보드 입력을 읽어와.

프로그래밍이란 결국 자기만의 클래스랑 메서드를 만들고, 그게 다른 클래스의 메서드를 호출하는 거야.

3. 클래스의 필드(변수) — 클래스의 기억력

클래스 안에는 변수를 저장할 수 있어(이걸 보통 "필드"라고 불러). 이건 마치 우리가 데이터를 저장해두는 메모리 칸 같은 거지.

class Counter
{
    int value; // 필드 — 여기서 Counter의 현재 값이 저장돼
}
클래스 필드(변수) 예시

필드를 쓰면 클래스가 여러 메서드 호출 사이에도 뭔가를 기억할 수 있어. 예를 들어, 버튼을 몇 번 눌렀는지 세는 거지.

필드는 얼마든지 많이 만들 수 있어. 예시:

class User
{
    int id;             // 사용자 고유 번호
    string name;        // 사용자 이름
    int age;            // 나이
    string adress;      // 주소
    User[] children;    // 자녀
}

4. 메서드 — 클래스가 할 수 있는 행동

메서드는 클래스의 "능력"이야. 클래스가 직원이라면, 메서드는 그 직원이 할 수 있는 스킬이지.

  • 메서드는 뭔가를 화면에 출력할 수 있어.
  • 두 숫자의 합을 계산할 수도 있고.
  • 입력 데이터를 받아서 결과를 반환할 수도 있지.

메서드 구조:

  • 반환 타입(예: void — 아무것도 반환 안 함, int — 숫자 반환)
  • 메서드 이름(예: Print)
  • 괄호 안에 파라미터(없을 수도 있음)
  • 중괄호 { ... } — 메서드 본문
class Printer
{
    public void PrintHello()
    {
        Console.WriteLine("Hello!");
    }

    public int Add(int a, int b)
    {
        return a + b;
    }
}
클래스 메서드 예시

메서드와 관련된 더 자세한 내용은 다음 강의에서 다룰 거야.

5. 프로퍼티 — 똑똑한 변수

프로퍼티(property)는 "업그레이드된" 변수야: 그냥 값을 저장하는 게 아니라, 값을 읽거나 바꿀 때 뭔가를 할 수도 있어.

실생활 예시: 직원 월급을 그냥 막 바꿀 수 없잖아 — 회계팀이 제대로 된 건지 체크하지. 프로퍼티도 데이터를 "체크"할 수 있어:

class Person
{
    private int age;		// 클래스 변수(필드) 

    public int Age			// 프로퍼티 Age. 클래스 변수 age에 데이터 저장.
    {
        get { return age; }	// get 메서드 - 누가 Age 값을 읽으려고 할 때 호출됨 
        set 				// set 메서드 - 누가 Age 값을 바꾸려고 할 때 호출됨 
        {
            if (value >= 0)
                age = value;
        }
    }
}

set 메서드 안의 코드는 나이 값을 음수로 못 바꾸게 막아줘. 프로퍼티는 다음 강의에서 더 자세히 다룰 거야.

6. 접근 제한자

C#에서는 클래스의 어떤 부분이 다른 클래스에서 보이는지, 아니면 내부에서만 쓸 수 있는지 정할 수 있어. 이걸 접근 제한자라고 해. 필드, 메서드, 클래스 이름 앞에 public이라고 쓰면, 프로그램 어디서든 접근할 수 있어.

반대로 private라고 쓰면, 그 클래스 안에서만 접근 가능해. 다른 클래스에선 이 필드나 메서드가 아예 안 보이는 거지.

  • public — 모두에게 공개. 이런 메서드나 프로퍼티는 다른 클래스에서도 쓸 수 있어.
  • private — 클래스 내부에서만 보임. 이건 내부 디테일이라 다른 데서 건드리면 안 돼.
class Demo
{
    public int OpenValue;     // 외부에서 보임
    private int secretValue;  // 내부에서만 보임

    public void ShowOpen() { Console.WriteLine(OpenValue); }
    private void HideSecret() { Console.WriteLine(secretValue); }
}

황금 규칙: 필드는 보통 private로 만들고, 외부에 "공개"할 건 필요한 메서드나 프로퍼티(public)만 내보내.

7. 실제 클래스는 이렇게 생겼어

이제 "조립된" 예시 — 미니 계산기:

class Calculator
{
    private int result; // 결과 저장용 필드

    public int Result
    {
        get { return result; }
        private set { result = value; } // 클래스 내부에서만 접근 가능
    }

    public void Add(int a, int b)
    {
        result = a + b;
    }

    public void Clear()
    {
        result = 0;
    }
}

이런 방식은 거의 모든 최신 C# 프로그램에서 볼 수 있어!

8. Top-level statements

사실 C#에선 모든 코드가 항상 클래스 안에 있어. 클래스가 프로그램의 최소 단위야. 클래스는 여러 개 있을 수 있지만, 최소 하나는 꼭 필요해.

잠깐, 근데 우리가 방금 쓴 코드엔 클래스가 없었잖아?!

이게 바로 C#의 최신 기능 중 하나야: 클래스를 안 쓰고도 코드를 쓸 수 있고, C# 컴파일러가 알아서 클래스로 바꿔줘.

예를 들어, Program.cs에 이런 코드가 있다고 해봐:

// 네 코드
WriteSmile();
WriteSmile();
WriteSmile();

//네가 만든 함수
void WriteSmile()
{
    Console.WriteLine(":)");
}
Top-level statement: 클래스 없는 코드

C# 컴파일러는 이걸 이렇게 바꿔:

using System;

class Program
{
    static void Main()			// 네 코드
    {
        WriteSmile();
        WriteSmile();
        WriteSmile();        
    }

    static void WriteSmile()	//네가 만든 함수
    {
        Console.WriteLine(":)");
    }
}
컴파일러가 top-level statement를 클래스로 바꾸는 모습

강의의 절반만 이해해도 괜찮아: 중요한 건 대충 감을 잡는 거야. 다음 강의에서 여기 나온 것들 하나씩 다 뜯어볼 거니까!

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION