프로그래밍

객체지향 프로그래밍에서의 데이터 추상화(Data Abstraction)란?

maxboy 2025. 3. 27. 21:53

1. 데이터 추상화란?

  데이터 추상화(Data Abstraction)는 불필요한 구현 세부 사항을 숨기고, 필요한 기능만 외부에 제공하는 개념입니다. C#에서는 클래스(Class)와 인터페이스(Interface) 를 사용하여 데이터 추상화를 구현할 수 있습니다.

 

2. C#에서의 데이터 추상화 구현 방법

C#에서는 접근 제한자(Access Modifiers) 를 사용하여 데이터 및 메서드의 접근성을 조절할 수 있습니다.

 

  • public : 외부에서 접근 가능
  • private : 클래스 내부에서만 접근 가능
  • protected : 상속받은 클래스에서만 접근 가능
  • internal : 같은 어셈블리(프로젝트) 내에서 접근 가능

 

아래 링크는 이전에 발행한 클래스의 접근 제어자를 정리한 글입니다. 

 

클래스의 접근 제어자(Access Modifiers)

객체지향 프로그래밍(OOP)에서 클래스의 멤버(변수 및 메서드)에 대한 접근을 제어하는 키워드로, public, private, protected가 있습니다. 이를 통해 데이터 은닉(Encapsulation)을 구현하고, 객체 간의 의존

maxboy.tistory.com

 


 

3. 데이터 추상화 예시 코드

using System;

class Car
{
    private int speed; // 속도 (외부에서 직접 접근 불가능)

    public Car()
    {
        speed = 0; // 초기 속도 설정
    }

    public void Accelerate(int value)
    {
        if (value > 0)
        {
            speed += value;
            Console.WriteLine($"속도 증가: {speed} km/h");
        }
        else
        {
            Console.WriteLine("올바른 값을 입력하세요!");
        }
    }

    public void Brake()
    {
        speed = 0;
        Console.WriteLine("정지: 속도 0 km/h");
    }
}

class Program
{
    static void Main()
    {
        Car myCar = new Car();
        myCar.Accelerate(50);  // 속도 증가
        myCar.Brake();         // 속도 초기화

        // myCar.speed = 100;  // 오류! private 멤버에 직접 접근 불가
    }
}

 

speed 변수는 private으로 선언되어 외부에서 직접 접근할 수 없습니다. Accelerate() 및 Brake() 메서드를 public으로 선언했을 경우에만 speed변수에 접근 가능합니다. 사용자는 speed의 데이터 변수, 내부 동작을 몰라도 자동차를 가속하고 정지할 수 있습니다. 이것이 데이터 추상화의 개념입니다.

 

4. 데이터 추상화의 장점

데이터 추상화의 장점은 다음과 같습니다.

 

  • 보안 강화 : 외부에서 직접 데이터를 변경하지 못하도록 보호.
  • 유지보수성 향상 : 내부 구현을 변경해도 public 메서드만 유지하면 외부 코드에 영향 없음.
  • 코드 재사용성 증가 : 동일한 인터페이스를 유지하면서 다양한 구현을 적용할 수 있음.

 


 

5. 인터페이스를 활용한 데이터 추상화 구현 예시 코드

C#에서는 인터페이스(interface) 를 사용하여 데이터 추상화를 구현할 수도 있습니다.

using System;

interface IVehicle
{
    void Accelerate(int value);
    void Brake();
}

class Car : IVehicle
{
    private int speed;

    public Car()
    {
        speed = 0;
    }

    public void Accelerate(int value)
    {
        if (value > 0)
        {
            speed += value;
            Console.WriteLine($"속도 증가: {speed} km/h");
        }
        else
        {
            Console.WriteLine("올바른 값을 입력하세요!");
        }
    }

    public void Brake()
    {
        speed = 0;
        Console.WriteLine("정지: 속도 0 km/h");
    }
}

class Program
{
    static void Main()
    {
        IVehicle myCar = new Car();
        myCar.Accelerate(60);
        myCar.Brake();
    }
}

 

 

IVehicle 인터페이스는 Accelerate() 와 Brake() 같이 추상 메서드 기능만 정의하고, 구현(Implement)은 Car 클래스에서 정의하도록 합니다. 사용자 입장에서는 IVehicle 인터페이스만 알고 있으면, 실제 구현이 어떻게 되어 있는지 몰라도 사용 가능한 장점이 있습니다. 추상화의 핵심이 아닌가 싶습니다.

 

6. 데이터 추상화 VS 캡슐화

여기서 데이터의 캡슐화와 추상화 개념에 혼동이 올수 있는데, 정리하면 다음과 같습니다.

개념 설명 차이점
데이터 추상화 내부 구현을 숨기고 필요한 기능만 제공 사용자가 필요한 기능만 보이도록 하는 개념
(예: 인터페이스 활용)
캡슐화 데이터와 메서드를 하나의 단위(클래스)로 묶고, 데이터 접근을 제한 데이터 보호를 위한 기법
(예: private 변수 사용)

 


 

마지막으로...

C#의 데이터 추상화는 불필요한 세부 사항을 숨기고, 필요한 기능만 외부에 제공하는 객체지향 설계 원칙입니다. 이 원칙으로 보안성, 유지보수성, 코드 재사용성이 향상되며, 실무에서도 API 설계, 게임 개발, 데이터베이스 접근 등 다양한 분야에서 활용됩니다.