[관련 포스팅 이동]
함수형 프로그래밍(Functional Programming)
절차지향 프로그래밍(Procedural Programming)
객체지향 프로그래밍(Object-Oriented Programming)

 

개요

정의 및 특징

  • 프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론
  • 개발을 하는 방법론의 차이이지, 특정 언어가 특정 방식만 지원한다는 것은 아님
  • 객체 지향이 절차 지향의 반대인 것이 아님

 

프로그래밍 패러다임의 종류

  • 명령형 프로그래밍: ‘무엇’을 할 것인지를 나타내기보다 ‘어떻게’ 할 것인지를 설명하는 방식
    • 절차지향: 수행되어야 할 순차적인 처리 과정을 포함하는 방식(C, C++)
    • 객체지향: 객체들의 집합으로 프로그램의 상호작용을 표현(C++, Java, C#)
  • 선언형 프로그래밍: ‘어떻게’ 보다는 ‘무엇’을 할 것인지를 설명하는 방식
    • 함수형: 순수 함수를 조합하고 SW를 만드는 방식(클로저, 하스켈, 리스프)

 

패러다임의 변화

  1. 순차적 프로그래밍(goto)
    • 원시타입 데이터와 for, while 만으로 순차적으로 프로그래밍
    • 함수가 없기 때문에 특정 구간을 반복하려면 goto를 이용해 실행 순서 변경
  2. 절차적 프로그래밍(c언어)
    • 함수가 등장하여, 실행순서를 바꾸는 것이 아니라 반복적인 코드를 따로 보관
    • 함수 단위로 코드를 분리하고 재사용하는 형태의 프로그래밍
  3. 구조체 등장(c언어)
    • 관련 데이터를 그룹으로 묶어 관리하는 구조체 등장
  4. 객체 지향 프로그래밍_v1(c++)
    • 데이터만 묶는 것보다 관련 함수까지 같이 묶는게 더 편함 → class 등장
    • 클래스를 상속해 재사용하며 객체 지향 프로그래밍의 개념 시작
  5. 객체 지향 프로그래밍_v2(java)
    • 다량의 객체를 쉽고 효율적으로 만들 필요성을 느낌
    • 작은 부품(객체)를 미리 만들어두어 조립/결합하는 방식으로 개발하자는 진정한 객체 지향 프로그래밍의 개념 정립
    • 자바의 클래스는 c++의 클래스보다 추상화, 캡슐화, 상속, 다형성 관련 기능이 더 추가됨

 

언어별 패러다임

  • 특정한 패러다임을 지원하는 언어(자바)
    • jdk 1.8 이전: 객체 지향 프로그래밍만 지원
    • jdk 1.8 이후: 람다식, 생성자 레퍼런스, 메서드 레퍼런스를 도입(함수형) 스트림같은 표준 API 추가(선언형)
  • 여러 패러다임을 지원하는 언어(C++, 파이썬, 자바스크립트)
  • JS는 단순하고 유연한 언어로, 함수가 일급 객체이기 때문에 객체지향보다는 함수형 방식이 선호됨

 


References

+ Recent posts