본문 바로가기
프로그래밍

프로그래밍의 추상화

by argentdarae 2025. 3. 11.
반응형

추상화란?

추상화는 복잡한 시스템에서 핵심적인 부분만을 남기고 불필요한 세부 사항을 숨기는 것이다

 

구체적으로 객체지향 프로그래밍 언어에서 인터페이스 혹은 추상 클래스를 통해 구현된다

 

예를 들어 Car라는 추상 클래스가 있다고 가정해보자

테슬라와 현대차는 각기 다른 방식으로 핸들링을 구현하고, 가속 페달을 밟았을 때 속도를 높이는 원리도 다를 수 있다. 하지만 사용자는 이러한 내부 구현을 몰라도 된다

중요한 것은 핸들을 돌리면 방향이 바뀌고, 가속 페달을 밟으면 차가 빨라지는 결과가 나온다는 것이다

 

추상화는 이처럼 행동과 결과만을 명확하게 정의하고, 내부 동작 방식은 숨김으로써 복잡성을 줄이는 개념이다

 

 

추상화의 장점

추상화의 주요 장점은 다음과 같다

 

읽기 쉬워짐

복잡한 구현을 감추고, 핵심적인 동작을 정의하는 인터페이스만 제공하므로 코드가 더 직관적이다

 

유지보수가 쉬워짐

코드의 변경이 필요할 때, 해당 코드가 미치는 범위가 어디서 어디까지인지 명확하게 알 수 있기 때문에 어디를 수정해야할지 빠르게 찾을 수 있다

 

결합도 감소

특정 구현에 의존하지 않고 상위 개념(인터페이스 혹은 추상 클래스)에 의존하도록 설계하여 모듈간 독립성을 유지할 수 있다

interface IPayment
{
    void ProcessPayment();
}

class CreditCardPayment : IPayment
{
    public void ProcessPayment()
    {
        Console.WriteLine("신용카드 결제 처리.");
    }
}

class PayPalPayment : IPayment
{
    public void ProcessPayment()
    {
        Console.WriteLine("PayPal 결제 처리.");
    }
}

class PaymentProcessor
{
    private IPayment _payment;

    public PaymentProcessor(IPayment payment)
    {
        _payment = payment;
    }

    public void Process()
    {
        _payment.ProcessPayment();
    }
}

// 새로운 결제 방식 추가 시 기존 코드 수정 없이 새로운 클래스만 구현하면 됨
PaymentProcessor processor = new PaymentProcessor(new CreditCardPayment());
processor.Process();

 

추상화되지 않은 객체의 단점

추상화되지 않은 객체의 주요 단점은 다음과 같다

 

가독성 저하

세부적인 로직이 모두 드러나 있기 때문에 코드의 핵심 동작을 파악하기 어려움

 

유지보수가 어려움

코드가 세부 구현에 의존적이어서 변경 시 다른 코드까지 수정해야 하는 경우가 많다

 

결합도 증가

특정 구현에 직접 의존하기 때문에, 수정할 때 다른 부분도 함께 변경해야 할 확률이 높다

class PaymentProcessor
{
    public void ProcessCreditCardPayment()
    {
        Console.WriteLine("신용카드 결제 처리.");
    }

    public void ProcessPayPalPayment()
    {
        Console.WriteLine("PayPal 결제 처리.");
    }
}

// 새로운 결제 방식 추가 시 기존 코드 변경이 필수
PaymentProcessor processor = new PaymentProcessor();
processor.ProcessCreditCardPayment();

'프로그래밍' 카테고리의 다른 글

객체지향적 프로그래밍의 장점  (0) 2025.03.12