본문 바로가기
IT/C#

C# Class는?

by eplus 2024. 11. 24.
728x90
반응형

C#에서 **클래스(Class)**는 객체 지향 프로그래밍(OOP)의 핵심 요소로, 데이터와 메서드를 하나의 논리적 단위로 묶는 데 사용됩니다. 클래스는 객체(Object)를 생성하는 청사진(템플릿) 역할을 하며, 코드의 재사용성과 유지보수성을 높여줍니다.


1. 클래스의 기본 구조

클래스는 필드, 속성, 메서드, 생성자, 소멸자 등의 구성 요소를 포함합니다.

using System;

namespace Example
{
    public class Person
    {
        // 필드 (Field)
        private string name;

        // 속성 (Property)
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        // 생성자 (Constructor)
        public Person(string name)
        {
            this.name = name;
        }

        // 메서드 (Method)
        public void Greet()
        {
            Console.WriteLine($"Hello, my name is {name}.");
        }
    }
}

2. 클래스의 주요 구성 요소

(1) 필드 (Field)

  • 클래스 내부에서 데이터를 저장하는 변수.
  • 보통 private 접근 제한자를 사용하여 외부 접근을 차단.
private int age;

(2) 속성 (Property)

  • 필드에 대한 읽기/쓰기 접근을 제어하는 인터페이스.
  • C#의 속성은 get과 set 접근자를 통해 구현.
public int Age
{
    get { return age; }
    set { age = value; }
}
  • 자동 구현 속성
    public string Name { get; set; } = "Unknown";
    

(3) 메서드 (Method)

  • 클래스가 수행할 작업을 정의.
  • public, private 등 접근 제한자를 통해 메서드의 접근 범위를 지정.
public void SayHello()
{
    Console.WriteLine("Hello!");
}

(4) 생성자 (Constructor)

  • 객체 생성 시 호출되며, 필드나 속성을 초기화.
  • 생성자의 이름은 클래스 이름과 동일.
public Person(string name)
{
    this.name = name;
}

(5) 소멸자 (Destructor)

  • 객체가 메모리에서 해제될 때 호출.
  • 거의 사용되지 않으며, 가비지 컬렉터가 자동으로 메모리를 관리.
~Person()
{
    Console.WriteLine("Object is destroyed.");
}

3. 클래스의 접근 제한자

클래스와 멤버에 적용 가능한 접근 제한자는 다음과 같습니다.

  • public: 모든 곳에서 접근 가능.
  • private: 클래스 내부에서만 접근 가능.
  • protected: 클래스와 이를 상속받는 클래스에서만 접근 가능.
  • internal: 동일 어셈블리 내에서 접근 가능.
  • protected internal: 동일 어셈블리 또는 상속받은 클래스에서 접근 가능.

4. 클래스와 객체

객체 생성

클래스를 기반으로 객체를 생성하려면 new 키워드를 사용.

Person person = new Person("Alice");
person.Greet(); // 출력: Hello, my name is Alice.

참조와 값

  • 객체는 참조 타입으로, 메모리의 힙(Heap) 영역에 저장.
  • 같은 객체를 참조하는 변수는 동일한 데이터를 공유.

5. 클래스의 상속

C#에서는 : 기호를 사용해 상속을 구현.

기본 상속

public class Animal
{
    public void Eat() => Console.WriteLine("I can eat.");
}

public class Dog : Animal
{
    public void Bark() => Console.WriteLine("I can bark.");
}
Dog dog = new Dog();
dog.Eat();  // 부모 클래스 메서드
dog.Bark(); // 자식 클래스 메서드

다형성 (Polymorphism)

  • virtual, override 키워드를 사용하여 메서드의 동작을 변경.
public class Animal
{
    public virtual void Speak() => Console.WriteLine("Animal sound");
}

public class Dog : Animal
{
    public override void Speak() => Console.WriteLine("Bark");
}

6. 정적 멤버 (Static Members)

  • 클래스에 속하며, 객체를 생성하지 않고도 접근 가능.
public class Calculator
{
    public static int Add(int a, int b) => a + b;
}
int result = Calculator.Add(3, 5); // 8

7. 인터페이스와 클래스

클래스는 인터페이스를 구현하여 특정 계약을 따를 수 있습니다.

public interface IShape
{
    double GetArea();
}

public class Circle : IShape
{
    public double Radius { get; set; }
    public double GetArea() => Math.PI * Radius * Radius;
}

8. 클래스의 주요 키워드

  • abstract: 추상 클래스를 정의. 직접 인스턴스를 생성할 수 없음.
  • sealed: 상속 불가능한 클래스를 정의.
  • partial: 클래스를 여러 파일로 나눌 수 있음.
  • this: 현재 인스턴스를 참조.

9. 예제: 실용적인 클래스

public class BankAccount
{
    public string Owner { get; set; }
    private decimal balance;

    public BankAccount(string owner, decimal initialBalance)
    {
        Owner = owner;
        balance = initialBalance;
    }

    public void Deposit(decimal amount)
    {
        if (amount > 0)
            balance += amount;
    }

    public void Withdraw(decimal amount)
    {
        if (amount > 0 && amount <= balance)
            balance -= amount;
    }

    public void DisplayBalance()
    {
        Console.WriteLine($"Owner: {Owner}, Balance: {balance:C}");
    }
}
BankAccount account = new BankAccount("Alice", 1000);
account.Deposit(500);
account.Withdraw(200);
account.DisplayBalance(); // 출력: Owner: Alice, Balance: $1,300.00

C# 클래스는 강력한 데이터 캡슐화, 상속, 다형성, 재사용성을 제공하며, 대규모 애플리케이션 개발에 적합합니다.

728x90

'IT > C#' 카테고리의 다른 글

C#과 VB.NET의 차이  (41) 2024.11.25
C# 개발툴은?  (38) 2024.11.24
C# 기본 문법  (42) 2024.11.24
C# 데이터 유형은?  (0) 2024.11.24
C# 이란?  (41) 2024.11.24