1. 추상화 (抽象化, Abstraction) 이란?
ㅇ 실세계의 복잡한 상황을 간결하고 명확하게 핵심 위주로 단순화시킴
- 즉, 복잡성에 대항하는 무기로써,
- 크고 복잡한 상황을 더 잘 관리하도록 해 줌
ㅇ 추상화(단순화/간추리기/일반화/개념화) ↔ 구체화
2. 추상화 과정
ㅇ 통상, 구체적인 사항은 되도록 생략하고, 핵심이 되는 요소/원리 만을 추구함
- 즉, 불필요한 세부사항, 흔한 공통사항 등을 제거하여 복잡도를 낮추는 것
. 결국, 세부사항을 숨기고, 더 높은 수준에서 문제를 다룰 수 있게 해 줌
ㅇ 한편, 프로그래밍 의도를 추상화시켜 컴퓨터에 전달하는 도구는, ☞ 프로그래밍 언어 참조
- 대상물의 동작/특성들을 추상화를 통해 모델링하여 추상적 모델을 만들고,
- 이에의한 구체화(구현) 과정을 위해,
- 수식/절차(알고리즘),프로그램(코딩),컴퓨터 내부언어(컴파일) 등으로 변환하게 됨
3. 추상화 표현
ㅇ 현상의 본질 만을 남겨두고 축약시켜, 다루기 쉽게 표현토록 함
ㅇ 이때, 보통의 사람들이 이해할 수 있는 언어나 그림 등을 사용하여 이를 표현하게 됨
ㅇ 결국, 추상화를 통해 `모델링`이 가능하게 됨
4. 추상화 방법
ㅇ 일반화 (Generalization)
ㅇ 집단화 (Aggregation)
ㅇ 연관화 (Association)
ㅇ 때론, 추상화를 이루기 위한 기초 작업으로,
- 전문화 또는 세분화 또는 상세화 (Specialization)도 필요하기도 함
5. 추상화 계층/레벨
ㅇ 응용에 따라 대상을 보는 관점이 다르므로,
- 다양한 형태 및 수많은 계층/레벨별로 추상화가 이루어질 수 있음
. 하위의 개념들을 결합하여 상위의 고급 개념들을 만들어가는 단계/계층/레벨 등이 있게 됨
ㅇ 통상, 말이 통하지 않는다 라고 함은,
- 지적 추상화 레벨이 다르기 때문에 일어나는 경우가 대부분 임
ㅇ 컴퓨터는, 하드웨어로부터 소프트웨어 구현까지, 수많은 추상화 계층을 둠
- 즉, 항상 더 높은 추상화를 통해 하위 세부사항들을 일일이 신경쓰지 않고 간결하게 취급케 함
ㅇ 컴퓨터에서, 추상화의 하위 부분을 나타낼 때 쓰이는 용어들은?
- 서브시스템, 컴포넌트(구성요소), 모듈, 패키지, 부프로그램 등
6. [프로그래밍] `프로세스` 및 `데이터`의 추상화 => 추상 자료형
ㅇ `프로세스/제어/연산/실행`의 추상화 (Procedural Abstraction)
- 복잡한 실행 절차를 구분짓고 묶어 단순화시키는 것
. 例) 부프로그램/함수 등
- 과거 초창기 고급 프로그래밍언어부터 도입된 제어 추상화의 대표적인 例로는,
. 제어 구조(반복문,조건문 등), 함수(부 프로그램) 등이 있음
.. 이들은 상황에 따라 프로그램 실행 경로/순서를 수정하는 성질을 추상화시킨 것
ㅇ `데이터/자료`의 추상화 (Data Abstraction)
- 여러 자료형을 하나로 묶어 단순화하는 것
. 例) 사용자 정의 자료형으로써 구조체(Structure) 등
※ 위 둘을 하나로 묶음 => 추상 자료형 (Abstract Data Type, ADT)
- `자료` 및 `연산`을 모두 하나의 단위로 묶고,
- 외부로부터 내부 자료를 함부로 접근 못하게함
. 이를두고, 캡슐화(Encapsulation) 또는 정보은닉(Information Hiding) 라고도 함
- 항상, 인터페이스 만을 통해 접근토록 함
※ `추상 자료형`을, 구체적으로 구현한 것을 `자료 구조` 라고 하며,
- 데이터,연산을 추상화시킨 `자료 구조`를 기초로하여,
- 할 일을 추상화 한 것을 `알고리즘` 이라고 함