프로그래밍 패러다임의 개요(1) : 논문 정리

sith-call.dev·2021년 8월 3일
1

Computer Science

목록 보기
2/15
post-thumbnail

0. 서론

프로그래밍을 배우다보면 객체지향 프로그래밍, 절차지향 프로그래밍과 같은 용어를 만난다. 그러나 이것에 대한 정확한 정의는 언제나 외면 받고 있다. 그래서 배우는 입장인 나로서는 그 답답함을 해소하고자 이 글을 쓴다. 덧붙여 1번 내용을 건너뛰고 곧장 2번 내용을 봐도 무방하다. 근데 결론적으로는 답답함은 해소하지 못했다. 아마도 나의 해석 능력과 검색 능력의 부족으로 인한 듯 하다. 이 글은 내가 찾아본 논문들의 공통 부분만을 정리해놓은 것이다.

추가로 10월6일인 지금도 프로그래밍 패러다임에 대해서 공부 중이다. 공부가 완료되는 대로 프로그래밍 패러다임에 대해서 제대로 된 글을 쓸 예정이다.

1. 프로그래밍 언어의 역사

프로그래밍 언어의 역사를 보면 프로그래밍 언어들은 어떤 계기를 통해서 만들어졌는지 그 흐름을 알 수 있다.

프로그래밍 언어의 발전역사

1950년대

기계어가 인간에게 너무 어려워서 그것의 해결방안으로 어셈블리 언어가 탄생하되었다.(1949)

1950년대 후반

Fortran I, Algor 58 등의 언어가 탄생하였다.
이 언어들은 연산 수식, 실행문, 배열, 리스트, 서브루틴 등을 가졌다.

1960년대

프로시저지향 프로그래밍(Procedural Programming) 언어들이 탄생되었다.
Fortran II, Algol 60, Cobol 61, Lisp 등이 있다.

1960년대 후반

구조적 프로그래밍(Structured Programming) 기법이 처음으로 나왔다.
PL/I, Algol 68, Pascal, Simula 등이 있다.
1960년대 말 소프트웨어의 위기(Sotfware Crisis)가 대두됨에 따라 객체지향 프로그래밍이 그 대응 방안으로 제시되었다.

1970년대

정보 은닉(Information Hiding) 및 자료 추상화(Data Abstraction) 개념이 소개되었다.
Ada, CLU, CSP가 연구 및 개발되었다.

1980년대

객체지향, 분산, 함수 및 논리형 패러다임에 기반한 여러 종류의 프로그래밍 언어들이 나왔다.

1996년

관전 지향 프로그래밍(AOP)가 소개되었다.
이러한 언어로 AspecJ가 개발되었다.
관점지향 프로그래밍은 객체지향 프로그래밍으로도 기존의 문제가 해결되지 않았기에 그에 대한 해결방안으로 제시된 것이다.

큰 흐름

프로그래밍 언어의 발전 역사를 보면 어떤 문제점을 해결하기 위한 방안으로 새로운 프로그래밍 언어가 제시된다. 이와 같은 방식으로 프로그래밍 언어들이 발전하였는데 이 기간 동안 주목할만한 세 가지 사건이 존재한다.

기계어의 불편함

첫 번째 사건으로는 기계어의 불편함이 있다. 이를 계기로 어셈블리 언어가 탄생하였는데 1 세대 프로그래밍 언어의 탄생이라고 볼 수 있다.

소프트웨어 위기(Software Crisis)

1968년 처음으로 언급되었다. 주요 요지는 기존의 구조적 프로그래밍 기법만으로는 소프트웨어의 유지 보수와 기존 소프트웨어의 재사용이 어렵다는 것이다. 이러한 문제 제기로 인해 객체지향 프로그래밍이 해결방안으로 제시되었다.

하드웨어에서 소프트웨어로의 전환

1970년대 후반 하드웨어가 급진적으로 발전함에 따라 소프트웨어의 중요성이 부각되었다.

2. 프로그래밍 패러다임

프로그래밍 패러다임은 후대에 와서 정립된 개념이다. 이는 위의 역사를 보면 알 수 있다. 그래서 그런지 완전한 정립은 되지 않은 듯 하다. 왜냐하면 찾아보는 자료마다 내용이 다르기 때문이다. 그래서 이 글 또한 나의 주관이 섞여있음을 미리 말한다.

