1. 추상화(Abstraction)란?

추상화는 실제적이고 구체적인 개념들을 요약하여 보다 더 높은 개념을 유도하는 과정이다.

(Abstraction is a process by which higher concepts are derived from the usage and classification of real or concrete concepts)

추상화는 무엇을 요약하여 추상화하느냐에 따라 데이터 추상화(data abstraction)명령어(제어) 추상화(control abstraction)가 있다.

 

2. 데이터 추상화(data abstraction)

* 변수: data값을 저장하는 memory위치를 나타내는 것을 추상화

* 데이터 타입(data type): 메모리에 저장될 값들의 종류에 대한 이름을 추상화

* 배열: 같은 타입의 연속된 변수들의 모음을 추상화

* 레코드(구조체): 다른 타입의 연속된 변수들의 모음을 추상화

 

3. 제어 추상화(control abstraction)

제어: 프로그램 내의 명령어 실행 순서.

제어 추상화는 여러개의 기계어 명령들을 간단히 요약한 것이다.

아래에서 몇 개의 예시를 살펴보자

 

* 배정문

LOAD R[n], X → ADD R[n], 1 → STORE R[n], X

[추상화]  X = X + 1

 

* while문

if (! condition) GOTO L2

statements

GOTO L1

[추상화]

while (condition) {

statements

 }

 

4. 통합 추상화(unit abstraction)

데이터(자료구조)와 제어(관련 프로시저) 추상화를 통합해서 추상화한 것이 추상 데이터 타입(abstract data type)이다.

이것의 예로는 스택(Stack) 데이터 타입을 생각해볼 수 있는데,

스택 데이터 타입은 스택을 표현하기 위한 데이터(자료구조), push, pop등과 같은 연산들로 구성된다.

1. 폰 노이만 구조

최초의 컴퓨터인 ABC컴퓨터 및 ENIAC이 등장하면서 언어또한 개발되기 시작되었다. 하지만 이때의 컴퓨터들은 새로운 작업을 할 때마다, 회로와 기억장치를 바꿔 끼워야 하는 번거로움이 있었다.

이를 해결하기 위해 헝가리 출신의 미국 수학자인 존 폰 노이만( John von Neumann )이 "프로그램 내장 방식 컴퓨터(stored program computer)"를 발표했다. 폰 노이만 구조(Von Neumann Architecture)라고도 불리는 프로그램 내장 방식은, 메모리에 프로그램과 데이터를 넣고 차례로 불러내 처리하는 방식으로 오늘날에도 쓰이고 있는 개념이다.

프로그램 저장 방식이 고안되기 이전의 모든 기계들은 하나의 목적 혹은 역할을 하도록 고안되었으나, 이 방식이 고안된 후 컴퓨터는 어떤 프로그램을 저장해서 실행하느냐에 따라 그 기능이 달라지며 컴퓨터의 범용성의 원천이 되었다.

내장 방식 컴퓨터에서 CPU는 메모리에 저장된 명령어를 순차적으로 실행하는데 이 과정은 다음과 같다.

인출(fetch)→해석(decode)→실행(execute)

CPU는 이러한 주기를 반복해서 실행한다.

 

*인출(fetch): main memory로부터 명령어 인출

*해석(decode): 명령어 의미 해석

*실행(execute): 명령어 실행

 

 

2. 명령형 언어(Imperative)의 발전

Fortran, Basic,C와 같은 명령형/절차형 언어는 폰 노이만 모델 컴퓨터의 연산을 모방하거나 추상화하여 발전하였다.

따라서 이 언어들은 그 언어 내에서 폰 노이만 모델 컴퓨터의 특징을 많이 가지고 있다. 예를 들어본다면 다음과 같다.

1. 순차적 명령어 실행

2. 메모리 위치를 나타내는 변수 사용

3. 배정문을 사용한 변수 값 변경

1. 프로그래밍 패러다임

프로그래밍 언어의 종류를 알아보기에 앞서 프로그래밍 패러다임을 알아보자.

프로그램 패러다임(programming paradigm)이란, 프로그래밍을 하는 기본적인 스타일을 의미하며

이것은 프로그래머로 하여금 프로그래밍에 대한 관점을 갖게 해주는 역할을 한다.

 

프로그래밍 패러다임은 아래 4종류로 나뉜다.

* 명령형 프로그래밍(imperative programming)

명령형 프로그래밍은 문제를 해결하는 절차를 기술하는 방식의 프로그램의 스타일.

프로그램은 수행할 명령어들로 구성

명령어들은 주로 프로그램의 상태를 변경함

* 함수형 프로그래밍(functional programming)

프로그램의 계산 과정을 수학 함수의 수행으로 간주하는 프로그래밍 스타일.

