본문 바로가기

공부/프로그래밍언어론

프로그래밍 언어에서의 추상화

이전 포스팅에서 간단하게 언급했던 추상화에 대해서 자세히 알아보자.

 

일반적인 추상화(abstraction)의 개념은

  • 주어진 작업이나 객체를 속성들의 일부분을 가지고 필요한 만큼 묘사할 수 있는
    방법을 지원하는 것
  • 필수적인 속성만으로 주어진 것을 묘사하므로 나머지 속성들은 추상화, 은닉 또는
    삭제된다.

프로그래밍 언어에서의 추상화는 자료 추상화, 제어 추상화의 두 가지 범주로 나뉜다.

  • 자료 추상화
    - 문자열, 수, 트리와 같은 계산 될 자료의 특성을 추상화
  • 제어 추상화 or 알고리즘 추상화
    - 실행 순서를 제어하는 특성을 추상화
    - 반복문, 조건문, 프로시저 호출 등의 예가 있다.

추상화에 포함된 정보의 양으로 추상화의 수준을 나눌 수 있다.

  • 기본적 추상화(basic abstraction)
    가장 국지적인(지역적인) 기계 정보를 수집한 추상화
  • 구조적 추상화(structured abstraction)
    보다 전역적인 정보인 프로그램의 구조에 대한 추상화
  • 단위 추상화(unit abstraction)
    단위 프로그램 전체 정보에 관한 추상화

위에서 언급한 것들을 자세히 살펴보자

자료 추상화

기본적 추상화(basic abstraction)

컴퓨터 내부의 자료 표현을 추상화한다.

예)

  • 기억 장치의 위치 -> 변수로 추상화
    int x;
    float y;
  • 자료의 값(2진수) -> 10진수(정수, 실수) 자료형으로 추상화
    x = 5.7;

구조적 추상화(structured abstraction)

관련된 자료값의 집합을 추상화한다.

배열과 레코드와 같은 구조형 자료가 전형적인 구조적 추상화의 예이다.

형 선언문을 가지고 자료형에 새로운 이름을 부여할 수 있다.

예)

  • type student = record ...

단위 추상화(unit abstraction)

자료의 생성과 사용에 대한 정보를 한 장소에 모아두고, 자료의 세부사항에 대한

접근을 제한하는 도구

 -> 자료형의 구조 변경이 프로그램 전체에 영향을 주지 않으며, 자료 구조의

     세부사항을 무시한다.

이런 체계를 자료 캡슐화 혹은 추상 자료형이라고도 한다.

C++, Java의 class, Modula-2의 module, Ada의 package가 그 예이다.

제어 추상화

기본적 추상화(basic abstaction)

몇 개의 기계 명령어를 모아 이해하기 쉬운 추상 구문으로 만든 것.

예)

  • 계산과 값의 저장을 추상화한 배정문
    x := x + y
  • 분기문 (Fortran의 GOTO문이나 if문 등)
    IF (A.GT.B) GOTO 10

구조적 추상화(structured abstraction)

프로그램에서 어떤 검사된 값에 따라 분할된 명령어의 한 그룹을 수행하도록 하는 것.

검사 값에 따라 분할된 명령어 그룹을 수행한다.

예)

  • 택일문
    if 문과 같은 택일문, Pascal의 case문, C언어의 switch문 등
    // Ada의 if 문
    if x > y then
       t := x;
       x := y;
       y := t;
    else
       x := x + y;
       y := y + 1;
    endif;
    // Java의 if 문
    if (x > y) {
       t := x;
       x := y;
       y := t;
    }
    else {
       x := x + y;
       y := y + 1;
    }
  • 구조화 반복문
    for, repeat, while, loop-exit
    // Java의 예
    i = 0;
    do
       i = i + 1;
    while (sentence[i] = '$');
    // Ada의 예
    i := 0;
    loop
       i := i + 1;
       exit when sentence(i) /= '$';
    endloop;
  • 강력한 구조 제어: 부프로그램의 사용(프로시저 혹은 서브루틴이라고도 불림)
    procedure def, procedure invocation (새 활성화 환경)

단위 추상화(unit abstraction)

라이브러리처럼 프로시저의 집합을 추상화 (관련된 프로시저 그룹 추상화).

자료 관리 프로그램에서의 평균, 표준 편차 등 통계에 관련된 프로그램들을 모아서
하나의 단위 프로그램화가 그 예이다.

Ada의 package, Modula-2의 module, C++와 Java의 class 등이 라이브러리 형태로
지원한다.

위의 범주에 들지 않는 제어 추상화로써 병행 프로그래밍이 있다.
많은 프로그래밍 언어가 병렬로 실행되는 프로그램들간에 동기화와 통신을 지원한다.

Ada의 task, Modula-2의 coroutine, Java의 multithread가 이를 지원한다.

 

추상화는 readability(프로그램을 사람이 읽고 작성하기 쉬운 정도)의 증가 목적이다.

'공부 > 프로그래밍언어론' 카테고리의 다른 글

1950년대: 최초의 프로그래밍 언어  (0) 2020.04.25
디지털 컴퓨터 이전의 언어  (0) 2020.04.25
언어 정의  (0) 2020.04.24
계산 전형 (computational paradigm)  (0) 2020.03.29
프로그래밍 언어란?  (0) 2020.03.22