패러다임이란?

패러다임은 사고방식 또는 이론적 틀이다. 동시에 문제를 정의하고 해결하는 방식이라고도 할 수 있다.

프로그래밍 패러다임이란?

프로그래밍 패러다임은 프로그래밍에 내포된 이론적 틀이다. 동시에 문제 해결을 위해 채택한 원칙들의 집합이라고도 볼 수 있다. 그렇기에 프로그래밍 패러다임을 이해하고자 할 땐 이 패러다임은 문제해결을 위해 어떤 원칙을 채택하였는지 살펴보면 된다.

명령형 프로그래밍 패러다임

Imperitive Programming Paradigm

  1. 폰 노이만 구조를 기반으로 한다.
  2. 어떻게 문제를 해결할 것인가를 서술한다.(How to solve)

선언형 프로그래밍 패러다임

Declarative programming paradigm

  1. 문제 해결을 위해 무엇을 해야할 지 서술한다.(What to solve)

절차형 프로그래밍 패러다임

Procedural Programming Paradigm

명령형 프로그래밍 패러다임과 동일하다.

구조적 프로그래밍 패러다임

Structured Programming Paradigm

  1. 절차형 프로그래밍의 하위개념
  2. 순차, 반복, 조건의 세 가지 구조를 사용
  3. GOTO 구문을 피할 것

객체지향 프로그래밍 패러다임

Object-Oriented Programming Paradigm

  1. 폰 노이만 구조를 기반으로 한다.
  2. 객체 모델을 이용해서 프로그램을 구성한다.
  3. 프로그래밍은 데이터 중심으로 한다.

함수형 프로그래밍 패러다임

Functional Programming Paradigm

  1. 부수 효과가 없는 순수 함수로만 프로그램을 구성한다.

여기서 부수 효과란 외부에 영향을 미치거나 받는 것을 말한다.

논리형 프로그래밍 패러다임

Logical Programming Paradigm

  1. 술어논리를 기반으로 프로그래밍 한다.
  2. 술어논리는 공리와 규칙으로 구성되고 결과값은 참 또는 거짓이다.

관점지향 프로그래밍 패러다임

Aspect Oriented Programming Paradigm

  1. 프로그램을 관심사를 기준으로 구분하여 구성

객체지향 프로그래밍 패러다임과 절차형 프로그래밍 패러다임의 구조를 기반으로 내용을 확장한 프로그래밍 패러다임이다.

다중 프로그래밍 패러다임 언어

Multiparadigm Programming Language

하나 이상의 프로그래밍 패러다임을 지원하는 언어.
대부분의 언어들은 다중 프로그래밍 패러다임 언어이다.

3. 결론

끝내 내 답답함은 시원하게 해결되진 못했다. 아마도 나는 프로그래밍 패러다임이 각각의 언어마다 프로토타입으로서 존재할 것이란 착각을 했기 때문인 것 같다. 추후에 이 주제에 대해선 더 보충해야겠다.

참고문헌

  1. https://www.learncomputerscienceonline.com/programming-paradigm/
  2. https://www.geeksforgeeks.org/introduction-of-programming-paradigms/
  3. https://ko.wikipedia.org/wiki/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%EC%9C%84%EA%B8%B0
  4. 이준경 외 5명, "객체지향 프로그래밍 개념 및 패러다임”, 전자통신동향분석 1993.
  5. 금영욱 (2006). 새로운 프로그래밍 패러다임 - 관점지향 프로그래밍. 프로그래밍언어논문지, 20(1), 23-32
  6. 최용화(2008), 플라톤의 이데아론과 객체지향 패러다임 비교연구 : 이데아론과 객체지향 프로그래밍의 구조를 중심으로.
  7. 강대기 (2012). 기초적인 프로그래밍 교육을 위한 컴퓨터 언어의 특성 및 개발 환경의 임상적 비교 분석. 공학교육연구 제15권 제3호. 66-71.
  8. 안윤근 (2019). 함수형 패러다임의 교육을 위한 블록 기반 프로그래밍 게임 = Block-based programming game for educating functional paradigm.

피드백은 언제나 환영입니다. 틀린 점이 있다면 지적해주세요. 감사히 수정하겠습니다.

profile
lim (time → ∞) Life(time) = LOVE

0개의 댓글