1. 절차지향(Procedural Programming)
- 특징
- 절차 중심 : 프로그램은 일련의 절차 또는 함수로 구성되며, 절차가 중심이 되어 데이터를 처리
- 데이터와 처리의 분리 : 데이터와 데이터를 처리하는 절차를 분리하여 생각하고 설계
- 코드의 재사용 : 함수나 서브루틴을 사용하여 코드의 재 사용성을 높임
- 전역 데이터 : 전역 변수를 통해 데이터를 공유하고, 이로 인해 데이터의 접근과 변경이 자유롭다.
- 순차적 실행 : 프로그램은 단계별로 순차적으로 실행되며, 제어 흐름은 일련의 절차에 따라 진행
- 장점
- 코드의 가독성이 좋음
- 컴퓨터의 처리구조와 비슷해 실행 속도가 빠름
- 단점
- 각각의 코드가 순서에 민감하게 연결되어 있어서, 유지보수 및 분석이 어려움
- 언어 : C, Pascal, FORTRAN, COBOL 등이 있다.
2. 객체지향(Object Oriented Programming)
- 취모든 데이터를 객체(Object)로 취급하고, 객체가 처리 요청을 받았을 때, 객체 내부에 있는 기능을 사용해 처리하는 방법
- 특징
- 추상화 : 공통적인 속성이나 기능을 묶어서 이름을 붙이는 것
- 캡슐화 : 데이터를 은닉하고 데이터 기능을 노출시키지 않음
- 상속성 : 상위 부모 객체의 속성과 특징을 하위 객체가 물려 받는 것
- 다형성 : 같은 함수가 있어도 매개변수에 따라 각자 다른 일을 하는 것
- 장점
- 코드의 재사용이 가능(확장, 유지보수에 용이)
- 분석과 설계의 전환이 쉬움
- 단점
- 처리 속도가 상대적으로 느림
- 설꼐에 많은 시간이 소요 됨
- 언어 : Java, C++, Python, C#, Ruby, Swift 등등
3. 함수형 프로그래밍
- "순수 함수"를 사용해, 상태를 제어하기 보단, 빨리 처리하는데 초점을 둔 방법
- 실행 순서를 지정할 필요가 없기 때문에 비절차형 언어라고도 한다.
- 순수함수란? : 동일한 입력값을 넣었을 때 항상 동일한 리턴값을 반환하며 외부에 영향을 받지 않는 함수
- 함수의 실행이 프로그램에 영향을 주지 않음
- 비상태 불변성 유지 -> 여러가지 동시다발적인 멀티쓰레딩 환경에서 안정적으로 동작함
- 순수함수란? : 동일한 입력값을 넣었을 때 항상 동일한 리턴값을 반환하며 외부에 영향을 받지 않는 함수
- 장점
- 함수의 동작부가 간결해지기 때문에, 객체지향 프로그래밍에 비해 코드 이해도와 가독성이 좋아짐
- 테스트가 쉬움
- 단점
- 외부 데이터 혹은 내부 데이터의 상태를 조작할 수 없음
- 언어 : Haskell, OCaml
- C++ , Python, Java와 같은 언어의 최신버전에 함수형 프로그래밍의 특징들이 더해짐
4. 절차형과 객체지향의 차이
- 절차형 프로그래밍 위에서 객체지향 프로그래밍이 탄생
- 절차형 프로그래밍이 갖고 있는 부족함을 객체지향 프로그래밍이 보완해주는 역할
- 절차형 프로그래밍은 함수가 있고, 객체지향 프로그래밍도 함수가 있지만 객체라는 개념이 등장
5. 함수형과 객체지향의 차이
1)함수형 프로그래밍에서는 함수 자체가 일급 객체가 되지만, 객체지향에서는 클래스가 일급 객체가 됨
- 일급객체란 : 다른 요소들과 아무런 차별이 없는 객체. 즉, 함수의 인자로도 넘겨질 수 있고, 변수에 대입도 가능한 객체를 일급 객체.
- 일급객체의 명확한 정의
- 모든 일급 객체는 실질적인 매개변수가 될 수 있다.
- 모든 일급 객체는 함수의 반환값이 될 수 있다.
- 모든 일급 객체는 할당의 대상이 될 수 있다.
- 모든 일급 객체는 비교 연산(==,equal)을 적용 할 수 있다.
2)객체지향 프로그래밍에서는 프로그램을 상호작용(interaction)하는 객체들의 집합으로 불 ㅅ ㅜ있지만, 함수형 프로그래밍에서는 상태 값을 지니지 않는 함수들의 연속으로 볼 수 있다.
- 객체지향 프로그래밍
- 클래스 디자인과 객체들의 관계를 중심으로 코드 작성이 이루어짐
- 따라서, 상태, 멤버변수, 메서드 등이 긴밀한 관계를 가짐
- 특히, 멤버변수가 어떤 상태를 가지고 있는가에 따라 결과가 다름
- 함수형 프로그래밍
- 값의 연산 및 결과 도출 중심으로 코드 작성이 이루어짐
- 함수는 인자로 받은 갑슬 별도로 저장하지 않고, 간결한 과정으로 처리하고 매핑하는데에 목적을 둠
- 어느 하나가 우위에 있다고 말하기 보다는 필요에 따라 합쳐서 사용하거나 골라서 잘 사용해야함.
6. 참조