- OOP, FP를 프로그래밍 패러다임이라고 한다.
- 예를 들어, 건축을 할때 짓고자 하는 건축물에 따라 또는 건축가의 선호도에 따라 건축의 방법이 달라지는 것처럼 프로그래밍도 프로그래머의 기호에 따라 만들어 나가게 된다.
- 객체지향 프로그래밍은 문제를 여러 개의 객체 단위로 나눠 작업하는 방식으로, 객체들이 서로 유기적으로 상호작용하는 프로그래밍 이론이다.
- 캡슐화(Encapsulation) : 데이터와 코드의 형태를 외부로부터 알 수 없게 하고, 데이터의 구조와 역할, 기능을 하나의 캡슐형태로 만드는 방법이다. 이 방법으로 데이터를 보호하고, 불필요한 정보를 감출수 있기 때문에 정보은닉을 할 수 있다.
- 추상화(Abstraction) : 객체의 공통적인 속성과 기능을 추출하여 정의하는 것을 말한다. 또, 객체들이 어떤 특징들이 있어야 한다고 정의하는 추상화된 개념이다.
- 상속(Inheritance) : 기존 상위클래스에 기능을 가져와 재사용할 수 있으면서도 동시에 새로운 하위 클래스에 새로운 기능도 추가할 수 있다. 즉, 부모가 자식에게 유전자를 물려주듯이 부모의 특징을 자식에게 모두 물려준다.
상속이 필요한 이유는 코드 중복을 없애기 위함이다.
- 다형성(Polymorphism) : 상속과 연관있는 개념으로 한 객체가 상속을 통해 기능을 확장하거나 변경하여 다른 여러형태(객체)로 재구성 되는 것을 말한다. 쉽게 말해, 한 부모의 밑에서 태어난 자식들이 조금씩 다르다는 것이다.
1. 오버라이딩 : 하위클래스(자식)가 상위 클래스(부모)에서 만들어진 메서드를 자신의 입맛대로 다시 재창조해서 사용하는 것을 말한다.
- 오버로드 : 하나의 클래스 안에서 같은 이름의 메서드를 사용하지만 각 메서드마다 다른 용도로 사용되며 그 결과물도 다르게 구현하는 것을 말한다.
- 함수형 프로그래밍은 요즘 들어 방대한 데이터를 빠르게 계산해서 병렬적으로 안정적 처리를 하는 것의 중요성이 부각되면서 주목을 받게 되었다.
- 수학과 밀접이 크다 => 어떠한 값을 넣게 되면, 결과값을 도출한다.
- 함수형 프로그래밍을 이용해서 프로그램을 만든다는 것은 이런 함수들을 적용하고 묶어서 프로그램을 구성해 나가는 것을 말한다.
- 순수 함수(pure function) : 동일한 인자를 넣었을때 항상 동일한 결과값을 반환하고 언제 선언되었는지, 외부에 전혀 영향을 받지 않도록 작성을 한다.
- 비상태 불변성(stateless immuutability) : 전달된 데이터를 변경하는 것이 아니라 새로운 버전의, 새로운 오브젝트를 만들어서 결과값으로 전달한다. 여러가지 동시다발적인 멀티쓰레딩 환경에서도 안정적으로 동작할 수 있다.
- 고차 함수(Higher-order-Function) : 함수를 인수로 받는 함수, 또는 함수를 반환하는 함수를 고차함수하고 한다. 다른 말고 콜백함수(callback)라고도 한다.
- Expressions Only!! (not statments like if, switch, for…) : for loop를 이용해서 배열을 하나하나씩 돌고 있다면 함수형 프로그래밍이라고 할 수 없다.
- 간단하게 OOP와 FP의 차이를 위 표와 같이 나타낼 수 있다.