Ch.0 들어가며 - 프로그래밍 패러다임

01. 패러다임의 시대

패러다임(paradigm)

모델(model), 패턴(pattern), 전형적인 예(example)을 의미하는 그리스어인 파라데이그마(paradeigma)에서 유래했다.

과거에는 표준적인 모델을 따르거나 모방하는 상황에서만 '패러다임'이라는 표현을 썼지만 현대에 와서는 '한 시대의 사회 전체가 공유하는 이론이나 방법, 문제의식 등의 체계'를 의미한다.

과학혁명

1962년, 토마스 쿤(Thomas Samuel Kuhn)은 <과학혁명의 구조>라는 책을 내놓는다. 과학이 단순한 계단식 발전의 형태를 이루는 것이 아닌 새로운 발견이 기존의 과학적 견해를 붕괴시키는 혁명적인 과정을 거쳐 발전해왔다고 주장하며, 이를 '과학혁명'이라고 불렀다.

과학혁명이란 과거의 패러다임이 새로운 패러다임에 의해 대체됨으로써 정상과학의 방향과 성격이 변하는 것을 의미한다.

  • 예시로는 우주를 바라보는 관점이 천동성에서 지동설로 변화한 것이 있다.

이 책에서 이야기하고자 하는 패러다임 전환이란 절차형 패러다임에서 객체지향 패러다임으로의 변화를 가리킨다.

02. 프로그래밍 패러다임

1974년 튜링상을 수상한 로버트 플로이드(Robert W. Floyd)가 프로그래밍 패러다임(programming paradigm)이라는 용어를 처음 사용하였다.

튜링상을 수상한 사람은 관례적으로 "ACM 튜링상 강연(ACM Turing Award Lecture)"이라는 강의를 하게 되는데, 로버트 플로이드의 강의 제목이 <The Paradigms of Programming>이다.

프로그래밍 언어는 일반적으로 어떤 패러다임의 사용을 권장하고 다른 패러다임의 사용을 막는다.

프로그래밍 패러다임이 중요한 이유는, 개발자 공동체가 동일한 프로그래밍 스타일과 모델을 공유하도록 하여 불필요한 부분에 대한 의견 충돌을 방지하며, 프로그래밍 패러다임을 교육시킴으로써 동일한 규칙과 방법을 공유하는 개발자로 성장할 수 있도록 준비시킨다는 것이다.

  • 이 책이 쓰인 이유도 같다. 객체지향 패러다임이라는 용어를 사용할 때 어느 정도 유사한 그림을 머릿속에 그릴 수 있는 기반을 제공하고, 객체지향에 대한 다양한 오해를 제거함으로써 객체지향 프로그래밍을 하는 개발자들이 동일한 규칙과 표준에 따라 개발할 수 있도록 하는 것이다.

상이한 패러다임의 공존

지동설과 천동설이 동시에 사실이 될 수 없는 것처럼, 쿤은 상이한 두 가지 패러다임이 있을 때 두 패러다임은 공존할 수 없다고 주장했다. 하지만 프로그래밍 패러다임으로 오면 이야기가 달라진다. 오히려 서로 다른 패러다임이 하나의 언어 안에서 공존하며 서로의 장단점을 보완하는 경향을 보인다.

대표적인 예로:

  • 절차형과 객체지향 패러다임을 접목시킨 C++

  • 함수형과 객체지향 패러다임을 접목시킨 스칼라

가 있다. 이처럼 여러 패러다임을 수용한 언어를 다중패러다임 언어(Multiparadigm Language)라고 부른다.

과거의 패러다임과 새로운 패러다임의비교

또한 쿤은 과거의 패러다임과 새로운 패러다임이 개념 자체가 다르기 때문에 비교할 수 없다고 주장했다. 이는 서로 다른 패러다임을 지지하는 과학자들이 세계를 다른 방식으로 조직해서 보기 때문에 같은 대상에 대해 서로 다른 것을 보기 때문이다.

하지만 이 역시 프로그래밍 패러다임에는 적용되지 않는다. 프로그래밍 패러다임이 바뀐다고 프로그래머가 바라보는 세상이 완전히 달라지는 것은 아니기 때문이다.

  • 객체지향 패러다임이 절차형 패러다임의 단점을 보완했지만 절차형 패러다임의 기반 위에서 구축됐으므로, 둘을 비교하는 것은 가능하다.

저자는 프로그래밍 패러다임은 혁명적(revolutionary)이 아니라 발전적(evolutionary)라고 주장한다.

이러한 사실은 비록 객체지향 패러다임을 주로 사용한다고 하더라도 다른 패러다임을 배우는 것이 도움이 될 것이라는 사실을 암시한다. 즉, 객체지향 패러다임이 적합치 않은 상황에서는 다른 패러다임을 적용할 수 있는 시야를 기르고 지식을 갈고 닦아야 한다.

Last updated