Skip to content

Programming Paradigm

Paradigm 이란

간단히 애기해서 programming paradigm이란 programming을 인식하고 이해하고 수행하는 방식(인식의 틀) 이라고 할 수 있다.

(사람에 따라 다르지만) 크게 나누면, imperative programming(명령형 프로그래밍)과 declarative programming(선언형 프로그래밍)으로 나누어지는데 이 문서에서는 imperative programming(명령형 프로그래밍)에서 가장 많이 접할 수 있는 패러다임들을 정리한다.

프로그래밍 패러다임은 정말 수도 없이 많다. 현재의 프로그래밍 언어들은 다양한 패러다임을 지원하고 있기 때문에 칼로 자르듯이 구분하기 쉽지 않다. C,C++과 Java, Python에 익숙한 사람의 관점에서 이해하고 있는 내용이라는 전제를 가지고 읽어보길 권한다. 이 내용은 Python이나 C++, Java, C를 공부하기 앞서 가지고 있으면 좋은 사전지식 정도, 그리고 OOP를 이해하기 위한 포석 정도로 여겨두면 좋을 거 같다.

Non Structured Programming

  • Procedural Programming (순차적인 프로그래밍) 를 가르킴.
  • 초기 paradigm : 사실 paradigm이라기 보다 다른 paradigm이 나오면서 항상 이렇게 프로그래밍하면 안된다 라고 애기하는 대상으로 더 많이 기억됨.
  • goto문 등으로 인한 프로그램의 해석이 쉽지 않고 재사용성 등이 매우 떨어짐.
    • 변호를 한다면... 초기에는 재사용을 고려할 필요가 없던 시절에 사용된 방식임.

Structured Programming

수학적 함수가 아닌 프로그래밍에서의 함수에 초점을 두어 개발.

  • goto문을 제거한 방식.
  • Module 로 분리 하여 재사용성 을 강화 시킴.
  • C, Pascal 등에서 Function(or Procedure)이 가장 대표적인 module 임(Python의 module과 헷갈리지 말 것).
  • Procedural Orientation (절차 기반) 이라고도 불린다.
    • 기본적으로는 순차적인 알고리즘 중심임.
    • Data를 처리하는 프로시저 에 초점을 맞춤.
    • 때문에 재사용하기 위해서는 Data(변수 로 추상화)와 프로시저(함수 로 추상화)를 모두 잘 이해 하고 있어야 함.

Structured Programming은 Imperative Programming의 subset 이라고도 볼 수 있다.
Imperative Programming에서

  • 소스코드의 유지 보수 및 명확성 등을 위해
  • modular design과
  • control structure( loop and conditional block) 등의 사용을 강조한 것임.

Object Oriented Programming

  • Java, C++이 대표적인 OOP language.
  • Object 위주(oriented)로 프로그래밍이 됨.
    • Object : 작용의 대상이 되는 쪽
    • Oriented : 어떤 대상으로 뜻이 쏠리어 향함, 어떤 대상 위주. 어떤 대상 선호
  • Structured programming 이 function을 중심으로 작업 하는 것과 달리 object를 중심 으로 작업.
  • Message Orientation (or Message-Driven, 메시지 기반) ← message passing을 사용.
    • 순서가 없이 message를 기반 으로 동작함.
    • Object(객체) 간의 message 전달을 통해 상호 작용.
    • Graphic User Interface를 제공하는 SW에서 어느 버튼이 먼저 눌러질지를 알기 어려움. 버튼이 눌러지는 event가 발생하고, 이 event에 해당하는 메시지가 관련 object에게 전달되어 동작이 시작되는 걸 생각해보라 (Event-driven이라고도 불린다).

현재 OOP Language라고 불리는 경우, 최소한 다음 세가지 특성을 지원한다.

  • Encapsulation
  • Inheritance
  • Polymorphism

OOP는 imperative programming의 엄격한 subset이라고 보기는 어렵다.

OOP는 Class의 instance를 Object로 지칭하면서 Object 위주로 programming을 하는 것이며,

  • 이를 위해 기존의 imperative programming에서 없었던
  • class,object, encapsulation, inheritance, polymorphism등의 개념이 도입되었음.

다음은 OOP와 Structured Programming을 1:1로 비교하여 그 특징들을 파악해 보겠다.