현재까지의 프로그래밍 패러다임
절차지향 -> 객체지향 -> 함수형
명령형 프로그래밍 : 무엇(What)을 할 건지를 나타내기보다 어떻게(How)를 할 건지 설명하는 방식
- 절차지향 프로그래밍 : 수행되어야 할 기능을 순차적인 처리 과정으로 진행하는 방식
- 객체지향 프로그래밍 : 객체들의 집합으로 프로그램의 상호작용으로 진행하는 방식
- 선언형 프로그래밍 : 어떻게(How)를 할 건지를 나타내기보다 무엇(What)을 할 건지 설명하는 방식
-함수형 프로그래밍 : 순수 함수를 조합하여 소프트웨어를 만드는 방식
절차지향 , 객체지향 , 함수형
절차 지향 프로그래밍(Procedural Programming)
- 순차적인 처리를 중요시 여기며, 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법
- 장점
=> 코드의 가독성이 좋다.
=> 코드를 단위화 할 수 있다.
=> 컴퓨터의 처리구조와 비슷해 실행 속도가 빠르다.
- 단점
=> 각각의 코드가 순서에 따라 실행되어, 변경, 유지보수 및 분석이 어렵다.
=> 변수나 상수 등의 값들을 관리하는 자료형 과 해당 자료형을 사용하는 함수가 분리되어 사용된다.
- 절차지향 프로그래밍 언어 : C
객체지향 프로그래밍(Object Oriented Programming)
- 모든 데이터를 객체(Object)로 취급하여, 객체가 처리 요청을 받았을 때, 객체 내부에 있는 기능을 가져와 사용해 처리하는 기법
- 모든 객체가 내부의 자료형(Field)와 함수(Method)로 구성된 프로그래밍 구조를 의미.
- 장점
=> 코드의 재사용이 가능하다.(유지보수에 좋다)
=> 분석과 설계의 전환이 쉽다.
- 단점
=> 처리 속도가 상대적으로 느리다.
=> 설계에 많은 시간이 소요된다.
- 4가지 특정
=> 추상화 : 공통된 속성에만 중점을 두어 모델화
=> 캡슐화 : 데이터와 함수를 하나로 묶는 것
=> 상속성 : 상위 부모 객체의 속성과 특징을 하위 객체가 물려받는 것
=> 다형성 : 같은 함수가 있어도 매개변수에 따라 각자 다른 일을 하는 것
- 객체지향 프로그래밍 언어 : Java, Python
함수형 프로그래밍(Functional Programming)
- 순수 함수를 사용해, 상테를 제어하기보단, 빠르게 처리하는데 초점을 둔 방법.
- 실행 순서를 지정할 필요가 없어 비절차형 언어라고도 한다.
- 장점
=> 코드에서 프로그램의 실행에 영향을 미치는 영역과 순수한 영역을 최대한 분리한다.
=> 코드의 가독성이 높아지고, 유지보수가 좋아진다.
=> 테스트가 쉬워진다.
- 단점
=> 외부 데이터 혹은 내부 데이터의 상태를 조작할 수 없다.
- 함수형 프로그래밍 언어 : Haskell, OCamal 등
각 프로그래밍 비교
절차 지향 프로그래밍 vs 객체지향 프로그래밍
- 절차지향 프로그래밍이 가지고 있는 부족함을 객체지향 프로그래밍이 보완해주는 역할.
- 절차 지향, 객체지향 프로그래밍 둘 다 함수가 있지만, '객체'라는 개념이 등장함.
- 절차 지향은 데이터 중심, 객체지향은 기능 중심.
❗❗ 참고❗❗
절차 지향의 반대는 객체지향이 아니고 객체지향의 반대는 절차 지향이 아님.
객체지향 프로그래밍 vs 함수형 프로그래밍
- 객체지향 프로그래밍에서는 "클래스"가 일급 객체가 되지만, 함수형 프로그래밍에서는 "함수"가 일급 객체가 된다.
- 객체지향에서는 프로그램을 상호작용하는 객체들의 집합으로 볼 수 있지만, 함수형에서는 프로그램을 상태 값을 지니지 않는 함수들의 연속으로 볼 수 있다.
객체지향 프로그래밍의 경우
=> 클래스 디자인과 객체들의 관계를 중심으로 코드 작성이 이루어진다.
=> 상태, 멤버변수, 메서드 등이 긴밀한 관계를 가진다.
=> 멤버변수가 어떤 상태를 가지고 있는가에 따라 결과가 달라진다.
함수형 프로그래밍의 경우
=> 값의 연산 및 결과 도출 중심으로 코드작성이 이루어진다.
=> 함수는 인자로 받은 값을 별도로 저장하지 않고, 간결한 과정으로 처리하고 매핑하는데 목적을 둔다.