Abstraction   추상화

(2021-04-07)

Abstract, 추상적


1. 추상화 (抽象化, Abstraction) 이란?

  ㅇ 실세계의 복잡한 상황을 간결하고 명확하게 핵심 위주로 단순화시킴
     - 즉, 복잡성에 대항하는 무기로써, 크고 복잡한 상황을 더 잘 관리하도록 해 줌

  ㅇ 추상화(단순화/간추리기/일반화/개념화)  ↔  구체화


2. 추상화 표현

  ㅇ 현상의 본질 만을 남겨두고 축약시켜, 다루기 쉽게 표현토록 함
  ㅇ 이때, 보통의 사람들이 이해할 수 있는 언어나 그림 등을 사용하여 이를 표현하게 됨
  ㅇ 결국, 추상화를 통해 `모델링`이 가능하게 됨


3. 추상화 과정  

  ㅇ 통상, 구체적인 사항은 되도록 생략하고, 핵심이 되는 요소/원리 만을 추구함
     - 즉, 불필요한 세부사항, 흔한 공통사항 등을 제거하여 복잡도를 낮추는 것
        . 결국, 세부사항을 숨기고, 더 높은 수준에서 문제를 다룰 수 있게 해 줌

  ㅇ 한편, 프로그래밍 의도를 추상화시켜 컴퓨터에 전달하는 도구는, ☞ 프로그래밍 언어 참조
     - 대상물의 동작/특성들을 추상화를 통해 모델링하여 추상적 모델을 만들고,
     - 이에의한 구체화(구현) 과정을 위해,
     - 수식/절차(알고리즘),프로그램(코딩),컴퓨터 내부언어(컴파일) 등으로 변환하게 됨


4. 추상화 방법

  ㅇ 일반화 (Generalization)
  ㅇ 집단화 (Aggregation)
  ㅇ 연관화 (Association)

  ㅇ 때론, 추상화를 이루기 위한 기초 작업으로,
     - 전문화 또는 세분화 또는 상세화 (Specialization)도 필요하기도 함


5. 추상화 계층/레벨

  ㅇ 응용에 따라 대상을 보는 관점이 다르므로, 
     - 다양한 형태 및 수많은 계층/레벨별로 추상화가 이루어질 수 있음
        . 하위의 개념들을 결합하여 상위의 고급 개념들을 만들어가는 단계/계층/레벨 등이 있게 됨

  ㅇ 통상, 말이 통하지 않는다 라고 함은,
     - 지적 추상화 레벨이 다르기 때문에 일어나는 경우가 대부분 임

  ㅇ 컴퓨터는, 하드웨어로부터 소프트웨어 구현까지, 수많은 추상화 계층을 둠
     - 즉, 항상 더 높은 추상화를 통해 하위 세부사항들을 일일이 신경쓰지 않고 간결하게 취급케 함
     * [참고용어] ☞ 컴포넌트, 추상자료형, 부프로그램, 모듈, 패키지, API6. [프로그래밍]  `프로세스` 및 `데이터`의 추상화  =>  추상 자료형

  ㅇ `프로세스/제어/연산/실행`의 추상화 (Procedural Abstraction)
     - 복잡한 실행 절차를 구분짓고 묶어 단순화시키는 것
        . 例) 부프로그램/함수 등

     - 과거 초창기 고급 프로그래밍언어부터 도입된 제어 추상화 例로는,
        . 제어 구조(반복문,조건문 등),함수 등이 있음
           .. 이들은 상황에 따라 프로그램 실행 경로/순서를 수정하는 성질을 추상화시킨 것

  ㅇ `데이터/자료`의 추상화        (Data Abstraction)
     - 여러 자료형을 하나로 묶어 단순화하는 것
        . 例) 사용자 정의 자료형으로써 구조체(Structure) 등

  ※ 위 둘을 하나로 묶음  =>  추상 자료형 (Abstract Data Type, ADT)
     - `자료` 및 `연산`을 모두 하나의 단위로 묶고, 
     - 외부로부터 내부 자료를 함부로 접근 못하게함
        . 이를두고, 캡슐화(Encapsulation) 또는 정보은닉(Information Hiding) 라고도 함
     - 항상, 인터페이스 만을 통해 접근토록 함



Copyrightⓒ   차재복 (Cha Jae Bok)