2020. 5. 8. 17:09ㆍJavaScript
# Object Oriented Programming (OOP)
- 객체 지향 프로그래밍
- 객체 단위로 데이터와 기능을 묶어서 사용
- class라는 틀에 기본적인 속성, 기능 등을 정의하고 이를 기반으로 instance를 생성 (해당 기능을 가지는 객체를 찍어냄)
## OOP의 특징
- Encapsulation (캡슐화) : 속성, 메소드 등을 하나의 객체로 묶어 사용하기 때문에, 제 3자가 객체 내부의 데이터를 변조하는 것을 막아줌
- Inheritance (상속) : 상속을 통해 상위 객체가 가지고 있는 속성을 하위 객체가 이어받을 수 있음
- Abstraction (추상화) : 해당 객체에서 꼭 필요한 부분만 표현하고, 나머지 세부사항은 감춤
- Polymorphism (다형성) : 동일한 명령어를 입력해도 상황에 따라 다른 결과값이 나오도록 하며, 상속을 통해 특정 속성, 메소드가 확장되어 다형성을 가질 수 있게 됨
## JavaScript에서 객체 인스턴스를 생성하는 방법들
1. functional : 모든 속성과 메소드를 함수 내부에 정의하고, 그 함수를 사용해 인스턴스 생성
var Animal = function(name){
var obj = {};
obj.name = name;
obj.eat = function() {
console.log(this.name + '가 밥을 먹습니다.');
}
return obj;
}
var dog = Animal('강아지');
var cat = Animal('고양이');
dog.eat();
// result: 강아지가 밥을 먹습니다.
console.log(cat);
// result: {name: "고양이", eat: ƒ}
2. Functional Shared : 함수 내부에 속성과 메소드를 전부 정의하는 것이 아니라, 메소드를 정의하는 부분을 분리해서 작성한 뒤 마지막에 인스턴스와 메소드를 합치는 방식 (인스턴스들이 각각 메소드를 가지고 있는 것이 아니라, 메소드가 있는 주소값만 참조하기 때문에 메모리 효율이 좋아짐)
var Animal = function(name){
var obj = {
name: name
}
extend(obj, animalMethod);
return obj;
}
var animalMethod = {};
animalMethod.eat = function() {
console.log(this.name + '가 밥을 먹습니다.');
}
var extend = function(instance, method){
for(var key in method) {
instance[key] = method[key];
}
}
var dog = Animal('강아지');
var cat = Animal('고양이');
dog.eat();
// result: 강아지가 밥을 먹습니다.
console.log(cat);
// result: {name: "고양이", eat: ƒ}
3. Prototypal : Object.create( )를 이용해 속성, 메소드가 들어 있는 객체를 프로토타입으로 해 줌
var Animal = function(name){
var obj = Object.create(animalMethod);
obj.name = name;
return obj;
}
var animalMethod = {};
animalMethod.eat = function() {
console.log(this.name + '가 밥을 먹습니다.');
}
var dog = Animal('강아지');
var cat = Animal('고양이');
dog.eat();
// result: 강아지가 밥을 먹습니다.
console.log(cat);
// result: {name: "고양이", eat: ƒ}
4. Pseudoclassical : 생성자 함수를 작성한 뒤, 함수 밖에서 prototype 키워드를 사용해 메소드를 프로토타입으로 해 줌, 인스턴스를 생성할 때마다 new 키워드를 붙여야 함
var Animal = function(name) {
this.name = name;
}
Animal.prototype.eat = function() {
console.log(this.name + '가 밥을 먹습니다.')
}
var dog = new Animal('강아지');
var cat = new Animal('고양이');
dog.eat();
// result: 강아지가 밥을 먹습니다.
console.log(cat);
// result: {name: "고양이", eat: ƒ}
5. ES6 class keyword 사용: 아래 포스팅에 따로 정리해 두었다.
https://lsy26499.tistory.com/29
'JavaScript' 카테고리의 다른 글
200611 TIL :: Promise (0) | 2020.06.09 |
---|---|
ES6 class, super (0) | 2020.05.08 |
Closure (0) | 2020.04.28 |
이벤트 버블링과 캡쳐 (0) | 2020.03.26 |
function method, this (0) | 2020.03.18 |