티스토리 뷰
반응형
📘 추상화(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)이나 실전 프로젝트 예시에서
추상화가 어떻게 적용되는지도 추가로 설명해드릴 수 있습니다.
반응형
'자격증 > 정보처리기사' 카테고리의 다른 글
마스터-슬레이브 프로세스란? 쉽게 이해하는 분산 시스템 구조 (0) | 2025.05.04 |
---|---|
요구 분석(Requirement Analysis)이란? (0) | 2025.05.04 |
DoS(Denial of Service) 공격이란? (0) | 2025.05.03 |
V 모델(V-Model)이란? 소프트웨어 개발 방법 (0) | 2025.05.03 |
취약점 관리 절차란? (0) | 2025.05.03 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 윤성우
- 열혈프로그래밍
- C/C++
- C
- 강화학습
- 통계
- 류근관
- 코딩테스트
- 인지부조화
- 뇌와행동의기초
- 백준
- 데이터분석
- 회계
- 심리학
- 조건형성
- 파이썬
- 일본어문법무작정따라하기
- 통계학
- 일본어
- Python
- stl
- 오블완
- K-MOOC
- 사회심리학
- 여인권
- 정보처리기사
- 티스토리챌린지
- 일문따
- 보세사
- c++
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함