OOP(Object Oriented Programming), 객체 지향 프로그래밍은 컴퓨터 프로그래밍의 패러다임 중 하나이다. 프로그램을 명령어의 목록으로 보는 시각이 아닌 여러개의 독립된 객체들의 집합으로 파악하고자 한다. 이러한 OOP는 프로그램의 수정이 용이해 대규모 소프트웨어 개발에 많이 사용된다.
기본적으로 class를 가지고 instance를 만든다.
다중 상속
다형성 개념
function Person(name, level, value){
this.name = name;
this.level = level;
this.attValue = 0;
this.defValue = value + 3;
this.sumValue = function(){
return 'your power : ' + (this.attValue + this.defValue);
}
}
let warriorA = new Person('A', 1, 4);
let warriorB = new Person('B', 1, 3);
warriorA // Person {name: "A", level: 1, attValue: 0, defValue: 7, sumValue: ƒ}
warriorB // Person {name: "B", level: 1, attValue: 0, defValue: 6, sumValue: ƒ}
warriorA.sumValue(); // "your power : 7"
warriorB.sumValue(); // "your power : 6"
함수를 사용하여 Person
이라는 클래스를 만들고 new
생성자 키를 통해 warriorA, warriorB 라는 인스턴스를 생성했다. 각 각의 인스턴스는 클래스라는 청사진을 통해 기본 정보를 입력받아 만들어진다. 다만 위 코드에서는 sumValue
라는 메소드가 객체를 새로 생성할때마다 각각 할당된다.
JavaScript의 모든 객체는 __proto__
라는 숨겨진 프로퍼티를 가지고 있다. 이는 자신의 부모인 프로토타입 객체를 가리키며 이러한 링크를 prototype Link
라고 부른다. 또한 JavaScript의 모든 함수는 prototype
라는 숨겨진 프로퍼티를 가지고 있는데 이는 자신에 new
키워드를 붙여 생성한 객체의 부모를 가리킨다. 말이 너무 어려우니 위 코드를 가지고 풀어보는게 좋겠다.
function Person(name, level, value){
this.name = name;
this.level = level;
this.attValue = 0;
this.defValue = value + 3;
}
Person.prototype.sumValue = function(){
return 'your power : ' + (this.attValue + this.defValue);
}
let warriorA = new Person('A', 1, 4);
let warriorB = new Person('B', 1, 3);
warriorA // Person {name: "A", level: 1, attValue: 0, defValue: 7}
warriorB // Person {name: "B", level: 1, attValue: 0, defValue: 6}
warriorA.sumValue(); // "your power : 7"
warriorB.sumValue(); // "your power : 6"
위 코드에서는 메소드를 따로 빼내어 메모리 절약이 가능해졌다. 새로 생성된 warriorA, warriorB는 이제 더이상 sumValue
메소드를 가지고 있지 않다. 하지만 각각에 존재하는 숨겨진 프로퍼티 __proto__
를 통해 접근할 수 있으며 이를 프로토타입 체이닝이라고 한다.
위와 같이 코드를 작성한다고 했을때 우리는 계속해서 name.prototype.methodname 을 통해 메소드를 만들어 줄 수 있으나 더글라스 크락포드가 제안한 패턴을 이용하면 좀 더 간단하게 메소드를 prototype에 프로퍼티로 추가할 수 있다
작성중