본문 바로가기
이론/개발 지식

객체지향 프로그래밍의 특징 - 캡슐화, 상속, 다형성, 추상화

by 퇴근후개발 2024. 3. 21.
반응형

객체지향 프로그래밍의 특징

객체지향 프로그래밍(OOP)은 몇 가지 주요 특징이 존재하는데, 이번 글에서는 캡슐화, 상속, 다형성, 그리고 추상화에 대해 자세히 살펴보겠습니다.

1. 캡슐화(Encapsulation)


캡슐화는 데이터와 그 데이터를 조작하는 메서드를 하나의 단위로 묶는 것을 의미합니다. 이를 통해 데이터의 무결성을 보호하고 외부에서의 직접적인 접근을 제한할 수 있습니다. C#에서는 접근 제한자를 이용하여 캡슐화를 구현할 수 있습니다.

public class Car
{
    private int speed;

    public void Accelerate(int amount)
    {
        speed += amount;
    }

    public void Decelerate(int amount)
    {
        speed -= amount;
    }

    public int GetSpeed()
    {
        return speed;
    }
}

위의 예시에서는 속도(speed)를 private으로 선언하여 외부에서 직접 접근하지 못하도록 하였습니다. 대신에 Accelerate, Decelerate, GetSpeed 메서드를 통해 속도를 조작하고 조회할 수 있습니다.

2. 상속(Inheritance)

상속은 기존 클래스의 특성을 그대로 물려받아 새로운 클래스를 만드는 개념입니다. C#에서는 콜론(:)을 사용하여 상속을 구현할 수 있습니다.

public class Animal
{
    public virtual void Speak()
    {
        Console.WriteLine("Animal speaks");
    }
}

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

위의 예시에서는 Animal 클래스를 정의하고, 이를 상속받아 Dog 클래스를 정의했습니다. Dog 클래스는 Animal 클래스의 Speak 메서드를 오버라이딩하여 "Dog barks"를 출력하도록 재정의하였습니다.

3. 다형성(Polymorphism)

다형성은 동일한 메서드 호출에 대해 다른 동작을 수행할 수 있는 능력을 의미합니다. C#에서는 메서드 오버로딩과 가상 메서드를 통해 다형성을 구현할 수 있습니다.

public class Shape
{
    public virtual void Draw()
    {
        Console.WriteLine("Drawing Shape");
    }
}

public class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing Circle");
    }
}

public class Rectangle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing Rectangle");
    }
}

위의 예시에서는 Shape 클래스를 정의하고, 이를 상속받아 Circle 클래스와 Rectangle 클래스를 정의했습니다. 각 클래스는 Draw 메서드를 오버라이딩하여 다형성을 구현하였습니다.

4. 추상화 (Abstraction)

추상화는 복잡한 시스템에서 핵심적인 기능에만 집중하고 불필요한 세부사항을 숨기는 것을 의미합니다. C#에서는 추상 클래스와 인터페이스를 사용하여 추상화를 구현할 수 있습니다.

public abstract class Vehicle
{
    public abstract void Move();
}

public class Car : Vehicle
{
    public override void Move()
    {
        Console.WriteLine("Car is moving");
    }
}

public interface IAnimal
{
    void Speak();
}

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

위의 예시에서는 Vehicle 추상 클래스와 IAnimal 인터페이스를 정의하였습니다. 이를 상속받아 Car 클래스와 Dog 클래스를 정의하여 추상화를 구현하였습니다.

객체지향 프로그래밍의 특징인 캡슐화, 상속, 다형성, 추상화를 C#을 사용하여 살펴보았습니다. 이러한 원칙들을 잘 이해하고 활용함으로써 효율적이고 유지보수성이 높은 코드를 작성할 수 있습니다.

반응형