[관련 포스팅 이동]
함수형 프로그래밍(Functional Programming)
절차지향 프로그래밍(Procedural Programming)
객체지향 프로그래밍(Object-Oriented Programming)
개요
정의 및 특징
- 프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론
- 개발을 하는 방법론의 차이이지, 특정 언어가 특정 방식만 지원한다는 것은 아님
- 객체 지향이 절차 지향의 반대인 것이 아님
프로그래밍 패러다임의 종류
- 명령형 프로그래밍: ‘무엇’을 할 것인지를 나타내기보다 ‘어떻게’ 할 것인지를 설명하는 방식
- 절차지향: 수행되어야 할 순차적인 처리 과정을 포함하는 방식(C, C++)
- 객체지향: 객체들의 집합으로 프로그램의 상호작용을 표현(C++, Java, C#)
- 선언형 프로그래밍: ‘어떻게’ 보다는 ‘무엇’을 할 것인지를 설명하는 방식
- 함수형: 순수 함수를 조합하고 SW를 만드는 방식(클로저, 하스켈, 리스프)
패러다임의 변화
- 순차적 프로그래밍(goto)
- 원시타입 데이터와 for, while 만으로 순차적으로 프로그래밍
- 함수가 없기 때문에 특정 구간을 반복하려면 goto를 이용해 실행 순서 변경
- 절차적 프로그래밍(c언어)
- 함수가 등장하여, 실행순서를 바꾸는 것이 아니라 반복적인 코드를 따로 보관
- 함수 단위로 코드를 분리하고 재사용하는 형태의 프로그래밍
- 구조체 등장(c언어)
- 관련 데이터를 그룹으로 묶어 관리하는 구조체 등장
- 객체 지향 프로그래밍_v1(c++)
- 데이터만 묶는 것보다 관련 함수까지 같이 묶는게 더 편함 → class 등장
- 클래스를 상속해 재사용하며 객체 지향 프로그래밍의 개념 시작
- 객체 지향 프로그래밍_v2(java)
- 다량의 객체를 쉽고 효율적으로 만들 필요성을 느낌
- 작은 부품(객체)를 미리 만들어두어 조립/결합하는 방식으로 개발하자는 진정한 객체 지향 프로그래밍의 개념 정립
- 자바의 클래스는 c++의 클래스보다 추상화, 캡슐화, 상속, 다형성 관련 기능이 더 추가됨
언어별 패러다임
- 특정한 패러다임을 지원하는 언어(자바)
- jdk 1.8 이전: 객체 지향 프로그래밍만 지원
- jdk 1.8 이후: 람다식, 생성자 레퍼런스, 메서드 레퍼런스를 도입(함수형) 스트림같은 표준 API 추가(선언형)
- 여러 패러다임을 지원하는 언어(C++, 파이썬, 자바스크립트)
- JS는 단순하고 유연한 언어로, 함수가 일급 객체이기 때문에 객체지향보다는 함수형 방식이 선호됨
References
'Computer Science > 프로그래밍 패러다임' 카테고리의 다른 글
[프로그래밍 패러다임] 객체지향 프로그래밍(Object-Oriented Programming) (0) | 2023.01.20 |
---|---|
[프로그래밍 패러다임] 절차지향 프로그래밍(Procedural Programming) (0) | 2023.01.20 |
[프로그래밍 패러다임] 함수형 프로그래밍(Functional Programming) (0) | 2023.01.19 |