CS/Basic
[CS/Basic] 프로그래밍 패러다임
dpdms2148
2023. 6. 13. 23:20
728x90
1. 프로그래밍 패러다임이란?
- 프로그래밍(Programming) : 하나 이상의 관련된 추상 알고리즘을 특정한 프로그래밍 언어를 이용해 구체적인 컴퓨터 프로그램으로 구현하는 기술을 의미
- 패러다임(paradigm) : 어떤 한 시대 사람들의 견해나 사고를 근본적으로 규정하고 있는 테두리로서의 인식의 체계, 또는 사물에 대한 이론적인 틀이나 체계를 의미
- 프로그래밍 패러다임 : 개발자가 프로그래밍을 위해 어떠한 '관점'을 가지고 개발을 할지에 대해서 결정을 하는데 도움을 주는 것을 의미
2. 프로그래밍 패러다임의 변화
- 등장 순서는 함수형 → 객체지향 → 절차적 이다.
- 성장 순서는 절차적 → 객체지향 → 함수형 이다.
3. 프로그래밍 패러다임의 종류
- 크게는 명령형 프로그래밍(Imperative Programming)과 선언형 프로그래밍(Declarative Programming)으로 분류된다.
- 절차적 프로그래밍(PP, Procedure Programming), 객체 지향 프로그래밍(OOP, Object Oriented Programming), 함수형 프로그래밍(FP, Functional Programming) 3가지가 대표적이다.
- 명령형 프로그래밍(Imperative Programming)
- 어떤 일을 ‘어떻게(HOW) 수행할 것 인지’에 대한 관점을 두고 컴퓨터가 수행할 명령들을 순서대로 적어두는 프로그래밍 수행 기법
- 선언형 프로그래밍(Declarative Programming)
- ‘무엇(What)을 나타낼지’에 대해서 관점을 두어서 프로그래밍을 수행하는 기법
- 객체 지향 프로그래밍(OOP, Object Oriented Programming)
- 어떠한 일을 해결하기 위해 수많은 객체(Object)들을 기본 단위로 나누고 서로 간의 상호 관계 작용으로 개발하는 것을 지향하는 프로그래밍 기법
- 대표적인 언어로 Java, C++, C# 이 있다.
- 절차적 프로그래밍(PP, Procedure Programming)
- 어떠한 일을 해결하기 위해 위에서 아래로 순차적으로 진행 되어서 프로그램이 유기적으로 연결되도록 구성하는 프로그래밍 기법
- 대표적인 언어로 C, C++ 이 있다.
- 논리 프로그래밍(Logic Programming)
- 어떤 일에 대해서 해결 방법을 찾기 위한 단계들에 주목하기 보다는 해결의 속성들에 주목하는 프로그래밍 기법
- 함수형 프로그래밍(FP: Functional Programming)
- 상태 및 데이터 변경에는 사용하지 않으며 작은 문제를 해결 하기 위한 함수 단위로 개발하는 프로그래밍 기법
4. 절차적 프로그래밍
- 단순히 순차적인 명령 수행이 아니라 프로시저를 이용한 프로그래밍 패러다임
- 프로시저 : 특정 행동 혹은 목표를 수행하기 위한 일련의 작업이자 순서
- 특징
- 특정 기능을 담당하는 프로시저를 생성
- 이를 활용해 순차적으로 일련의 작업을 진행
- 장점
- 큰 기능(목표)을 처리하기 위해, 작은 단위의 기능(프로시저, 함수)을 구조화한다.
- 프로그램의 흐름을 쉽게 이해할 수 있으므로, 코드의 가독성이 높아진다.
- 단점
- 기능(프로시저, 함수) 만드는 과정에서 시간이 다소 소요된다.
- 순차적으로 입력하는 것은 필수이므로, 의도하지 않은 오류가 발생할 가능성이 높다.
5. 객체 지향 프로그래밍
- 초기 프로그래밍 방식인 절차적 프로그래밍의 한계점을 보완하고자 등장
- 객체(Object)를 생성한 후, 그들 간의 조합을 통해 문제 해결
- 객체는 속성(State)과 행위(Behave)가 결합된 형태
- 특징
- Encapsulation(캡슐화) : 하나의 객체에 대해 그 객체가 특정한 목적을 위해 필요한 변수나 메서드를 하나로 묶는 것
- Inheritance(상속) : 기존 상위클래스(Superclass)에 근거하여 새로운 하위 클래스(Subclass)와 행위를 정의
- Polymorphism(다형성) : 서로 다른 클래스의 객체가 같은 동작 수행 명령을 받았을 때, 각자의 특성에 맞게 동작하는 것
- Abstraction(추상화) : 객체들이 공통적으로 필요로 하는 속성이나 동작을 하나로 추출해내는 과정
- 장점
- 재사용성이 높고 유지보수가 용이하다.
- 어떻게 동작하는지 몰라도 여러 기능을 사용할 수 있다.
- 객체 단위로 데이터를 모델링하여 요구사항을 보다명확하게 파악할 수 있다.
- 단점
- 객체 간 정보 교환이 메시지 교환을 통해 일어나 실행 시간이 느리다.
- 객체 설계가 어렵다.
6. 함수형 프로그래밍
- 명령형 프로그래밍을 기반으로 하 소프트웨어의 크기가 커짐에 따라, 코드를 유지보수 어려움 증
- 함수형 프로그래밍이라는 프로그래밍 패러다임에 관심
- 특징
- 과정(Process)보다 결과(Result)에 관심이 많다.
- 무엇(What)이 실행될 지를 강조한다.
- 데이터는 불변(immutable)하다.
- 문제를 함수로 분해(Decompose)한다.
- 수학적 함수의 개념에 기반한다.
- 장점
- 모듈화와 짧은 코드를 제공한다.
- 프로그램의 동작을 예측하기 쉽다.
- 개발 생산성을 높일 수 있다.
- 가독성이 높은 코드를 작성하기 쉽다.
- 단점
- 함수형 프로그래밍의 개념은 이해하기 쉽지 않다.
- 프로그래밍을 진행하며 수 많은 함수들을 파악하고 유지 관리하기 힘들어진다.
- 광범위한 환경 설정이 필요할 수 있다.
- 함수가 많아질 수록 함수를 조합하기 복잡해지며 꾸준한 리팩토링(Refactoring)이 필요할 수 있다.
참고
728x90