OOP
Object Oriented Programming의 약자로 class와 object에 기반한 프로그래밍 페러다임(디자인 패턴) 입니다.
OOP는 관련된 데이터끼리 묶어 class를 형성하고 그 안에서 object instance를 만듬으로써 프로그램을
디자인 해줍니다.
OOP의 장점
- OOP는 코드의 재사용률을 높이고 코드를 간결하게 함으로써 유지보수가 쉽다는 장점이 있습니다.(DRY pinciple)
- 데이터를 안전하게 보존시킬 수 있습니다.(encapsolution(캡슐화)과 abstraction(추출화) 등)
대표적인 언어
- C++, Java, Python, Javascript 등
✨ Features
Encapsulation (캡슐화)
캡슐화는 객체의 내부 로직은 감추고 외부에는 상대적으로 안정적인 부분만을 공개함으로써
데이터를 안전하게 보존하는 기법입니다. 캡슐화는 외부에 영향을 주지 않고 객체 내부의
구현을 변경할 수 있기 때문에 내부 로직에 대한 유연함을 제공합니다.
- Implementation: 숨길 부분
- Interface: 공개할 부분
- 캡슐화는 객체의 "동작 구현"에 중점을 둠
장점
- 데이터를 안전하게 보존할 수 있음
- 개발자의 협업을 수월하게 함
- 유지보수가 쉬움
- 가독성의 증가
예시
- Closure (클로저)
- 함수 구현
- Module pattern
Abstraction (추상화)
추상화는 공통점을 찾아 Class로 한번에 묶고 복잡한 디테일을 숨기고 핵심만 추출해나가는 형태입니다.
구현 세부사항 대신 큰 범위의 공통된 기능 측면에서 클래스를 개발하는 것입니다.
예를 들어, 결제 페이 기능을 구현한다고 할때, 네이버 페이, 카카오페이등은 모두 작동하는 방식을 달라도
결제를 한다는 공통된 기능을 가지고 있습니다. 이 때 "공통된 기능"으로 하나로 묶는 방법이라고 할 수 있습니다.
(공통된 클래스로부터 상속)
다실 말해 실제로 존재하는 객체들을 프로그램으로 만들기 위해 공톡적인 특성을 파악해 필요없는 특성들은
제거해나가는 작업을 말합니다.
- 추상화는 객체의 "동작, 기능" 자체에만 중점을 둠
- 캡슐화와 추상화는 상호 보완적임
장점
- 유지보수가 낮음
- 가독성의 증가
Inheritence (상속)
상속은 프로토타입을 기반으로 부모 클래스부터 하위 클래스는 상속을 받을 수 있습니다.
상위 클래스의 모든것을 하위 클래스가 모두 이어 받는것 입니다. 즉, 부모가 자식에게 유전자를 물려주듯 부모의 특징을 자식에게 모두 물려주는 행위입니다.
장점
- 코드의 재사용성이 증가
- 기존에 작성된 클래스를 재사용할 수 있다.
- 자식 클래스 설계 시 중복되는 맴버를 미리 부모 클래스에 작성해 놓으면, 자식 클래스에서 해당 맴버를 작성하지
않아도 된다. - 프로그램 수정시 추가, 수정을 하더라도 캡슐화를 통해 주변 영향이 적기떄문에 유지보수가 쉬워 매우 경제적
Polymorphism (다형성)
같은 이름을 가진 메소드라도 각 하위클래스의 상황에 맞게 다르게 구현될 수 있게 하는 것을
말한다. 즉 하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석이 될 수 있다.
Method overriding
- 상위 클래스의 메서드와 같은 이름, 매개변수를 재정의 하는것이다. 상위클래스에서
만들어진 매서드는 하위 클래스의 상황에 따라 다시 재창조해 사용하는 것을 말한다. - Runtime에 이루어짐
Method overloading
- 같은 이름의 함수를 여러개 정의하고, 파라미터의 타입과 개수를 다르게 하여 파라미터에 따라
다르게 호출할 수 있게하는 것 - 메서드끼리 이름을 같지만 매개변수의 갯수나 데이터타입이 다르면 오버로딩이 적용되 메서드 이름이
같아도 문법 에러가 나지 않음 - Compile time(컴파일 타임)에 이루어짐
단점
- 객체가 처리하려는 것에 대한 정확한 이해가 필요해 설계단계 부터는 많은 시간이 소모될 우려가 있다.
- 객체지향언어는 대체적으로 실행속도가 느린편이다.
- 다중 상속이 지원되는 C++같은 경우에 너무 복잡해져 코딩의 난이도가 상승할 수 있다.
Funtional Programming
FP(Funtional Programming)은 Side effet(부작용)이 없는 Pure function(순수 함수)를 구현함으로써 프로그램을
디자인 합니다. 여러개의 작은 function을 엮어 하나의 큰 function을 구현하고 불변성을 지키게 됩니다.
장점
- 높은 수준의 추상화를 제공
- 함수 단위의 코드 재사용성이 증가
- 디버깅이 쉽다.
- 불변성을 지향하기 때문에 프로그램의 동작을 예측하기 쉬움
대표적인 언어
- Clojure, Swift, Haskell, Scala
1급 객체 (First Object, 또는 1급 시민)
- 변수나 데이터 구조안에 담을 수 있다.
- 파라미터로 전달 할 수 있다.
- 반환값(return value)으로 사용할 수 있다.
- 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
- 동적으로 프로퍼디 할당이 가능하다.
고차 함수 (Higher Order Function)
함수형 프로그래밍에서는 여러 작은 순수 함수들을 연쇄적 혹은 병렬적으로 호출해 더 큰 함수를 만들어 갑니다.
함수를 엮기위해 HOC(고차 컴포넌트)를 잘 활용해야 합니다.
- 함수의 파라미터로 함수를 전달할 수 있다.
- 함수의 반환값으로 함수를 사용할 수 있다.
불변성(Immutablility)
데이터 변경이 필요한 경우, 원본 데이터 구조를 변경하지 않고도 그 데이터를 복사본을 만들어 그 일부만 변경하고,
변경한 복사본을 사용해 작업을 진행합니다.
순수함수(Pure function)
- 동일한 인풋에는 항상 같은 값의 아웃풋을 반환해야 함.
- 사이드 에펙트가 없어야 함
참고 자료
'프론트 엔드 > Javascript' 카테고리의 다른 글
[Javascript] Event Loop (0) | 2022.01.24 |
---|---|
[Javascript] null과 undefined의 차이 (0) | 2022.01.23 |
[Javascript] Javascript와 Node.js의 차이 (0) | 2022.01.23 |