프로그래밍 패러다임 개요

언어이론

2020. 4. 14. 13:03

프로그래밍 언어는 다양한 패러다임의 영향을 받아서 만들어졌는데, 대표적으로 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;
    }
    // 멤버 함수
}