티스토리 뷰

반응형
📘 추상화(Abstraction) – C++ 기반 소프트웨어 설계의 핵심

📘 추상화(Abstraction) – 소프트웨어 설계의 핵심

1️⃣ 추상화란 무엇인가?

🔹 정의

추상화(Abstraction)는 소프트웨어에서 복잡한 구조나 동작을 단순화하여, 필요한 정보만 외부에 보여주고, 나머지는 숨기는 기법입니다.

"어떻게 동작하는지는 숨기고, 무엇을 할 수 있는지만 보여주는 것"


2️⃣ 실생활 예시

☕ 커피 자판기

  • 사용자 입장: 버튼만 누르면 커피가 나옴
  • 내부 동작: 물 끓이기, 원두 갈기, 컵 내리기 등 복잡한 절차
사용자는 내부 과정을 몰라도, ‘커피가 나온다’는 결과만 보면 됨
→ 이것이 추상화의 대표적인 형태


3️⃣ 소프트웨어에서 추상화가 필요한 이유

목적 설명
💡 복잡성 감소 복잡한 내부 구현을 감추어 코드의 이해도를 높임
🔄 재사용성 인터페이스만 고정하고 내부 로직은 다양하게 구현 가능
🛠 유지보수 용이 내부 구조를 바꿔도 외부 인터페이스가 같다면 영향 없음


반응형

 


4️⃣ C++에서의 추상화 기법

🔸 4-1. 자료 추상화 (Data Abstraction)

클래스의 내부 데이터는 감추고, 함수를 통해서만 접근하도록 설계하는 방식입니다.


#include <iostream>
using namespace std;

class BankAccount {
private:
    int balance;

public:
    void deposit(int amount) {
        if (amount > 0)
            balance += amount;
    }

    int getBalance() {
        return balance;
    }
};

int main() {
    BankAccount acc;
    acc.deposit(500);
    cout << "잔액: " << acc.getBalance() << endl;
    return 0;
}


🔸 4-2. 제어 추상화 (Control Abstraction)

복잡한 흐름을 함수나 클래스 내부로 숨기고, 외부에는 단순하게 보이게 하는 방식


#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

void printSorted(vector<int>& data) {
    sort(data.begin(), data.end());
    for (int n : data)
        cout << n << " ";
    cout << endl;
}

int main() {
    vector<int> numbers = {5, 2, 9, 1};
    printSorted(numbers);
    return 0;
}


🔸 4-3. 과정 추상화 (Process Abstraction)

여러 단계의 동작을 하나의 함수로 묶어 절차를 감추는 방식


#include <iostream>
using namespace std;

void login(string username, string password) {
    cout << "사용자 확인 중..." << endl;
    if (username == "admin" && password == "1234") {
        cout << "로그인 성공!" << endl;
    } else {
        cout << "로그인 실패." << endl;
    }
}

int main() {
    login("admin", "1234");
    return 0;
}


5️⃣ 객체지향 추상화: 추상 클래스 & 인터페이스

🔹 C++의 추상 클래스

순수 가상 함수(pure virtual function)를 포함한 클래스
→ 무엇을 할지는 정의하고, 어떻게 할지는 하위 클래스에 맡김


#include <iostream>
using namespace std;

class Animal {
public:
    virtual void speak() = 0;
};

class Dog : public Animal {
public:
    void speak() override {
        cout << "멍멍!" << endl;
    }
};

int main() {
    Animal* myDog = new Dog();
    myDog->speak();
    delete myDog;
    return 0;
}


✅ 6️⃣ 요약 정리

구분 설명 C++ 예시 요소
자료 추상화 데이터는 숨기고 함수로만 접근 private 멤버 + public 함수
제어 추상화 복잡한 흐름을 함수로 감춤 정렬 함수, 알고리즘 함수
과정 추상화 여러 절차를 하나로 묶음 login() 함수
객체 추상화 기능만 정의하고 구현은 하위 클래스에 위임 추상 클래스 + 가상 함수
필요하시면 클래스 다이어그램(UML)이나 실전 프로젝트 예시에서
추상화가 어떻게 적용되는지도 추가로 설명해드릴 수 있습니다.
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함