Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 추상화(Abstraction) 완벽 정리: 인터페이스와 구현의 분리

추상화란 무엇인가?

추상화(Abstraction)는 외부에는 필요한 핵심 정보만 노출하고, 복잡한 내부 동작이나 배경 세부 사항은 숨기는 프로그래밍 기법입니다. 이는 인터페이스(Interface)와 구현(Implementation)의 분리라는 원칙에 기반하며, 객체 지향 프로그래밍의 핵심 개념 중 하나로 꼽힙니다.

쉽게 말해, 사용자는 '무엇을 하는지'만 알면 되고 '어떻게 동작하는지'는 몰라도 된다는 것입니다. 자동차를 운전할 때 엔진의 내부 구조를 몰라도 핸들과 페달만 조작하면 되는 것과 같은 원리입니다.

C++에서 클래스를 통한 추상화

C++에서는 클래스(class)가 추상화를 구현하는 주요 수단입니다. 클래스는 외부에서 데이터를 다룰 수 있도록 public 메서드를 제공하고, 멤버 변수나 내부 로직 등 나머지 구조는 private으로 숨깁니다. 덕분에 사용자는 내부 구현 방식을 전혀 알지 못한 채 필요한 기능만 자유롭게 사용할 수 있습니다.

다음은 C++ 클래스를 사용하여 추상화를 구현한 예제 프로그램입니다.

예제 코드

#include <iostream>
using namespace std;
class Abstraction {
   private:
   int length, breadth;
   public:
   void setValues(int l, int b) {
      length = l;
      breadth = b;
   }
   void calcArea() {
      cout<<"Length = " << length << endl;
      cout<<"Breadth = " << breadth << endl;
      cout<<"Area = " << length*breadth << endl;
   }
};
int main() {
   Abstraction obj;
   obj.setValues(5, 20);
   obj.calcArea();
   return 0;
}

실행 결과

Length = 5
Breadth = 20
Area = 100

코드 상세 분석

위 프로그램에서 Abstraction 클래스의 lengthbreadthprivate 변수로 선언되어 외부에서 직접 접근할 수 없습니다. 대신 이 값들을 초기화하는 함수와, 길이와 너비를 곱해 면적을 계산해 출력하는 함수가 public으로 제공됩니다. 바로 이러한 구조가 추상화를 보여주는 핵심 부분입니다.

class Abstraction {
   private:
   int length, breadth;
   public:
   void setValues(int l, int b) {
      length = l;
      breadth = b;
   }
   void calcArea() {
      cout<<"Length = " << length << endl;
      cout<<"Breadth = " << breadth << endl;
      cout<<"Area = " << length*breadth << endl;
   }
};

main() 함수에서는 먼저 Abstraction 타입의 객체를 생성합니다. 그다음 setValues() 함수를 호출하여 값 5와 20을 전달하고, 마지막으로 calcArea() 함수를 통해 저장된 값과 계산된 면적을 화면에 출력합니다.

Abstraction obj;
obj.setValues(5, 20);
obj.calcArea();

정리

이처럼 C++의 추상화는 접근 지정자(private, public)를 활용해 데이터 은닉을 실현하고, 공개된 인터페이스를 통해서만 객체와 상호작용하도록 설계됩니다. 이를 통해 코드의 복잡도를 낮추고, 유지보수성과 보안성을 크게 향상시킬 수 있습니다.