💡 자바스크립트는 멀티 패러다임이기 때문에 가릴 필요 없이 다 써도 된다!
1) 함수 단위로 나눠지므로 재사용성이 높다
2) 불변성을 지향하여 동작 예측이 쉽고 사이드 이펙트를 방지한다. (스레드로 인한 동시성 문제 해결)
3) 코드가 짧고 간결하다
물론 이 장점들은 단점으로 작용할 수도 있다... 😵💫 (콜백지옥 등)
추상: 사물이 지니고 있는 여러 측면 중 특정한 부분만 보는 것
1) 객체 위주로 설계하고 프로그래밍 하는 패러다임
2) 객체지향 언어에서는 추상회의 최소 단위가 객체
3) 각각의 객체는 메시지를 주고 받기가 가능
1) 클래스 기반 언어처럼 속성(Attribute)과 행위(Method)를 정의 가능
2) 객체 리터럴, Object, 생성자 함수 세 가지 방법을 사용
// 객체 리터럴
const person = {
name: "박영규",
age: 26,
move: function (destination) {
console.log('${destination}(으)로 이동합니다.')
},
};
// Object 생성자 함수
const person2 = new Object();
person2.name = "박영순";
person2.age = 26;
person2.dance = function(dancing) {
console.log('{dancing}(을)를 춥니다.');
};
// 생성자 함수
function Person3(name, age, eat) {
this.name = name;
this.age = age;
this.eat = function(eating) {
console.log('${eating}(을)를 먹습니다.');
};
}
❗ 그런데...
// 프로토타입 이용 함수
function Person4(name, age) {
this.name = name;
this.age = age;
Person4.prototype.getName = function() {
return this.name;
};
Person4.prototype.setName = function (name) {
this.name = name;
};
}
// 부모 생성자로 상속 흉내내기
function Person5(name) {
this,name = name;
}
Person5.prototype.getName = function() {
return this.name || "영규";
};
function Korean(name) {
Person5.apply(this, arguments); // apply를 이용하면 생성자를 빌려쓸 수 있다
}
Korean.prototype = new Person5();
Korean.prototype.setName = function (name) {
this.name = name;
};
// 기존 객체 재활용
const park = Object.create(person);
park.name = "박영규";
🤷♂️ 그렇다면 절차지향은 무엇인가요?
- 절차지향언어는 개체를 순차적으로 처리하여 프로그램 전체가 유기적으로 연결한다.
- 컴퓨터의 처리구조와 유사하여 실행속도가 빠르다는 장점이 있다.
- 다만 유지보수가 어렵고 비효율적인 문제로 인해 객체지향언어가 나오는 계기가 되었다.
패러다임에 관한 개념을 꼭 기억하도록 하자.