추상화란 무엇인가?
추상화(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 클래스의 length와 breadth는 private 변수로 선언되어 외부에서 직접 접근할 수 없습니다. 대신 이 값들을 초기화하는 함수와, 길이와 너비를 곱해 면적을 계산해 출력하는 함수가 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)를 활용해 데이터 은닉을 실현하고, 공개된 인터페이스를 통해서만 객체와 상호작용하도록 설계됩니다. 이를 통해 코드의 복잡도를 낮추고, 유지보수성과 보안성을 크게 향상시킬 수 있습니다.