백번은 들어본 것 같은데 세개의 프로그래밍에 대해 잘 모르겠어서 이참에 정리를 ... ! 🌱
객체지향 프로그래밍이 절차지향 프로그래밍의 단점을 극복하기 위해 등장했다면,
함수형 프로그래밍은 객체지향 프로그래밍의 단점을 극복하기 위해서 등장!
절차지향, 객체지향, 함수형 프로그래밍의 차이점에 대해 알아보장!
🌱 프로그램을 만들 때도 원하는 목표에 따라 적절한 방법과 기법을 활용해 프로그램을 만든다!
일이 진행되는 순서대로 프로그래밍하는 방법
장점
코드의 가독성이 좋음.
컴퓨터의 처리구조와 비슷해 실행 속도가 빠름.
단점
각각의 코드가 순서에 민감하게 연결 되어있어, 유지보수 및 분석이 어려움.
모든 데이터를 객체(Object)로 취급하고,
객체가 처리 요청을 받았을 때, 객체 내부에 있는 기능을 사용해 처리하는 방법
서로 연관되어있는 함수와 변수들을 객체라는 것으로 그룹핑.
그 객체에 들어있는 함수들을 호출해서 다른 함수들과 분리/구분해줌.
4가지 특징!
1) 추상화 : 공통적인 속성이나 기능을 묶어서 이름을 붙이는 것
2) 캡슐화 : 데이터를 은닉하고 데이터 기능을 노출시키지 않음.
3) 상속성 : 상위 부모 객체의 속성과 특징을 하위 객체가 물려 받는 것.(만약 어떠한 객체가 이미 존재하는 객체의 특성을 가지고 있다면, 기존 객체의 특성을 상속시켜 만들 수 있음.)
4) 다형성 : 같은 함수가 있어도 매개변수에 따라 각자 다른 일을 하는 것
장점
코드의 재사용이 가능.(확장, 유지보수에 용이!)
분석과 설계의 전환이 쉬움.
단점
처리 속도가 상대적으로 다소 느림.
설계에 많은 시간이 소요됨.
객체지향 프로그래밍 언어: 자바, 스몰토크
"순수 함수"를 사용해, 상태를 제어하기보단, 빨리 처리하는데 초점을 둔 방법
실행 순서를 지정할 필요가 없기 때문에 비절차형 언어라고도 함!
순수 함수란?
🍒동일한🍒 입력값을 넣었을 때 항상 🍒동일한🍒 리턴값을 반환하며 외부에 영향을 받지 않는 함수!
외부에 영향을 받지않음.
함수의 실행이 프로그램에 영향을 주지 않음.
비상태 불변성 유지.(전달된 데이터를 변경하는 것이 아니라 새로운 버전, 새로운 오브젝트를 만들어서 결과값으로 전달해야함!)
-> 여러가지 동시다발적인 멀티쓰레딩 환경에서도 안정적으로 동작할 수 있음!
예제 코드
// 순수 함수
function func(a, b) {
return a + b; // 인자로 들어온 값만 참조해, 리턴값을 생성
}
// 비순수 함수
function func(a, b) {
return a + b + c; // 외부 요인(c)에 따라 리턴값이 변경됨
}
장점
함수의 동작부가 간결해지기 때문에, 객체지향 프로그래밍에 비해 코드 이해도와 가독성이 좋아짐.
테스트가 쉬움.
단점
외부 데이터 혹은 내부 데이터의 상태를 조작할 수 없음.
함수형 프로그래밍 언어: Haskell, OCaml 등
C++, Python, JavaScript, Java와 같은 언어의 최신버전에 함수형 프로그래밍의 특징들이 더해짐.
절차형 프로그래밍 위에서 객체지향 프로그래밍이 탄생한 것.
절차형 프로그래밍이 갖고 있는 부족함을 객체지향 프로그래밍이 보완해주는 역할.
절차형 프로그래밍은 함수가 있고, 객체지향 프로그래밍 또한 함수가 있지만 '객체'라는 개념이 등장함.
1) 함수형 프로그래밍에서는 함수(Function) 자체가 일급 객체가 되지만, 객체지향 프로그래밍에서는 클래스(또는 객체, Object)가 일급 객체가 됨.
일급 객체란?
다른 요소들과 아무런 차별이 없는 객체.
즉, 함수의 인자로도 넘겨질 수 있고, 변수에 대입도 가능한 객체를 일급 객체.
일급 객체의 명확한 정의-
모든 일급 객체는 함수의 실질적인 매개변수가 될 수 있다.
모든 일급 객체는 함수의 반환값이 될 수 있다.
모든 일급 객체는 할당의 대상이 될 수 있다.
모든 일급 객체는 비교 연산(==, equal)을 적용할 수 있다.
2) 객체지향 프로그래밍에서는 프로그램을 상호작용(interaction)하는 객체들의 집합으로 볼 수 있지만, 함수형 프로그래밍에서는 상태 값을 지니지 않는 함수들의 연속으로 볼 수 있음.
객체지향 프로그래밍의 경우
클래스 디자인과 객체들의 관계를 중심으로 코드 작성이 이루어짐.
따라서, 상태, 멤버변수, 메서드 등이 긴밀한 관계를 가지고 있음.
특히, 멤버변수가 어떤 상태를 가지고 있는가에 따라 결과가 달라짐.
함수형 프로그래밍의 경우
값의 연산 및 결과 도출 중심으로 코드작성이 이루어짐.
함수는 인자로 받은 값을 별도로 저장하지 않고, 간결한 과정으로 처리하고 매핑하는데에 주 목적을 둠.
어느 하나가 우위에 있다고 말할 수 있다기보다는 필요에 따라 합쳐서 사용하기도 하고 원하는 목표에 따라 적절한 것을 잘 골라 사용해야함.
출처: 드림코딩 앨리