객체 지향 프로그래밍 (Object-Oriented Programming, OOP):
-객체를 중심으로 프로그램을 구성하는 방법
-객체는 상태와 행동을 가지고 있으며, 데이터와 해당 데이터를 처리하는 함수(메소드)를 포함한다.
-코드의 재사용성과 유지 보수성이 향상!
*객체 지향 프로그래밍의 반대는 절차지향 프로그래밍이다.
-절차지향: 첫번째 일 처리 다음에 두번째 일처리, 그 다음에 세번째 처리.. (EX.C언어)
-객체지향: 데이터와 함수를 객체라는 그룹으로 묶어서 처리(재활용 가능), 객체는 상태와 행동을 가지고 있고 상태는 객체의 속성(PROPERTY)이라고 한다.
동적 타이핑 (Dynamic Typing):
-변수의 타입을 별도로 지정하지 않고, 실행(runtime) 시점에 변수의 타입이 결정됨.
-유연한 프로그래밍을 가능하게 하며, 동적인 환경에서 빠른 개발과 코드 유지 보수를 지원한다.
=> 단점이 치명적임 - - 나중에 지옥(오류찾기 힘듬/디버깅 어려움/성능 저하/실수)을 맛볼수 있다. 괜히 타입스크립트를 쓰는게 아니다.
함수 프로그래밍 (Functional Programming):
-함수를 일급 객체로 취급하고, 함수를 값으로 사용하거나 전달할 수 있다.
-순수 함수(pure function)를 중심으로 하며, 상태 변경을 최소화하고 부작용(side effect)을 피하는 함수를 작성하는 것을 지향한다.
function add(a, b) {
return a + b;
}
console.log(add(2, 3)); // 5
-데이터의 불변성을 강조함 :
numbers 배열은 변경되지 않고, map 메소드를 사용하여 새로운 배열 doubledNumbers를 생성한다.
이렇게 데이터의 불변성을 유지하면서 원하는 변환 작업을 수행할 수 있다.
const numbers = [1, 2, 3, 4, 5];
const doubledNumbers = numbers.map(num => num * 2);
console.log(doubledNumbers); // [2, 4, 6, 8, 10]
-재귀 함수
function factorial(n) {
if (n === 0) {
return 1;
}
return n * factorial(n - 1);
}
console.log(factorial(5)); // 120
-비동기 처리에 용이한 콜백 함수(callback function)와 클로저(closure) 등을 활용할 수 있다.
이벤트 기반 프로그래밍 (Event-Driven Programming):
-자바스크립트는 이벤트 기반 아키텍처를 가지고 있어 비동기 처리를 위해 콜백 함수를 사용
-이벤트가 발생하면 미리 등록된 콜백 함수가 실행되어 처리된다. 이를 통해 비동기적인 동작을 지원하고 브라우저나 서버의 이벤트에 반응할 수 있다.
프로토타입 기반 상속 (Prototype-based Inheritance):
클래스 기반 상속이 아닌 프로토타입을 기반으로 객체를 생성하고 상속을 구현한다.
이를 통해 객체는 다른 객체를 프로토타입으로 사용하여 속성과 메소드를 상속받을 수 있다.
// 부모 객체 생성
const personPrototype = {
greetings() {
return `Hello, my name is ${this.name}.`;
}
};
// 자식 객체 생성
const john = Object.create(personPrototype);
john.name = 'John';
john.age = 30;
console.log(john.greetings()); // Hello, my name is John.
위의 코드에서 personPrototype 객체는 greetings라는 메소드를 가지고 있다.
이 메소드는 자신을 상속받는 객체에서 사용할 수 있다.
john 객체는 personPrototype 객체를 프로토타입으로 사용하여 생성됨.
따라서 john 객체는 personPrototype 객체의 속성과 메소드를 상속받는다.
john 객체는 name과 age 속성을 가지고 있으며, greetings 메소드를 호출할 수 있다.
이 예시에서 john 객체는 personPrototype 객체를 상속받아 속성과 메소드를 공유하고 있다.
이를 통해 코드의 재사용성과 확장성을 높일 수 있다.
프로토타입 기반 상속은 객체지향 프로그래밍의 상속 개념과 다르지만, 유연한 객체 구조를 구성할 수 있는 장점이 있다.
'JavaScript > study' 카테고리의 다른 글
| [javascript] 형 변환 (0) | 2023.05.22 |
|---|---|
| [javascript] 문자열(string) 다루기 (0) | 2023.05.22 |
| [javascript] 자바스크립트의 역사 (0) | 2023.05.22 |
| [javascript] var, const, let 등 변수 다루기 , TDZ (1) | 2023.05.22 |
| [js] Math 메서드 / 소수점 버림, 올림, 반올림 등 number 소수점 처리 (0) | 2023.05.09 |