1. 프로그램 — 부서가 가득한 사무실처럼
프로그래밍을 처음 배울 때는 그냥 코드 한 줄씩 쭉쭉 쓰면 다 잘 돌아갈 것 같지? 근데 프로그램이 조금만 복잡해지면 머릿속이 막 헷갈리기 시작해: 뭐가 어디 있는지, 왜 이렇게 썼는지, 한 줄 바꿔야 하면 그게 어디 있는지조차 모르겠고...
그래서 C#도 그렇고, 요즘 언어들은 대부분 코드를 "정리정돈"할 수 있는 방법을 줘. 언제든 프로그램이 뭘 하는지 딱 알 수 있고, 필요한 부분도 금방 찾을 수 있게 말이야.
회사라고 생각해봐. 인사팀, 회계팀, IT팀, 물류팀 등등 있잖아. 각 부서는 자기만의 책임, 직원, 할 일이 있어.
C# 프로그램에서 이런 "부서" 하나하나가 클래스야. 어떤 클래스는 사용자 관리, 다른 클래스는 계산, 또 다른 클래스는 파일 작업을 담당하지.
간단한 프로젝트 구조 예시:
- Program.cs — 본사: 여기서 "시작점"이 있어, 모든 게 여기서 출발해.
- User.cs — 사용자 데이터 저장/처리 부서.
- Calculator.cs — 계산 담당 부서.
- FileHelper.cs — 파일 전문가들.
아주 작은 프로그램에도 보통 클래스가 최소 하나는 있어. 대형 프로젝트는 수백 개 클래스가 쌓인 "초고층 빌딩"이지!
2. 클래스 — 도구 상자 같은 거야
C#은 객체지향 언어고 모든 게 객체야. 객체의 타입을 클래스라고 불러.
클래스는 우리가 필요한 것들(변수, 메서드, 프로퍼티 등)을 담아두는 상자나 캐비닛 같은 거야. "망치"라고 적힌 상자엔 망치 관련 도구만 들어있는 것처럼.
class Example
{
// 여기에 우리 도구들: 변수, 메서드, 프로퍼티가 들어갈 거야
}
클래스엔 보통 변수랑 함수가 들어가. C#에선 클래스의 변수를 필드, 함수는 메서드라고 부르지만, 사실 의미는 똑같아.
우리 첫 코드 기억나?
Console.WriteLine("모두 안녕!");
string name = Console.ReadLine();
이 코드에도 클래스랑 메서드가 있어:
- Console — 콘솔 작업용 메서드(함수)들이 들어있는 클래스야.
- WriteLine — Console 클래스의 메서드로, 화면에 텍스트를 출력해.
- ReadLine — Console 클래스의 메서드로, 키보드 입력을 읽어와.
프로그래밍이란 결국 자기만의 클래스랑 메서드를 만들고, 그게 다른 클래스의 메서드를 호출하는 거야.
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(":)");
}
C# 컴파일러는 이걸 이렇게 바꿔:
using System;
class Program
{
static void Main() // 네 코드
{
WriteSmile();
WriteSmile();
WriteSmile();
}
static void WriteSmile() //네가 만든 함수
{
Console.WriteLine(":)");
}
}
강의의 절반만 이해해도 괜찮아: 중요한 건 대충 감을 잡는 거야. 다음 강의에서 여기 나온 것들 하나씩 다 뜯어볼 거니까!
GO TO FULL VERSION