본문 바로가기
Programming

C# 객체지향 프로그래밍 (OOP)

by 나무수피아는 지식의 가지를 뻗어가는 공간입니다. 2025. 12. 8.
반응형

상속 (Inheritance)

   상속은 한 클래스가 다른 클래스로부터 속성과 메서드를 물려받는 기능입니다. 이를 통해 코드 재사용성을 높이고, 공통된 기능을 기반으로 확장할 수 있습니다.

상속 예시


public class Animal
{
    public string Name { get; set; }

    public void Eat()
    {
        Console.WriteLine($"{Name} is eating.");
    }
}

public class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine($"{Name} is barking.");
    }
}

class Program
{
    static void Main()
    {
        Dog dog = new Dog();
        dog.Name = "Buddy";
        dog.Eat();  // 상속받은 메서드
        dog.Bark(); // Dog 클래스의 메서드
    }
}

Dog 클래스는 Animal 클래스를 상속하여, Eat 메서드를 상속받고 Bark 메서드를 추가합니다.

캡슐화 (Encapsulation)

   캡슐화는 객체의 속성과 메서드를 하나의 단위로 묶고, 외부에서 직접 접근할 수 없도록 보호하는 기법입니다. 이를 통해 클래스의 내부 구현을 숨기고, 인터페이스를 통해 접근할 수 있게 합니다.

캡슐화 예시


public class BankAccount
{
    private decimal balance;

    public void Deposit(decimal amount)
    {
        if (amount > 0)
        {
            balance += amount;
            Console.WriteLine($"{amount} 원이 입금되었습니다.");
        }
    }

    public void Withdraw(decimal amount)
    {
        if (amount <= balance)
        {
            balance -= amount;
            Console.WriteLine($"{amount} 원이 출금되었습니다.");
        }
        else
        {
            Console.WriteLine("잔액이 부족합니다.");
        }
    }

    public decimal GetBalance()
    {
        return balance;
    }
}

class Program
{
    static void Main()
    {
        BankAccount account = new BankAccount();
        account.Deposit(1000);
        account.Withdraw(500);
        Console.WriteLine($"현재 잔액: {account.GetBalance()} 원");
    }
}

BankAccount 클래스에서는 balance 필드를 private로 선언하여 외부에서 직접 접근할 수 없게 하고, 메서드를 통해 안전하게 조작할 수 있습니다.

다형성 (Polymorphism)

   다형성은 동일한 메서드나 연산자가 여러 다른 형태로 동작할 수 있게 하는 기능입니다. C#에서는 메서드 오버로딩과 메서드 오버라이딩을 통해 다형성을 구현할 수 있습니다.

다형성 예시 (메서드 오버라이딩)


public class Animal
{
    public virtual void Speak()
    {
        Console.WriteLine("Animal makes a sound");
    }
}

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

public class Cat : Animal
{
    public override void Speak()
    {
        Console.WriteLine("Cat meows");
    }
}

class Program
{
    static void Main()
    {
        Animal animal1 = new Dog();
        Animal animal2 = new Cat();

        animal1.Speak();  // Dog barks
        animal2.Speak();  // Cat meows
    }
}

Speak 메서드는 virtual로 정의되어 있으며, 이를 자식 클래스인 DogCat에서 오버라이딩하여 각기 다른 동작을 구현합니다.

abstract, sealed, virtual, override

abstract: 추상 클래스나 메서드를 정의할 때 사용됩니다. 추상 메서드는 구현되지 않으며, 자식 클래스에서 구현해야 합니다.


public abstract class Animal
{
    public abstract void Speak();
}

- sealed: 클래스나 메서드의 상속을 막을 때 사용됩니다.


public sealed class FinalClass
{
    // 이 클래스는 더 이상 상속될 수 없습니다.
}
반응형

'Programming' 카테고리의 다른 글

C# 델리게이트와 이벤트  (0) 2025.12.10
C# 컬렉션과 제네릭  (0) 2025.12.09
C# 클래스와 객체  (0) 2025.12.07
C# 인터페이스와 추상 클래스  (0) 2025.12.06
C# 메서드와 매개변수  (0) 2025.12.05