C# - 클래스: 초보자 가이드

안녕하세요, 미래의 프로그래머 여러분! 오늘 우리는 C# 클래스의 세계에 흥미로운 여정을 떠납니다. 코드를 작성한 적이 없으신 분들은 걱정하지 마세요 - 저는 친절한 가이드로서 단계별로 모든 것을 설명해드릴 것입니다. 그麼, 시작해보겠습니다!

C# - Classes

클래스란 무엇인가요?

시작하기 전에 클래스가 무엇인지 이해해보겠습니다. 클래스는 객체를 만들기 위한 도면이라고 생각해보세요. 그것은 쿠키를 만드는 도안처럼 쿠키의 모양과 특징을 정의합니다. 프로그래밍에서 클래스는 그 클래스의 객체가 가질 프로퍼티와 행동을 정의합니다.

클래스 정의하기

그麼, 간단한 클래스를 만들어보겠습니다. 우리는 Dog 클래스를 만들어보겠습니다. 왜냐하면, 누가 개를 사랑하지 않을까요?

public class Dog
{
// 클래스 멤버는 여기에 들어갑니다
}

이것이 클래스의 기본 구조입니다. public 키워드는 이 클래스가 프로그램의 다른 부분에서 액세스할 수 있음을 의미합니다. 중괄호 {} 안에 클래스 멤버를 정의할 것입니다.

프로퍼티 추가하기

프로퍼티는 우리의 개의 특성입니다. 그麼, 추가해보겠습니다:

public class Dog
{
public string Name;
public int Age;
public string Breed;
}

이제 우리의 Dog 클래스는 이름, 나이, 품종을 가지고 있습니다. 이들은 클래스의 필드 또는 프로퍼티라고 불립니다.

멤버 함수와 캡슐화

멤버 함수(또는 메서드)는 우리의 개가 수행할 수 있는 동작입니다. 그么, 우리의 개가 짖는 메서드를 추가해보겠습니다:

public class Dog
{
public string Name;
public int Age;
public string Breed;

public void Bark()
{
Console.WriteLine("Woof! Woof!");
}
}

Bark 메서드는 콘솔에 "Woof! Woof!"을 출력하는 간단한 동작입니다.

캡슐화

캡슐화는 우리의 개의 특성을 보호하는 거대한 거품처럼 생각할 수 있습니다. 이는 클래스 멤버에 대한 접근을 제어하는 방법입니다. 그麼, 우리의 클래스를 캡슐화하기 위해 수정해보겠습니다:

public class Dog
{
private string name;
private int age;
public string Breed { get; set; }

public string Name
{
get { return name; }
set { name = value; }
}

public int Age
{
get { return age; }
set
{
if (value > 0)
age = value;
}
}

public void Bark()
{
Console.WriteLine("Woof! Woof!");
}
}

이제 nameage는 사적으로 되었고, 공개된 프로퍼티를 통해 접근합니다. 이를 통해 나이가 항상 양수인지 확인하는 같은 논리를 추가할 수 있습니다.

C# 생성자

생성자는 클래스의 새로운 인스턴스를 만들 때 호출되는 특별한 메서드입니다. 이는 새로운 개를 얻을 때 개를 설정하는 것과 같습니다. 그么, 우리의 Dog 클래스에 생성자를 추가해보겠습니다:

public class Dog
{
// ... 이전 코드 ...

public Dog(string name, int age, string breed)
{
Name = name;
Age = age;
Breed = breed;
}
}

이제 우리는 다음과 같이 새로운 개를 만들 수 있습니다:

Dog myDog = new Dog("Buddy", 3, "Labrador");

C# 소멸자

소멸자는 객체가 더 이상 필요하지 않을 때 자원을 정리하는 메서드입니다. C#에서는 매우 드물게 사용됩니다. 그러나 완전성을 위해 정의 방법을 보여드리겠습니다:

public class Dog
{
// ... 이전 코드 ...

~Dog()
{
Console.WriteLine("Goodbye, " + Name + "!");
}
}

이 소멸자는 개 객체가 가비지 수거자에 의해 파괴될 때 호출됩니다.

C# 클래스의 정적 멤버

정적 멤버는 클래스 자체에 속하며 특정 인스턴스에 속하지 않습니다. 모든 인스턴스에 의해 공유됩니다. 그麼, 정적 멤버를 추가하여 얼마나 많은 개를 만들었는지 추적해보겠습니다:

public class Dog
{
// ... 이전 코드 ...

public static int DogCount = 0;

public Dog(string name, int age, string breed)
{
Name = name;
Age = age;
Breed = breed;
DogCount++;
}

public static void ReportDogCount()
{
Console.WriteLine("Total number of dogs: " + DogCount);
}
}

이제 우리가 새로운 Dog를 만들 때마다 DogCount가 증가합니다. 언제든지 Dog.ReportDogCount()을 호출하여 만든 개의 총 수를 확인할 수 있습니다.

모든 것을 합치기

그幺, 우리의 Dog 클래스를 프로그램에서 사용해보겠습니다:

class Program
{
static void Main(string[] args)
{
Dog dog1 = new Dog("Buddy", 3, "Labrador");
Dog dog2 = new Dog("Max", 5, "German Shepherd");

Console.WriteLine(dog1.Name + " is a " + dog1.Breed);
dog1.Bark();

Console.WriteLine(dog2.Name + " is " + dog2.Age + " years old");
dog2.Bark();

Dog.ReportDogCount();
}
}

이 프로그램은 두 개를 만들고 그 정보를 표시하며, 짖게 하고 만든 개의 총 수를 보고합니다.

결론

축하합니다! 지금까지 C# 클래스의 기본을 배웠습니다. 우리는 클래스 정의, 프로퍼티와 메서드 추가, 생성자와 소멸자 사용, 그리고 정적 멤버에 대해 다루었습니다. 기억하시길, 연습이 완벽을 만듭니다. 자신만의 클래스를 만들어 다양한 프로퍼티와 메서드를 실험해보세요.

여기서 주요 메서드를 요약한 표를 보여드리겠습니다:

메서드 설명
생성자 클래스의 새로운 인스턴스를 초기화합니다
소멸자 객체가 파괴될 때 자원을 정리합니다
Bark() 개가 짖습니다
ReportDogCount() 만든 개의 총 수를 보고합니다

계속 코딩하고, 곧 복잡한 프로그램을 쉽게 만들 수 있을 것입니다. 행복한 학습을!

Credits: Image by storyset