: 일이 진행되는 순서대로 프로그래밍하는 방법
장점
코드의 가독성이 좋음.
컴퓨터의 처리구조와 비슷해 실행 속도가 빠름.
단점
각각의 코드가 순서에 민감하게 연결 되어있어, 유지보수 및 분석이 어려움.
: 모든 데이터를 객체(Object)로 취급하고,
객체가 처리 요청을 받았을 때 서로 연관되어있는 함수와 변수들을 객체라는 것으로 그룹핑하고
그 객체에 들어있는 함수들을 호출해서 다른 함수들과 분리/구분해줌.
4가지 특징
1) 추상화 : 공통적인 속성이나 기능을 묶어서 이름을 붙이는 것
2) 캡슐화 : 데이터를 은닉하고 데이터 기능을 노출시키지 않음.
3) 상속성 : 상위 부모 객체의 속성과 특징을 하위 객체가 물려 받는 것. (만약 어떠한 객체가 이미 존재하는 객체의 특성을 가지고 있다면, 기존 객체의 특성을 상속시켜 만들 수 있음.)
4) 다형성 : 같은 함수가 있어도 매개변수에 따라 각자 다른 일을 하는 것
장점
코드의 재사용이 가능. (확장, 유지보수에 용이)
분석과 설계의 전환이 쉬움.
단점
처리 속도가 상대적으로 다소 느림.
설계에 많은 시간이 소요됨.
객체지향 프로그래밍 언어: 자바
핫스켈
순수 함수를 사용해, 상태를 제어하기보단 빨리 처리하는데 초점을 둔 방법
실행 순서를 지정할 필요가 없기 때문에 비절차형 언어라고도 함
let c = 5;
// 비순수 함수
function func(a, b) {
return a + b + c; // 외부 요인(c)에 따라 리턴값이 변경됨
}
// 순수 함수
function func(a, b) {
return a + b; // 인자로 들어온 값만 참조해, 리턴값을 생성
}
//위와 같이 func의 함수가 프로그램 실행에 영향을 미치지 않고
//입력 값에 대해서만 값의 변환이 있으므로 순수함수이다.
장점
함수의 동작부가 간결해지기 때문에, 객체지향 프로그래밍에 비해 코드 이해도와 가독성이 좋아진다.
프로그램의 변화 없이 입력 값에 대한 결과를 예상 할 수 있어 테스트가 용이하다.
단점
외부 데이터 혹은 내부 데이터의 상태를 조작할 수 없다.
순수함수를 사용하는 것은 쉬울 수 있지만 조합하는 것은 쉽지 않다.
함수형 프로그래밍 언어: 스칼라, C++, Python, JavaScript
절차형 프로그래밍과 객체지향 프로그래밍의 차이
절차형 프로그래밍이 갖고 있는 부족함을 객체지향 프로그래밍이 보완해주는 역할을 해준다.
절차형 프로그래밍은 함수가 있고, 객체지향 프로그래밍 또한 함수가 있지만 '객체'라는 개념이 등장함.
함수형 프로그래밍과 객체지향 프로그래밍의 차이
함수형 프로그래밍에서는 함수(Function) 자체가 일급 객체가 되지만,
객체지향 프로그래밍에서는 클래스(또는 객체, Object)가 일급 객체가 됨.
객체지향 프로그래밍에서는 프로그램을 상호작용하는 객체들의 집합으로 볼 수 있지만,
함수형 프로그래밍에서는 상태 값을 지니지 않는 함수들의 연속으로 볼 수 있음.
어느 하나가 우위에 있다고 말할 수 있다기보다는
필요에 따라 합쳐서 사용하기도 하고, 원하는 목표에 따라 적절한 것을 잘 골라 사용해야함.