logo

프로그래밍 패러다임 📂프로그래밍

프로그래밍 패러다임

정의

프로그래밍 패러다임programming Paradigm이란 주어진 문제를 해결하는 프로그램을 작성할 때의 관점 내지 방법론을 말한다. 어떠한 패러다임에 알맞는 프로그래밍 언어는 그러한 프로그래밍 패러다임을 갖는다고 말하며, 대개의 언어는 하나의 패러다임을 갖는다. 여러 패러다임을 갖는 언어를 멀티 패러다임 언어라고 한다.

언어가 하나의 패러다임을 갖는다는 것은 다른 패러다임의 개념이 전혀 포함되어있지 않다는 것이 아니라, 해당 언어의 잠재된 성능을 모두 끌어낼 수 있는 방식이 그 패러다임이라는 것이다. 거의 모든 언어가 시대가 변함에 따라 좋은 기능을 받아들이며 변한다. 그러나 언어가 발표될 당시의 설계 이념까지 바뀌는 경우는 거의 없다고 보아도 무방하며, 보통은 당초 설계된대로 코드를 쓰는게 가장 좋다.

절차 지향 프로그래밍

절차 지향 프로그래밍procedural Oriented Programing은 쉽게 말해 순서대로 명령을 받아 문제를 해결하는 방식이다. 가장 직관적인만큼 가장 오래된 방식으로, 수치계산에 특화된 포트란(1954), 수식어가 필요 없는 C(1972)처럼 연식이 제법 있는 언어들을 예시로 들 수 있다. 21세기에 들어서 이 언어들은 주로 속도가 최우선시 되는 상황에 사용된다. 절차 지향 언어에선 프로시저로써 함수function외에도 서브루틴subroutine이 문법적으로 구현되어 있다. 함수가 ‘어떤 값을 주면 어떤 값을 반환하는 것’이라면, 서브루틴은 ‘어떤 과정을 복사해서 붙여넣는 것’과 비슷하다. 이는 절차 지향에서나 생각할법한 프로그래밍 방식으로써, 익숙해지면 간결하고 빠르고 버그가 적은 코드를 작성하기에 좋다.

포트란

포트란의 이념은 ‘수식을 간단하게 표현한다’로, 지금에 이르러서는 거의 모든 언어가 그렇다. 포트란이 거의 모든 언어들에 뒤쳐진 게 아니라 거의 모든 언어들이 포트란의 영향을 받은 것으로 보아야한다. 산업계에서 거의 사장되었음에도 불구하고 자연과학에 가까운 학계에서는 그 입지가 여전하다. 이는 포트란에 이미 개발된 라이브러리가 굉장히 많고, 프로그래밍보다는 자신의 영역에 집중하고자하는 교수들의 보수적인 성향을 그 제자들도 이어받는 분위기, 포트란보다 더 빠른 언어가 딱히 없어서다.

C

C의 이념은 ‘프로그래머를 믿는다’로, 작성된 코드를 의심하지 않고 실행하기 때문에 생산성은 떨어지지만 굉장히 빠른 속도를 낼 수 있다. 포트란과는 비교할 수도 없을 정도로 다양한 분야에서 사용되며, 학계에서도 그 입지가 나름대로 견고하다. 2010년대에 들어서는 임베디드 시스템이나 드론, 사물 인터넷과 같이 CPU의 사양이 열악한 환경에서 강점을 보이고 있다. 여기서 최적화를 더 하려면 어셈블리어까지 내려가야한다.

객체 지향 프로그래밍

객체 지향 프로그래밍object Oriented Programming은 쉽게 말해 프로그램을 작게 나누고 그 각각의 단순한 기능을 모아 문제를 해결하는 방식이다. 프로그램의 기능이 다양해지고 많은 요구에 대응하려할수록 코드는 복잡해진다. 컴퓨터가 할 수 있는 일이 많아지면서 절차 지향 패러다임만으로는 도저히 제 시간 내에 완성할 수 없는 프로젝트들이 생기고, 많은 인원이 함께 작업을 함에 따라 비효율성도 커져만 갔다. 이에 객체 지향 프로그래밍과 같은 방법론이 고안되었다. 한 명의 천재가 통째로 완벽한 프로그램을 작성하는 것은 비현실적이지만, 여러명의 범재가 ‘단순한 기능’을 만드는데에만 집중하고 그 기능들을 사용해서 문제를 해결하는 것은 현실적이다.

파이썬

파이썬의 이념은 ‘단 하나의 가장 아름다운 해법이 존재한다’로, 비교적 엄격한 문법을 가지기 때문에 누가 코드를 쓰더라도 아름답고 읽기 좋다. 이는 즉시 생산성의 증대로 이어지며, ‘인생은 짧고 당신에겐 파이썬이 필요하다’는 명언이 나오게 되었다. 파이썬의 생산성은 가히 경이로울 정도로, 산업계에서 활발하게 쓰이는 것은 물론 2010년대에 들어서는 딥러닝이 인기를 끌면서 높은 사용률을 점하고 있다.

R

R의 이념은 ‘개념을 소프트웨어에 빠르고 충실하게 옮긴다’로, 통계분석에 특화된만큼 어떤 문제를 해결하는 메소드를 구현하는 것보다는 데이터를 받아서 핸들링하고 각종 패키지의 도움을 받아 당장 문제를 해결하는데에 아주 유리하다. 통계에 알맞기 때문에 거의 모든 분야에서 접할 가능성이 있으며, 초심자가 많아 ‘사용하기 어렵다’는 단점이 지적되지만 이는 어디까지나 언어가 아니라 통계 프로그램으로써의 평가에 지나지 않는다. R이 아닌 언어에 어느정도 짬밥이 있는 사람이 처음 접한다면 개념을 옮긴다는 이념에 맞게 복잡한 데이터 조작을 마법처럼 해낼 수 있다. 반대로, 대부분의 통계학도가 그러하듯 첫 프로그래밍을 R로 시작해버리면 R이 너무 쉽기 때문에 다른 언어를 익히는데 고생을 할 수도 있다.

함수형 프로그래밍

함수형 프로그래밍functional Programming은 쉽게 말해 프로그램을 하나의 큰 함수로 보고 그것을 작은 함수들의 합성함수로 구현해 문제를 해결하는 방식이다. 이는 어떻게 보면 객체 지향 패러다임보다 더욱 극단적으로 문제를 나눈 것인데, 그와 달리 함수형 언어의 여러 제약에 의해 더욱 간결하고 유지보수가 쉬워지도록 고안되었다. 절차 지향, 객체 지향 패러다임은 명령형 프로그래밍인 것에 반해 함수형 프로그래밍은 선언형 프로그래밍에 속한다. 선언적 프로그래밍이라는 것은 출력되는 값을 과정이 아니라 결과로 기술하는 것을 말한다. 명령형 프로그래밍에서는 출력값을 얻기위한 과정을 구성하는데에 집중하지만, 선언형 프로그래밍에선 그 결과가 제시한 조건을 만족시킨다면 그 방법은 어찌되든 좋다.

하스켈

하스켈의 이념은 ‘수학을 이용해 프로그래밍 언어를 만든다’로, 모든 함수형 프로그래밍 언어의 원형이 될 수 있게끔 일반적인 순수 함수형 언어의 특징을 가진다. 수학에서 많은 개념을 빌려왔으며, 그 근본에 걸맞게 코드도 수식적인 표기와 많이 닮아있다. 아직 업계에서 활발하게 쓰이고 있지는 않았으나, 학계의 품을 벗어나 차츰차츰 점유율을 올려가고 있다.