프로그래밍 언어의 개념
프로그래밍 언어: 컴퓨터가 이해하는 말로 컴퓨터에서 작동하는 소프트웨어를 만드는 도구
<인터프리터 언어(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 |