[c#] 객체 지향 프로그래밍 스타일

객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 모든 것을 객체로 생각하고 객체 간의 상호 작용을 중심으로 프로그램을 설계하는 프로그래밍 패러다임입니다. C#은 객체 지향 프로그래밍 스타일을 지원하는 강력한 언어로, 다음과 같은 특징을 가지고 있습니다.

캡슐화 (Encapsulation)

캡슐화는 데이터와 해당 데이터에 작용하는 메서드들을 하나의 단위로 묶는 것을 의미합니다. C#에서는 클래스와 인터페이스를 사용하여 캡슐화를 구현할 수 있습니다. 클래스는 데이터(속성)와 메서드(행위)를 하나로 묶어 외부로부터 데이터를 보호하고, 인터페이스는 클래스가 제공하는 기능을 정의하여 객체 간의 상호 작용을 정교하게 조절할 수 있게 합니다.

class Employee
{
    private string name;
    private int age;

    public void SetName(string newName)
    {
        name = newName;
    }

    public string GetName()
    {
        return name;
    }
}

상속 (Inheritance)

상속은 기존 클래스의 속성과 기능을 다른 클래스가 재사용하는 것을 의미합니다. C#에서는 단일 상속만을 지원하며, overridebase 키워드를 통해 메서드 재정의 및 부모 클래스의 메서드 호출이 가능합니다.

class Manager : Employee
{
    public void ApproveLeave()
    {
        // code for leave approval
    }
}

다형성 (Polymorphism)

다형성은 여러 형태를 가질 수 있는 능력을 의미합니다. C#에서는 다형성을 메서드 오버로딩과 가상 메서드를 통해 구현할 수 있습니다. 메서드 오버로딩은 동일한 이름을 가진 메서드가 여러 개 정의되어 서로 다른 매개변수에 따라 다르게 동작하도록 하는 것이며, 가상 메서드는 자식 클래스에서 메서드를 재정의할 수 있도록 합니다.

class Shape
{
    public virtual void Draw()
    {
        // code for drawing shape
    }
}

class Circle : Shape
{
    public override void Draw()
    {
        // code for drawing circle
    }
}

객체 지향 프로그래밍은 코드의 재사용성과 유지보수성을 향상시키며, 코드의 가독성을 높여줍니다. C#은 이러한 객체 지향 프로그래밍의 장점을 최대한 활용할 수 있는 언어로, 유연하고 확장 가능한 소프트웨어를 개발하는 데 큰 도움을 줍니다.