본문 바로가기

KNU Freshman/컴퓨터학개론

(3) 프로그래밍 언어의 역사

프로그래밍 언어의 개념

프로그래밍 언어: 컴퓨터가 이해하는 말로 컴퓨터에서 작동하는 소프트웨어를 만드는 도구

 

<인터프리터 언어(Interpreter Language)>

- 소스코드를 한 줄씩 읽어 즉시 번역하여 실행

-실행파일 미생성하며 실행속도 slow, 테스트와 수정 등의 유연성 high

ex) Python, BASIC, JavaScript, Ruby etc

 

<컴파일 언어(Compiler Language)>

-소스코드를 전체 번역하여 실행 파일 만들어 실행 속도가 fast

-개발이 신속하지 못한 점이 있지만, 비교적 safe

ex) C, C++, C#, Java, Go etc

 

고급 언어(Very-High Level Language)

-추상화(abstraction) 정도가 매우 높은 언어를 말한다. 

1. 사용자가 코드의 기능 외적인 부분을 덜 신경 써도 된다. (메모리 관리, 자료형에 따른 처리 등)

2. 최적화가 용이하지 않다. (성능 저하 발생 가능)

 

-매우 고급 언어: Python, Perl, Ruby 등 추상화 정도 매우 높은 언어

-고급 언어: C, Java, Visual Basic 등 자연어 속성을 지닌 언어

-저급 언어: 어셈블리어, 기계어와 같이 ISA(Instruction Set Architecture)에서 크게 벗어나지 않는 언어

 

* 상대적인 개념> 현재는 High-Level이라는 말이 VHLL을 가리키는데 자주 혼용됨

 

초기 프로그래밍 언어의 진화

Zuse's Plankalkul

- 초기 고급 프로그래밍 언어이고, 최신 자료구조에 대한 정의가 있음(실수, 배열, 레코드)

- 1945년 Knoard Ersnt Otto Zuse가 설계했지만 1972년까지 공개되지 않았음

-> 이유는 역사적인 상황(세계 2차 대전) 및 기술적인 한계로 1972년까지 공개되지 않음, 2000년대에 벨기에 대학에서 구현함

 

Hardware 수준의 프로그래밍의 필요성

기계어

- CPU가 직접 해독하고 실행할 수 있는 비트 단위로 쓰인 컴퓨터 언어

 

기계어의 문제점

- 낮은 가독성

- 코드 작성 및 수정이 어려움

- 기계 의존적

 

프로그래밍 언어의 역사

1.  포트란 (Fortran, 1957)

- IBM의 존 바커스에 의해 개발됨, 주로 과학 분야에서 계산을 위하여 사용됨(FORmula TRANslation)

- 효율적인 실행이 주요 목표였음

- 새로운 개념이 계속 추가되어 여전히 사용중인 언어(Fortran1, Fortran2.... Fortran 2008)

 

2. Algol(1958~1960)

- 포트란에 대항하여 유럽 학자들 중심으로 개발됨(ALGOrithmic Language)

- C, Java 등의 언어에 많은 영향을 주었으나 난해하여 실용적으로 사용 안됨

 

3. Lisp (1958~1960) John McCarthy at MIT/Stanford

- 첫번째 함수형 언어로 리스트 처리에 특화된 언어

- 인공지능의 발전에 많은 영향을 줌

 

4. COBOL(1959~1960) Grace Hopper

- 영어와 비슷한 문법으로 상업용 프로그램 분야에서 널리 사용되었으나, 학계에서 무시됨  (COmmon Business-Oriented Language)

* Grace Hopper -> 미국의 컴퓨터 과학자, 미군 해군 총독

    Grace Hopper Award (35세 이하의 과학자) -> Donald Knuth, Steve Wozniak, Bjarne Stroustrup, Richard Stallman

 

5. 1960년대에 개발된 언어보다 간결된 언어 개발(추상화의 도입)

- Pascal (Wirth,1971)

- C (Ritchie,1972)

- Scheme (Sussman, Steele, 1975)

 

C 언어의 역사

- 1969~1973년에 걸쳐서 개발됨(Dennis Ritchie)

- UNIX 시스템을 위해서 탄생한 언어

- 왜 C? ->  B (Ken Thompson) 언어 다음에 만들어진 언어라서

 

고급 프로그래밍 언어

1. 절차형 언어 (Procedural Language)

[특징]

- 프로그램의 기본 제어 구조에 따라 동작

- 처리해야할 명령어를 결정하고, 필요한 데이터 요청

- 할당문(assignment)에 의해 프로그램의 상태가 변경

 

[장점]

- 컴퓨터의 처리구조와 유사(단순)하여 성능이 좋음

 

[단점]

- 구조가 복잡해지고, 코드 중복이 많음

- 프로그램의 실행 순서에 따라 결과가 달라짐

 

[대표 언어]

- Fortran, Algol, Cobol, Pascal, C

 

2. 함수형 언어 (Functional Language)

[특징]

- 프로그램의 상태 변경보다 함수의 실행이 프로그램의 결과 결정

- 함수는 입력값이 같으면 항상 동일한 결과 출력

- 함수 자체를 값처럼 사용할 수 있음

ex) 할당, 반환값, 인자 등으로 사용

 

[장점]

- 함수 재활용하기 쉬우며, 프로그램의 부작용이 적음

 

[단점]

- 함수의 조합 및 적용이 어려워 코드 작성 및 이해가 어려움

 

[대표 언어]

- LISP, Scheme, Closure, Racket 

 

3. 객체지향 언어 (Object-Oriented Language)

[등장 배경]

- 절차적 문제 해결은 문제를 작은 문제로 분리하고, 프로시저(함수)를 만들어 문제를 해결

- 복잡한 문제에서는 프로시저들의 구조가 복잡하고, 중복된 작업이 많아지는 문제점을 보완한 새로운 문제 해결 모델이 객체 지향 문제해결

 

[특징]

- 프로그램이 객체와 객체 간의 관계 중심으로 정의됨

- 프로그램의 재사용이 용이함

- 객체의 정의가 어려움

 

[대표 언어]

- Python, C++, Java

 

3.1 객체지향 문제 해결 

객체(Object)

- 세상에 존재하는 유 / 무형의 모든 것

- 객체는 속성과 행동을 가짐

속성: 데이터

행동: 함수

 

클래스 (class)

- 객체를 일반화, 추상화를 거쳐 객체의 틀(template)로 만든 것

* 객체->  unique

 

<객체지향의 문제 해결 과정>

특정 객체(object) -> 추상화(abstraction) -> 추상화된 객체에 정보 입력(instantiation) -> 다른 object 생성

 

4. 논리형 언어

- 사실, 규칙, 질문으로 구성된 프로그래밍 언어

- 사실과 규칙으로 이루어진 데이터베이스가 있고, 질문을 통해 프로그램 실행

- 초창기 인공지능에 많이 사용된 언어임

 

[대표 언어]

- Prolog

 

5. 기타 언어

- 스크립트 언어: Javascript, Ruby, PHP etc

- 특수 목적 언어: R, Matlab etc

'KNU Freshman > 컴퓨터학개론' 카테고리의 다른 글

(6)-1 컴퓨터 구조와 운영체제  (0) 2024.04.15
(5) 프로그램의 번역  (0) 2024.04.11
(4) 프로그램 구조  (0) 2024.04.11
(2) 컴퓨터의 역사 & 알고리즘  (0) 2024.04.10
(1) 컴퓨팅 사고  (0) 2024.04.10