프로그래밍을 배우다보면 객체지향 프로그래밍, 절차지향 프로그래밍과 같은 용어를 만난다. 그러나 이것에 대한 정확한 정의는 언제나 외면 받고 있다. 그래서 배우는 입장인 나로서는 그 답답함을 해소하고자 이 글을 쓴다. 덧붙여 1번 내용을 건너뛰고 곧장 2번 내용을 봐도 무방하다. 근데 결론적으로는 답답함은 해소하지 못했다. 아마도 나의 해석 능력과 검색 능력의 부족으로 인한 듯 하다. 이 글은 내가 찾아본 논문들의 공통 부분만을 정리해놓은 것이다.
추가로 10월6일인 지금도 프로그래밍 패러다임에 대해서 공부 중이다. 공부가 완료되는 대로 프로그래밍 패러다임에 대해서 제대로 된 글을 쓸 예정이다.
프로그래밍 언어의 역사를 보면 프로그래밍 언어들은 어떤 계기를 통해서 만들어졌는지 그 흐름을 알 수 있다.
기계어가 인간에게 너무 어려워서 그것의 해결방안으로 어셈블리 언어가 탄생하되었다.(1949)
Fortran I, Algor 58 등의 언어가 탄생하였다.
이 언어들은 연산 수식, 실행문, 배열, 리스트, 서브루틴 등을 가졌다.
프로시저지향 프로그래밍(Procedural Programming) 언어들이 탄생되었다.
Fortran II, Algol 60, Cobol 61, Lisp 등이 있다.
구조적 프로그래밍(Structured Programming) 기법이 처음으로 나왔다.
PL/I, Algol 68, Pascal, Simula 등이 있다.
1960년대 말 소프트웨어의 위기(Sotfware Crisis)가 대두됨에 따라 객체지향 프로그래밍이 그 대응 방안으로 제시되었다.
정보 은닉(Information Hiding) 및 자료 추상화(Data Abstraction) 개념이 소개되었다.
Ada, CLU, CSP가 연구 및 개발되었다.
객체지향, 분산, 함수 및 논리형 패러다임에 기반한 여러 종류의 프로그래밍 언어들이 나왔다.
관전 지향 프로그래밍(AOP)가 소개되었다.
이러한 언어로 AspecJ가 개발되었다.
관점지향 프로그래밍은 객체지향 프로그래밍으로도 기존의 문제가 해결되지 않았기에 그에 대한 해결방안으로 제시된 것이다.
프로그래밍 언어의 발전 역사를 보면 어떤 문제점을 해결하기 위한 방안으로 새로운 프로그래밍 언어가 제시된다. 이와 같은 방식으로 프로그래밍 언어들이 발전하였는데 이 기간 동안 주목할만한 세 가지 사건이 존재한다.
첫 번째 사건으로는 기계어의 불편함이 있다. 이를 계기로 어셈블리 언어가 탄생하였는데 1 세대 프로그래밍 언어의 탄생이라고 볼 수 있다.
1968년 처음으로 언급되었다. 주요 요지는 기존의 구조적 프로그래밍 기법만으로는 소프트웨어의 유지 보수와 기존 소프트웨어의 재사용이 어렵다는 것이다. 이러한 문제 제기로 인해 객체지향 프로그래밍이 해결방안으로 제시되었다.
1970년대 후반 하드웨어가 급진적으로 발전함에 따라 소프트웨어의 중요성이 부각되었다.
프로그래밍 패러다임은 후대에 와서 정립된 개념이다. 이는 위의 역사를 보면 알 수 있다. 그래서 그런지 완전한 정립은 되지 않은 듯 하다. 왜냐하면 찾아보는 자료마다 내용이 다르기 때문이다. 그래서 이 글 또한 나의 주관이 섞여있음을 미리 말한다.
패러다임은 사고방식 또는 이론적 틀이다. 동시에 문제를 정의하고 해결하는 방식이라고도 할 수 있다.
프로그래밍 패러다임은 프로그래밍에 내포된 이론적 틀이다. 동시에 문제 해결을 위해 채택한 원칙들의 집합이라고도 볼 수 있다. 그렇기에 프로그래밍 패러다임을 이해하고자 할 땐 이 패러다임은 문제해결을 위해 어떤 원칙을 채택하였는지 살펴보면 된다.
Imperitive Programming Paradigm
Declarative programming paradigm
Procedural Programming Paradigm
명령형 프로그래밍 패러다임과 동일하다.
Structured Programming Paradigm
Object-Oriented Programming Paradigm
Functional Programming Paradigm
여기서 부수 효과란 외부에 영향을 미치거나 받는 것을 말한다.
Logical Programming Paradigm
Aspect Oriented Programming Paradigm
객체지향 프로그래밍 패러다임과 절차형 프로그래밍 패러다임의 구조를 기반으로 내용을 확장한 프로그래밍 패러다임이다.
Multiparadigm Programming Language
하나 이상의 프로그래밍 패러다임을 지원하는 언어.
대부분의 언어들은 다중 프로그래밍 패러다임 언어이다.
끝내 내 답답함은 시원하게 해결되진 못했다. 아마도 나는 프로그래밍 패러다임이 각각의 언어마다 프로토타입으로서 존재할 것이란 착각을 했기 때문인 것 같다. 추후에 이 주제에 대해선 더 보충해야겠다.
피드백은 언제나 환영입니다. 틀린 점이 있다면 지적해주세요. 감사히 수정하겠습니다.