프로그램은 함수의 정의들로 구성됨. 함수 수행은 부수 효과를 허용하지 않는다.

(함수의 부수효과란 상태변경, 데이터 수정을 의미한다)

 

* 논리 프로그래밍(logic programming)

정형 논리를 기반으로 한 프로그래밍 스타일.

프로그램은 문제에 대한 사실 혹은 규칙을 표현하는 논리 문장들의 집합.

 

* 객체 지향 프로그래밍(object-oriented programming)

객체개념을 기반으로 하는 프로그래밍 스타일.

객체는 data와 그에대한 연산(프로시저,메소드)들을 포괄하는 개념.

프로그램의 실행은 객체사이의 상작용에 의해 이뤄짐.

 

 

2. 프로그래밍 언어의 종류

*범용 언어

- C언어: 벨 연구소에서 유닉스 시스템 프로그래밍용 언어로 개발됨. 대표적인 명령어 프로그래밍 언어이다.

- C++ : C언어에 객체기능을 추가하여 개발된 언어

- Java: Sun Microsystem사에 의해 개발된 범용 객체-지향 언어. 현재 가장 많이 사용되고 있다. 특히 웹 응용 프로그램 작성에 많이 쓰이고 있으며 한번 작성하고 어디서나 실행될 수 있게 설계되었다. 구문은 C와 C++언어에 영향을 받았다.

- Objective-C: 애플사에서 개발한 범용 객체-지향 언어. C언어에 스몰토크 스타일의 메세지 전달을 추가하여 개발한 언어. 주로 애플사의 OS X와 iOS상에서 사용

- C#: Java 언어에 영향을 받아 Microsoft사에서 개발한 범용 객체-지향 언어.

- Python: 코드 가독성을 강조하여 간단 명료하게 표현하도록 설계된 언어. 객체-지향, 명령형, 함수형 등 여러가지 프로그래밍 스타일을 지원함.

- Visual Basic: Basic 언어로부터 시작하여 발전됨. 초보자용 언어로 개발된 객체-지향 언어

 

*함수형 언어

- Lisp: LISP(LISt Processor)는 이름이 의미하는대로 MIT에서 리스트 처리언어로 개발됨. 수학함수를 기반으로 하는 함수형 언어

- Scheme: LISP를 개선하여 개발된 함수형 언어

- ML: 영국의 에딘버러 대학에서 개발된 완전한 타입 시스템을 갖춘 범용 함수형 언어

 

*논리 언어

- Prolog: 기호 논리(symbolic logic)를 기반으로 한 논리언어. 문제의 해결을 절차가 아닌, 해결할 문제가 무언인지 선언적으로 프로그래밍 하는 것이 가능.

 

*기타 언어

- SQL: Data Base 질의 언어

- Perl, PHP: Web Server프로그램 작성을 위한 스크립트 언어

- Shell: UNIX/LINUX에서 사용도는 쉘 스크립트 언어

 

3. 프로그래밍 언어 발전 역사

 

 

참고 사이트: http://www.comphist.org/computing_history/new_page_12.htm

 

4. 프로그래밍 언어 사용 순위

 

 

 

1. 프로그래밍 언어의 정의

프로그래밍 언어는 계산과정을 기계가 읽을 수 있고 사람이 읽을 수 있도록 기술하기 위한 일종의 표기법이다.

여기서 계산과 기계읽기의 의미는 아래와 같다

*계산(Computation): 컴퓨터가 할 수 있는 연산들.

- 데이터 조작(사칙연산, 비교 등)

- 텍스트 처리(문자 입출력)

- 데이터 저장 및 검색

*기계 읽기(Machine readability): 효율적인 번역, 실행이 가능해야 함

*사람 읽기(Human readability): 사람이 쉽게 프로그래밍 할 수 있도록 편의성을 제공해야 하며, 컴퓨터 연산들이 이해하기 쉬운 형태로 추상화, 요약되어야 한다.

 

 

2. 프로그래밍 언어의 관점

1) 기계 중심의 관점: 프로그램을 실행시키는 기계(하드웨어)를 돌리기 위한 것이 프로그래밍 언어라고 생각하는 관점

- Fortan, C언어

 

2) 사람 중심의 관점: 사람이 작성한 프로그램을 돌리기 위한 것이 기계라 생각하는 관점

- Cobol, Lisp, ML, Prolog 등

 

 

3. 프로그래밍 언어의 중요성

1) 프로그래밍 언어는 가장 중요한 프로그래밍 도구이며, 컴퓨터 과학 혹은 소프트웨어는 프로그래밍 언어를 매개로 발전해왔다.

2)언어의 구조가 사고의 범위를 지배한다.

ex)C언어를 사용하며 프로그래밍을 할 경우 절차를 중심으로 생각하고 프로그래밍을 하게 됨.

+ Recent posts