[14장] C# 객체 지향 프로그래밍 기초 – 캡슐화와 다형성

C# 객체 지향 프로그래밍 기초 – 캡슐화와 다형성

클릭하면 큰 이미지고 볼 수 있습니다.

서론

안녕하세요, IT Insight 블로그의 아두이노 프로그래밍 설명해주는 블로거 ‘IT Insight’입니다. 오늘은 C# 객체 지향 프로그래밍의 기초 중 하나인 캡슐화와 다형성에 대해 알아보겠습니다. 객체 지향 프로그래밍은 현대의 소프트웨어 개발에서 매우 중요한 개념이며, C#은 이를 구현하는 데 매우 효과적인 언어입니다.

캡슐화 (Encapsulation)

캡슐화는 객체 지향 프로그래밍에서 중요한 개념 중 하나입니다. 이는 데이터와 그 데이터를 처리하는 메서드를 하나의 단위로 묶는 것을 의미합니다. 즉, 데이터와 그 데이터를 조작하는 메서드가 서로 논리적으로 연결되어 있어 외부에서 직접적인 접근을 제한하는 것입니다. 이렇게 하면 데이터의 무결성과 보안을 보장할 수 있습니다.

C#에서는 캡슐화를 구현하기 위해 접근 제한자를 사용합니다. 접근 제한자는 데이터나 메서드에 대한 접근 권한을 제어하는 역할을 합니다. 예를 들어, private 접근 제한자는 해당 멤버를 선언한 클래스 내에서만 접근할 수 있도록 제한합니다. 반면, public 접근 제한자는 어느 곳에서나 접근할 수 있도록 허용합니다.

캡슐화는 코드의 가독성과 유지 보수성을 향상시키는 데 도움이 됩니다. 데이터와 그에 대한 처리 방법이 함께 묶여 있기 때문에 코드를 이해하기 쉽고, 변경이 필요한 경우 해당 클래스만 수정하면 되기 때문입니다.

C#에서 객체 지향 프로그래밍의 기본 개념 중 하나인 캡슐화(Encapsulation)는 클래스의 세부 구현 내용을 숨기고, 외부에서는 오직 정의된 인터페이스를 통해서만 클래스와 상호작용할 수 있게 하는 것을 말합니다. 이를 통해 클래스의 내부 구현이 외부로부터 보호됩니다.

캡슐화의 가장 기본적인 예는 private 필드(또는 속성)와 public 메소드를 사용하는 것입니다. 아래에 간단한 C# 코드 예제를 제공하겠습니다.

public class Account
{
    // Private 필드: 클래스 외부에서 직접 접근할 수 없습니다.
    private double balance;

    // 생성자: 계좌를 초기화할 때 사용됩니다.
    public Account(double initialBalance)
    {
        balance = initialBalance;
    }

    // Public 메소드: 이 메소드를 통해 balance에 접근하고 수정합니다.
    public void Deposit(double amount)
    {
        if (amount > 0)
        {
            balance += amount;
        }
    }

    public void Withdraw(double amount)
    {
        if (amount <= balance)
        {
            balance -= amount;
        }
    }

    // Balance를 가져오는 Public 메소드
    public double GetBalance()
    {
        return balance;
    }
}

class Program
{
    static void Main(string[] args)
    {
        // Account 객체 생성
        Account myAccount = new Account(1000);

        // Deposit과 Withdraw 메소드를 사용하여 계좌 관리
        myAccount.Deposit(500);
        myAccount.Withdraw(200);

        // Balance 출력
        Console.WriteLine("Current Balance: " + myAccount.GetBalance());
    }
}

이 코드에서 Account 클래스는 balance라는 private 필드를 가지고 있습니다. Deposit, Withdraw, 그리고 GetBalance와 같은 public 메소드를 통해 balance 필드에 안전하게 접근하고 수정할 수 있습니다. 이러한 방식으로 캡슐화는 데이터의 무결성을 보장하고 클래스의 사용을 더욱 안전하게 만듭니다.

다형성 (Polymorphism)

다형성은 객체 지향 프로그래밍의 핵심 개념 중 하나입니다. 이는 같은 이름의 메서드나 연산자를 다른 방식으로 동작하도록 하는 기능을 말합니다. 즉, 다형성을 통해 여러 클래스가 동일한 메서드를 가지면서도 다른 방식으로 동작할 수 있습니다.

C#에서는 다형성을 구현하기 위해 상속과 인터페이스를 사용합니다. 상속은 부모 클래스의 특성을 자식 클래스가 상속받아 사용할 수 있도록 합니다. 이를 통해 자식 클래스는 부모 클래스의 메서드를 오버라이딩하여 동작을 변경할 수 있습니다.

인터페이스는 클래스가 특정한 메서드를 구현하도록 강제하는 역할을 합니다. 이를 통해 서로 다른 클래스들이 동일한 인터페이스를 구현함으로써 동일한 메서드를 호출할 수 있습니다. 이는 코드의 재사용성과 유연성을 높여줍니다.

C#에서 객체 지향 프로그래밍의 핵심 개념 중 하나인 다형성(Polymorphism)은 동일한 인터페이스나 베이스 클래스를 여러 가지 방법으로 구현하는 능력을 의미합니다. 다형성을 통해 코드의 유연성과 재사용성을 높일 수 있습니다.

다형성을 구현하는 가장 일반적인 방법은 상속과 메소드 오버라이딩입니다. 아래에 C#의 다형성을 보여주는 간단한 예제 코드를 제공하겠습니다.

using System;

// 베이스 클래스
public abstract class Shape
{
    // 추상 메소드: 파생 클래스에서 구현해야 합니다.
    public abstract void Draw();
}

// Shape를 상속받는 Rectangle 클래스
public class Rectangle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a rectangle");
    }
}

// Shape를 상속받는 Circle 클래스
public class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a circle");
    }
}

class Program
{
    static void Main(string[] args)
    {
        // Shape 타입의 배열을 생성하고, Rectangle과 Circle 객체를 저장합니다.
        Shape[] shapes = new Shape[2];
        shapes[0] = new Rectangle();
        shapes[1] = new Circle();

        // 다형성을 사용하여 각 형태를 그립니다.
        foreach (var shape in shapes)
        {
            shape.Draw();
        }
    }
}

이 예제에서, Shape 클래스는 Draw라는 추상 메소드를 선언합니다. RectangleCircle 클래스는 이 Shape 클래스를 상속받고, Draw 메소드를 각각 다르게 구현합니다. Main 메소드에서는 Shape 타입의 배열에 RectangleCircle 객체를 저장하고, 각 객체의 Draw 메소드를 호출합니다. 이를 통해 다형성의 핵심인 “하나의 인터페이스, 다양한 구현”을 실현할 수 있습니다.

마무리

오늘은 C# 객체 지향 프로그래밍의 기초 중 캡슐화와 다형성에 대해 알아보았습니다. 캡슐화를 통해 데이터와 그에 대한 처리 방법을 하나의 단위로 묶어 관리할 수 있으며, 다형성을 통해 여러 클래스가 동일한 메서드를 가지면서도 다른 방식으로 동작할 수 있습니다.

이러한 개념은 소프트웨어 개발에서 중요한 역할을 합니다. 객체 지향 프로그래밍을 통해 코드의 가독성과 유지 보수성을 향상시킬 수 있으며, 다형성을 통해 코드의 재사용성과 유연성을 높일 수 있습니다.

앞으로도 다양한 주제로 IT Insight 블로그에서 유용한 정보를 제공해 드리겠습니다. 감사합니다.

다른 글 보기