Programming
[Programming] - 절차지향 & 객체지향 & 함수형 프로그래밍이란?
nam_ji
2024. 3. 20. 16:31
절차지향 & 객체지향 & 함수형 프로그래밍이란?
프로그래밍 패러다임이란
- 프로그래머에게 프로그래밍 관점을 가지게 하는 코드를 어떻게 작성할지 결정하는 역할입니다.
- 새로운 프로그래밍 패러다임을 통해서 새로운 방식으로 생각하는 방법을 배우게 되고, 이를 바탕으로 코드를 구현합니다.
- 현재까지 프로그래밍 패러다임은
- 절차지향 -> 객체지향 -> 함수형
- 명령형 프로그래밍 : 무엇을 할 건지를 나타내기보다 어떻게를 할 건지 설명하는 방식입니다.
- 질차지향 프로그래밍 : 수행되어야 할 기능을 순차적인 처리 과정으로 진행하는 방식입니다.
- 객체지향 프로그래밍 : 객체들의 집합으로 프로그램의 상호작용으로 진행하는 방식입니다.
- 선언형 프로그래밍 : 어떻게를 할 건지를 나타내기보다 무엇을 할 건지 설명하는 방식입니다.
- 함수형 프로그래밍 : 순수 함수를 조합하여 소프트웨어를 만드는 방식입니다.
절차지향 프로그래밍(Procedural Programming)이란
- 일이 진행되는 순서대로 프로그래밍하는 방법입니다.
- 장점
- 코드의 가독성이 좋습니다.
- 코드를 단위화 할 수 있습니다.
- 컴퓨터의 처리구조와 비슷해 실행 속도가 빠릅니다.
- 단점
- 각각의 코드가 순서에 민감하게 연결되어 있어, 유지보수 및 분석이 어렵습니다.
- 변수나 상수 등의 값들을 관리하는 자료형과 해당 자료형을 사용하는 함수가 분리되어 사용됩니다.
- 장점
객체지향 프로그래밍(Object Oriented Programming)이란
- 모든 데이터를 객체로 취급하고, 객체가 처리 요청을 받았을 때, 객체 내부에 있는 기능 사용해 처리하는 방법입니다.
- 서로 연관되어 있는 함수와 변수들을 객체라는 것으로 그룹핑합니다.
- 그 객체에 들어 있는 함수들을 호출해서 다른 함수들과 분리 / 구분해줍니다.
- 4가지 특징
- 추상화 : 공통적인 속성이나 기능을 묶어서 이름을 붙이는 것입니다.
- 캡슐화 : 데이터를 은닉하고 데이터 기능을 노출시키지 않습니다.
- 상속성 : 상위 부모 객체의 속성과 특징을 하위 객체가 물려 받는 것입니다.
- 다형성 : 같은 함수가 있어도 매개변수에 따라 각자 다른 일을 하는 것입니다.
- 장점
- 코드의 재사용이 가능합니다. (확장, 유지보수에 용이합니다.)
- 분석과 설계의 전환이 쉽습니다.
- 단점
- 처리 속도가 상대적으로 다소 느립니다.
- 설계에 많은 시간이 소요됩니다.
- 4가지 특징
함수형 프로그래밍(Functional Programming)이란
- 순수 함수를 사용해서 상태를 제어하기 보다는, 빨리 처리하는데 초점을 둔 방법입니다.
- 실행 순소를 지정할 필요가 없기 때문에 비절차형 언어라고도 합니다.
- 순수함수란
- 동일한 입력값을 넣었을 때 항상 동일한 리턴값을 반환하며 외부에 영향을 받지 않는 함수입니다.
- 함수의 실행이 프로그램에 영향을 주지 않습니다.
- 비상태 불변성이 유지됩니다.
- 장점
- 코드에서 프로그램의 실행에 영향을 미치는 영역과 순수한 영역을 최대한 분리합니다.
- 코드의 가독성이 높아지고, 유지보수가 좋아집니다.
- 테스트가 쉬워집니다.
- 단점
- 외부 데이터 혹은 내부 데이터의 상태를 조작할 수 없습니다.
- 순수함수란
절차지향 프로그래밍과 객체지향 프로그래밍의 차이
- 절차지향 프로그래밍 위에서 객체지향 프로그래밍이 탄생했습니다.
- 절차지향 프로그래밍이 갖고 있는 부족함을 객체지향 프로그래밍이 보완해주는 역할입니다.
- 절차지향 프로그래밍은 함수가 있고, 객체지향 프로그래밍 또한 함수가 있지만 객체라는 개념이 등장합니다.
함수형 프로그래밍과 객체지향 프로그래밍의 차이
- 함수형 프로그래밍에서는 함수자체가 객체가 되지만, 객체지향 프로그래밍에서는 클래스가 일급객체가 됩니다.
- 일급객체란
- 다른 요소들과 아무런 차별이 없는 객체입니다.
- 즉, 함수의 인자로도 넘겨질 수 있고, 변수에 대입도 가능한 객체를 일급 객체라고 합니다.
- 일급객체의 명확한 정의
- 모든 일급 객체는 함수의 실질적인 매개변수가 될 수 있습니다.
- 모든 일급 객체는 함수의 반환값이 될 수 있습니다.
- 모든 일급 객체는 할당의 대상이 될 수 있습니다.
- 모든 일급 객체는 비교 연산을 적용할 수 있습니다.
- 일급객체란
- 객체지향 프로그래밍에서는 프로그램을 상호작용(Interaction)하는 객체들의 집합으로 볼 수 있지만, 함수형 프로그래밍에서는 상태 값을 지니지 않는 함수들의 연속으로 볼 수 있습니다.
- 객체지향 프로그래밍의 경우
- 클래스 디자인과 객체들의 관계를 중심으로 코드 작성이 이루어집니다.
- 따라서, 상태, 멤버변수, 메서드 등이 긴밀한 관계를 가지고 있습니다.
- 특히, 멤버변수가 어떤 상태를 가지고 있는가에 따라 결과가 달라집니다.
- 함수형 프로그래밍의 경우
- 값의 연산 및 결과 도출 중심으로 코드작성이 이루어집니다.
- 함수는 인자로 받은 값을 별도로 지정하지 않고, 간결한 과정으로 처리하고 매핑하는 데에 주 목적을 둡니다.
- 객체지향 프로그래밍의 경우