프로그래밍 패러다임
업데이트:
컴퓨터공학 스터디 W5에서 직접 발표한 내용을 정리한 글입니다.
프로그래밍 패러다임
- 프로그래밍: 컴퓨터 프로그램을 작성하는 일
- 패러다임: 어떤 한 시대 사람들의 견해나 사고를 근본적으로 규정하고 있는 테두리로서의 인식의 체계. 또는 사물에 대한 이론적인틀이나 체계
내가 내린 정의
컴퓨터 프로그램을 작성할 때의 관점
예를 들어, 객체지향 프로그래밍은 프로그램을 상호작용하는 객체들로 보는 반면, 함수형 프로그래밍은 프로그래밍을 자체 값을 가지지 않는 순수함수들의 연속으로 봅니다.
어떠한 패러다임에 알맞는 프로그래밍 언어는 OO패러다임을 갖는다
라고 말합니다. 최근 대부분의 프로그래밍 언어는 여러 개의 패러다임을 갖는데 이렇게 여러 패러다임을 갖는 언어를 멀티 패러다임 언어라고 합니다. 어떤 언어는 하나의 패러다임을 갖기도 합니다. 하지만 최근에는 여러가지 패러다임들이 관대하게 지원되는 경향이 강합니다.
프로그래밍 패러다임 종류
프로그래민 패러다임의 종류는 너무 다양하기 때문에 대표적이고 범용적인 몇가지 패러다임만 소개하려고 합니다.
명령형 프로그래밍
선언형 프로그래밍과 반대되는 개념으로, 알고리즘을 명시하지만 목표는 명시하지 않습니다.
어떻게
절차지향 프로그래밍
물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록하는 프로그래밍 패러다임입니다. 대표적인 절차지향 언어에는 C언어가 있습니다.
이 패러다임은 컴퓨터의 작업 처리 방식과 유사하기 때문에 다른 패러다임에 비해 더 빨리 처리되어 시간적으로 유리합니다. 하지만 유지보수가 어렵고, 실행순서가 정해져 있으므로 코드의 순서가 바뀌면 동일한 결과를 보장하기 어렵습니다.
객체지향 프로그래밍
실제 세계를 모델링하여 프로그램을 객체들의 모임로 표현하는 프로그래밍 패러다임입니다. 각 객체들은 서로 메시지를 주고 받을 수 있으며 데이터를 처리할 수 있습니다. 현대 프로그래밍 언어들은 대부분 객체지향 프로그래밍 패러다임을 가지고 있고, 대표적인 객체지향 언어에는 JAVA가 있습니다.
코드 재사용이 용이하고, 유지보수가 쉬워 대형 프로젝트에 적합하다는 장점이 있지만, 객체가 많아지면 용량이 커질 수 있고, 설계가 어렵다는 단점이 있습니다.
캡슐화, 추상화, 상속, 다형성이라는 특징을 가지고 있습니다.
선언형 프로그래밍
명령형 프로그래밍과 반대되는 개념으로, 목표는 명시하지만 알고리즘은 명시하지 않습니다.
무엇을
함수형 프로그래밍
사이드 이펙트를 최대한 제거하여 가능한 코드의 대부분이 입력과 출력의 관계를 기술하게끔 하는 프로그래밍 패러다임입니다. 이런 함수형 프로그래밍 패러다임에서 가장 중요한 개념은 순수 함수입니다. 대표적인 함수형 프로그래밍 언어로 스칼라가 있습니다.
순수함수란
함수 내부에서 프로그램 상태를 변경하여 사이트 이펙트를 발생시키지 않는 함수
함수가 사이드 이펙트를 가지지 않기 때문에 동시성과 관련된 문제를 원천적으로 봉쇄하고, 테스트하기 용이하지만, 상태가 없기 때문에 함수형 프로그래밍 패러다임만 사용하여 프로그램을 작성할 수는 없습니다.
함수형 프로그래밍 패러다임은 함수형 언어로 별도로 설계되지 않은 언어에서도 가능합니다. 최근, 처리해야 할 데이터나 트래픽이 기하급수적으로 증가하면서 주목 받고 있습니다.
반응형 프로그래밍
비동기 데이터 흐름에 기반을 둔 프로그래밍 패러다임입니다. 이 데이터 흐름은 관찰할 수 있거나 필터링하거나 다룰 수 있으며 새로운 흐름을 만들기 위해 다른 흐름과 병합할 수도 있습니다. 함수형 프로그래밍 패러다임의 도구들을 자유자재로 활용하여 데이터 흐름을 제어합니다.
언제 변할지 모르는 수많은 데이터를 일일히 추적하기 때문에 컴퓨터 성능을 저하시켜 고속처리에 사용하기에는 적합하지 않지만, 다수의 비동기 이벤트를 효과적으로 처리할 수 있기 때문에 사용자 경험을 개선할 수 있습니다.
출처
위키백과
나무위키
https://freshrimpsushi.tistory.com/1361
https://developer.qustory.com/post/programming-paradigm/
https://brownbears.tistory.com/407
https://medium.com/@jooyunghan/함수형-프로그래밍이란-무엇인가-fab4e960d263
https://brunch.co.kr/@yudong/33
https://academy.realm.io/kr/posts/reactive-programming-with-rxswift/
댓글남기기