Study

THREE Paradigms

jeonniu 2022. 3. 27. 19:27

지난 50년간 컴퓨터 하드웨어의 기술은 우리 기계의 컴퓨팅 능력을 20배 이상의 능력으로 향상시켰습니다.

그 결과, 오늘 날 우리는 휴대폰 뿐만 아니라 스마트 워치와 같은 다양한 하드웨어를 통해 각종 편의를 제공받고 있습니다.

 

하지만 같은 50년 동안 소프트웨어의 기술은 거의 변함이 없었습니다.

결국, 우리는 소프트웨어 기술을 60년대에 쓰던 개념과 비슷하게 사용하고 있다는 말이 됩니다.

 

그러나 소프트웨어를 작성하는 행위에 관한 것으로는 크게 3가지가 변경되었습니다.

하드웨어, 컴퓨터의 속도, 뛰어난 툴에 대해 말하는 것이 아닌 '코드 자체'로 보았을 때의 변경 사항을 말하는 것입니다.

이 모든 변경 사항들은 모두 50년 전, 단 10년 만에 발견되었습니다.

 

우리는 이러한 변화를 '패러다임 (Paradigms)' 이라고 부를 수 있습니다.

 

 

 


“ 3 Paradigms ”

 

Ⅰ. 1968s : Structured Programming (구조화 프로그래밍)
- Edsger Dijkstra는 그의 고전 논문 <Go To Statement Considered Harmful>에서 우리가 제한 없는 Go to문을 지나치게 사용하는 점을 비판하였고, if/then/else 및 loops와 같은 구조로 대체야 한다고 제안하는 많은 논문과 기사를 썼습니다.

Ⅱ. 1966s : Object Oriented Programming. (객체 지향 프로그래밍)
- Ole-johan Dahl과 Kristen Nygaard는 알골(ALGOL)언어를 다루다 객체를 '발견'하여 최초의 객체 지향 언어로 Simula-67을 개발하였습니다. 이 진보에는 많은 광범위한 영향이 있었지만 우리의 코드에 새로운 기능을 추가하진 않았습니다. 하지만 '다형성'의 출현으로 함수에 대한 포인터의 필요성이 사라져 더이상 사용하지 않게 되었습니다.

Ⅲ. 1957s : Functional Programming. (함수형 프로그래밍)
- John McCarthy는 최초의 함수형 언어인  Lisp를 만들었습니다. Lisp는 30년대에 Alonzo 교회에서 공식화한 람다 미적분을 바탕으로 만들어졌습니다. 함수형 프로그래밍에는 많은 광범위한 의미가 있지만, 모든 함수 프로그램은 하나의 거대한 제약에 의해 지배됩니다.

 

 

 

ⅰ. Structured Programming (구조화 프로그래밍)
- 직접적인 제어 이전에 규율을 부과한다.

ⅱ. Object Oriented Programming (객체 지향 프로그래밍)
- 간접적인 제어 이전에 규율을 부과한다.

ⅲ. Functional Programming (함수형 프로그래밍)
- 할당 시 규율을 부과한다.

 

 

 

이렇듯 각각의 패러다임은 새로운 기능이 추가되지 않고, 규율이 높아지고 능력이 저하되었음을 알 수 있습니다.

 

 

이 밖에 50여년 동안 새로운 패러다임의 발견은 없었습니다.

아마도 이 밖에 새로운 것이 생기지 않을 것이란 징조겠지요.

 

 

 

우리는 이 모든 패러다임을 모두 사용해야 할까?
아니면 우리가 고르고 선택할 수 있을까?

 

 

 

 

시간이 흘러 우리는 다음과 같은 사항들을 시행하기로 결정했습니다.

 

첫 번째 Structured Programming(구조화 프로그래밍)은 Dijkstra가 논문에서 권장한 바와 같이 제한 없는 Go To 문을 삭제함으로써 효과적으로 시행되었고, Object Oriented Programming(객체 지향 프로그래밍)은 최신 언어에서 함수에 대한 포인터를 제거하고, 해당 기능을 다형성으로 대체함으로써 시행되었습니다.

 

따라서 두 가지 질문에 대한 답은 위의 두 옵션을 반드시 사용해야 한다는 것입니다.

 

소프트웨어 공학의 서로 다른 무리가 서로 다른 방법론을 지원하듯이, 각각의 프로그래밍 언어는 서로 다른 프로그래밍 패러다임을 지원합니다. 본문에 기재된 3개의 프로그래밍 패러다임은 개발자가 프로그래밍 관점을 갖고, 각 프로그램을 융통성 있게 사용할 수 있도록 하는 역할을 합니다.

 

따라서 더 나은 개발자가 되기 위해 programming paradigm을 이해하고 공부하는 것이 필요합니다. 

 

 

 

 

 

 

참고: Clean Coder Blog