Programming

[Programming] - 절차지향 & 객체지향 & 함수형 프로그래밍이란?

nam_ji 2024. 3. 20. 16:31

절차지향 & 객체지향 & 함수형 프로그래밍이란?

프로그래밍 패러다임이란

  • 프로그래머에게 프로그래밍 관점을 가지게 하는 코드를 어떻게 작성할지 결정하는 역할입니다.
  • 새로운 프로그래밍 패러다임을 통해서 새로운 방식으로 생각하는 방법을 배우게 되고, 이를 바탕으로 코드를 구현합니다.
  • 현재까지 프로그래밍 패러다임은
    • 절차지향 -> 객체지향 -> 함수형
    • 명령형 프로그래밍 : 무엇을 할 건지를 나타내기보다 어떻게를 할 건지 설명하는 방식입니다.
      • 질차지향 프로그래밍 : 수행되어야 할 기능을 순차적인 처리 과정으로 진행하는 방식입니다.
      • 객체지향 프로그래밍 : 객체들의 집합으로 프로그램의 상호작용으로 진행하는 방식입니다.
    • 선언형 프로그래밍 : 어떻게를 할 건지를 나타내기보다 무엇을 할 건지 설명하는 방식입니다.
      • 함수형 프로그래밍 : 순수 함수를 조합하여 소프트웨어를 만드는 방식입니다.

절차지향 프로그래밍(Procedural Programming)이란

  • 일이 진행되는 순서대로 프로그래밍하는 방법입니다.
    • 장점
      1. 코드의 가독성이 좋습니다.
      2. 코드를 단위화 할 수 있습니다.
      3. 컴퓨터의 처리구조와 비슷해 실행 속도가 빠릅니다.
    • 단점
      1. 각각의 코드가 순서에 민감하게 연결되어 있어, 유지보수 및 분석이 어렵습니다.
      2. 변수나 상수 등의 값들을 관리하는 자료형과 해당 자료형을 사용하는 함수가 분리되어 사용됩니다.

객체지향 프로그래밍(Object Oriented Programming)이란

  • 모든 데이터를 객체로 취급하고, 객체가 처리 요청을 받았을 때, 객체 내부에 있는 기능 사용해 처리하는 방법입니다.
  • 서로 연관되어 있는 함수와 변수들을 객체라는 것으로 그룹핑합니다.
  • 그 객체에 들어 있는 함수들을 호출해서 다른 함수들과 분리 / 구분해줍니다.
    • 4가지 특징
      1. 추상화 : 공통적인 속성이나 기능을 묶어서 이름을 붙이는 것입니다.
      2. 캡슐화 : 데이터를 은닉하고 데이터 기능을 노출시키지 않습니다.
      3. 상속성 : 상위 부모 객체의 속성과 특징을 하위 객체가 물려 받는 것입니다.
      4. 다형성 : 같은 함수가 있어도 매개변수에 따라 각자 다른 일을 하는 것입니다.
    • 장점
      1. 코드의 재사용이 가능합니다. (확장, 유지보수에 용이합니다.)
      2. 분석과 설계의 전환이 쉽습니다.
    • 단점
      1. 처리 속도가 상대적으로 다소 느립니다.
      2. 설계에 많은 시간이 소요됩니다.

함수형 프로그래밍(Functional Programming)이란

  • 순수 함수를 사용해서 상태를 제어하기 보다는, 빨리 처리하는데 초점을 둔 방법입니다.
  • 실행 순소를 지정할 필요가 없기 때문에 비절차형 언어라고도 합니다.
    • 순수함수란
      • 동일한 입력값을 넣었을 때 항상 동일한 리턴값을 반환하며 외부에 영향을 받지 않는 함수입니다.
      • 함수의 실행이 프로그램에 영향을 주지 않습니다.
      • 비상태 불변성이 유지됩니다.
    • 장점
      1. 코드에서 프로그램의 실행에 영향을 미치는 영역과 순수한 영역을 최대한 분리합니다.
      2. 코드의 가독성이 높아지고, 유지보수가 좋아집니다.
      3. 테스트가 쉬워집니다.
    • 단점
      1. 외부 데이터 혹은 내부 데이터의 상태를 조작할 수 없습니다.

절차지향 프로그래밍과 객체지향 프로그래밍의 차이

  1. 절차지향 프로그래밍 위에서 객체지향 프로그래밍이 탄생했습니다.
  2. 절차지향 프로그래밍이 갖고 있는 부족함을 객체지향 프로그래밍이 보완해주는 역할입니다.
  3. 절차지향 프로그래밍은 함수가 있고, 객체지향 프로그래밍 또한 함수가 있지만 객체라는 개념이 등장합니다.

함수형 프로그래밍과 객체지향 프로그래밍의 차이

  1. 함수형 프로그래밍에서는 함수자체가 객체가 되지만, 객체지향 프로그래밍에서는 클래스가 일급객체가 됩니다.
    • 일급객체란
      • 다른 요소들과 아무런 차별이 없는 객체입니다.
      • 즉, 함수의 인자로도 넘겨질 수 있고, 변수에 대입도 가능한 객체를 일급 객체라고 합니다.
    •  일급객체의 명확한 정의
      • 모든 일급 객체는 함수의 실질적인 매개변수가 될 수 있습니다.
      • 모든 일급 객체는 함수의 반환값이 될 수 있습니다.
      • 모든 일급 객체는 할당의 대상이 될 수 있습니다.
      • 모든 일급 객체는 비교 연산을 적용할 수 있습니다.
  2. 객체지향 프로그래밍에서는 프로그램을 상호작용(Interaction)하는 객체들의 집합으로 볼 수 있지만, 함수형 프로그래밍에서는 상태 값을 지니지 않는 함수들의 연속으로 볼 수 있습니다.
    • 객체지향 프로그래밍의 경우
      • 클래스 디자인과 객체들의 관계를 중심으로 코드 작성이 이루어집니다.
      • 따라서, 상태, 멤버변수, 메서드 등이 긴밀한 관계를 가지고 있습니다.
      • 특히, 멤버변수가 어떤 상태를 가지고 있는가에 따라 결과가 달라집니다.
    • 함수형 프로그래밍의 경우
      • 값의 연산 및 결과 도출 중심으로 코드작성이 이루어집니다.
      • 함수는 인자로 받은 값을 별도로 지정하지 않고, 간결한 과정으로 처리하고 매핑하는 데에 주 목적을 둡니다.