프로그래밍 언어는 다양한 패러다임의 영향을 받아서 만들어졌는데, 대표적으로 4가지 (명령형, 객체형, 함수형, 논리형)이 있다. 이러한 패러다임에 대해 간략하게 알아보자.
1. 명령형 패러다임
- 명령형 언어(Imperative Language)는 Von Neumann 구조를 기반으로 한다.
- Von Neumann구조는 메모리에 저장된 명령어(Code영역)을 순차적으로 실행하며
- 계산 과정에서 필요한 데이터를 메모리에 저장하는 특징이 있다.
- 명령형 언어는 순차적 실행, 메모리 위치를 의미하는 변수 사용, 변수의 값을 바꾸는 배정문(=)을 사용한다.
// 명령형 언어의 예시 : C언어
int main(){
int x, y; // 변수 선언
x = 10; // 배정문 사용
y = x +20;
return 0;
}
2. 함수형 언어
- 수학의 함수와 같은 원리로 프로그램을 구성한다.
- 명령형 언어에서 사용하는 변수나 배정문등을 사용하지 않는다. Scala같은 명령령 + 함수혼합형 언어는
- 변수나 배정문을 사용하기도 하지만, 순수함수형 언어는 이런 것들을 사용하지 않음.
- 함수들을 정의(definition)하고 여러 함수를 합성(composition)하여 구현한다.
// 함수형 언어의 예시 : LISP
(defun pow (x) (* x x))
(defun compare (x y) (> x y))
// 함수 선언
(campare ((pow 15) (+ 100 20))
// 실행부 (함수 합성)
// 15의 제곱과 (100 + 20)을 비교하여 리턴
3. 논리형 언어
- 논리 언어는 기호논리(AND, OR, NOT)의 원리에 기반함
- 개체에 대한 사실들과 개체들 사이의 관계 규칙을 사용해 결과를 낸다.
// 논리형 언어 예시 : Prolog
father(paul, tom).
mother(paul, alice).
// paul 의 아버지는 tom, 어머니는 alice
parent(Person, Parent) :-
father(Person, Parent) ; mother(Person, Parent).
// parent는 father이거나 mother이다. (; = OR)
?- parent(paul, WHO).
// paul의 부모를 질의
/*
WHO = tom ; WHO = alice.
출력 = tom OR alice
*/
4. 객체형 언어
- 우리가 너무나도 잘 알고있는 객체지향언어이다
- 객체지향 패러다임은 함수형, 논리형, 명령형 모두와 결함 될 수 있음
- 그러나 일반적으로 명령형 언어를 확장한 것이 일반적임
- abstract 데이터타입, 상속, 동적바인딩, 캡슐화, 정보은닉, 다형성 등의 개념을 제공함
// 객체형 언어 예시 : Java
class Man{
// 클래스 선언
private String name;
private int age;
private int assets;
// 멤버 변수
public Main(String name){
this.name = name;
this.age = 1;
this.assets = 0;
}
// 생성자
public getOlder(){
this.age++;
}
public rename(String newName){
this.name = newName;
}
public work(){
this.assets = this.assets + 5000;
}
// 멤버 함수
}
'언어이론' 카테고리의 다른 글
파스 트리 (2) - 모호성과 모호성 제거 (4) | 2020.05.18 |
---|---|
파스 트리 (1) - 파스 트리 그리는 방법 (0) | 2020.05.18 |
배커스-나우어 형식 (BNF) (4) | 2020.05.14 |
문맥자유언어 (Context Free Grammar) (1) | 2020.05.14 |
인터프리터 & 혼합 기법 (0) | 2020.04.14 |
컴파일 개요 (0) | 2020.04.14 |
프로그래밍 언어의 분류 (0) | 2020.01.22 |