2025년 2월 9일 작성
Paradigm - 사고의 틀
Paradigm이란, 한 시대의 사람들의 견해나 사고를 근본적으로 규정하고 있는 인식의 체계, 또는 사물에 대한 이론적인 틀이나 체계를 의미합니다.
Paradigm : Thinking Framework
- paradigm은 특정 시대의 사람들이 가지는 인식이나 사고의 체계를 의미합니다.
- paradigm은 시대를 관통하는 지배적인 사고 방식이나 인식의 틀을 형성합니다.
- paradigm은 Thomas Kuhn이 1962년에 출간한 “The Structure of Scientific Revolutions”에서 처음 제시한 개념입니다.
Paradigm의 특징
- paradigm은 시대와 분야에 따라 다양한 형태로 존재합니다.
- 과학 분야에서는 Newton 역학이나 상대성 이론과 같은 이론 체계가 paradigm을 형성합니다.
- 철학 분야에서는 합리주의나 경험주의와 같은 사고 방식이 paradigm을 구성합니다.
- 사회 분야에서는 민주주의나 자본주의와 같은 제도와 가치관이 paradigm이 됩니다.
- paradigm은 시대의 변화에 따라 전환되는 특성을 보입니다.
- paradigm shift는 기존의 지배적인 사고 방식이 새로운 사고 방식으로 대체되는 현상입니다.
- paradigm shift는 사회나 학문 분야에 혁명적인 변화를 가져옵니다.
Paradigm의 영향력
- paradigm은 인식과 행동의 기준을 제시합니다.
- 특정 시대의 paradigm은 사람들의 사고 방식과 가치관을 형성합니다.
- paradigm은 사회 구성원들의 행동 양식과 의사 결정에 영향을 미칩니다.
- paradigm은 학문과 기술의 발전 방향을 결정합니다.
- 과학 paradigm은 연구의 방법론과 목표를 설정합니다.
- 기술 paradigm은 혁신의 방향과 속도를 좌우합니다.
Paradigm의 한계
- paradigm은 새로운 관점의 수용을 제한할 수 있습니다.
- 기존 paradigm에 맞지 않는 현상이나 이론은 무시되거나 배제될 수 있습니다.
- paradigm의 고착화는 창의적 사고와 혁신을 저해할 수 있습니다.
- paradigm의 전환 과정에서 갈등이 발생할 수 있습니다.
- 기존 paradigm의 지지자들과 새로운 paradigm의 옹호자들 사이에 대립이 생깁니다.
- paradigm shift 과정에서 사회적 혼란과 저항이 나타날 수 있습니다.
Programming Paradigm : Programming Framework
- programming paradigm은 programming의 관점과 방법론을 정의하는 개념적 틀입니다.
- programming paradigm은 개발자가 code를 작성하고 구조화하는 방식을 결정합니다.
- 각 paradigm은 고유한 문제 해결 방식과 추상화 방법을 제시합니다.
주요 Programming Paradigm
- imperative programming은 컴퓨터에게 문제 해결을 위한 명령을 순차적으로 지시합니다.
- program의 상태를 변경하는 명령문을 순서대로 실행합니다.
- C, Pascal과 같은 언어가 대표적입니다.
- object oriented programming은 data와 behavior를 객체 단위로 캡슐화합니다.
- 현실 세계의 개념을 객체로 모델링하여 program을 구성합니다.
- Java, C++, Python이 이 paradigm을 지원합니다.
- functional programming은 수학적 함수의 개념을 바탕으로 program을 구성합니다.
- 상태 변경을 최소화하고 순수 함수를 통한 계산을 강조합니다.
- Haskell, Scala, Erlang이 대표적입니다.
- declarative programming은 원하는 결과를 명시하고 실행 방법은 system에 위임합니다.
- program의 logic보다 목표를 기술하는 데 중점을 둡니다.
- SQL, Prolog가 이 방식을 사용합니다.
Programming Paradigm의 특징
- programming paradigm은 상호 배타적이지 않습니다.
- 현대 programming 언어는 여러 paradigm을 동시에 지원합니다.
- Python은 object oriented, functional, imperative programming을 모두 지원합니다.
- programming paradigm은 문제 domain에 따라 적합성이 다릅니다.
- system programming에는 imperative paradigm이 효과적입니다.
- 복잡한 business logic 구현에는 object oriented paradigm이 유용합니다.
- 병렬 처리나 data 처리에는 functional paradigm이 장점을 보입니다.
Programming Paradigm의 발전
- programming paradigm은 computing 환경의 변화에 따라 진화합니다.
- 분산 computing의 발전으로 functional programming이 주목받고 있습니다.
- cloud computing의 확산으로 declarative programming의 중요성이 증가하고 있습니다.
- 새로운 programming paradigm이 지속적으로 등장하고 있습니다.
- reactive programming은 비동기 data stream 처리를 위한 새로운 paradigm입니다.
- aspect oriented programming은 cross-cutting concerns를 분리하는 paradigm입니다.