[Java Script] 객체지향 프로그래밍 : 클래스, 생성자, 메서드
2021. 9. 14. 22:00ㆍCSE/Java Script
<클래스 기반의 언어>
- 클래스로 객체의 기본적인 형태와 기능을 정의
- 생성자로 인스턴스를 만들어서 사용할 수 있음
- 클래스에 정의된 메서드로 여러 가지 기능을 수행할 수 있음
- 모든 인스턴스가 클래스에 정의된 대로 같은 구조이고 보통 런타임에 바꿀 수 없다.
- 정확성, 안전성, 예측성 등의 관점에서 클래스 기반 언어는 프로토타입 기반의 언어보다 좀 더 나은 결과를 보장한다.
- Java, C++이 여기에 속한다
<프로토타입 기반 언어>
- 객체의 자료구조, 메서드 등을 동적으로 바꿀 수 있음
- 동적으로 자유롭게 객체의 구조와 동작 방식을 바꿀 수 있음
- 자바스크립트가 여기에 속함
- 자바스크립트는 거의 모든 것이 객체이고, 특히 함수 객체로 많은 것을 구현할 수 있다.
=> 클래스, 생성자, 메서드도 모두 함수로 구현할 수 있다
1. 자바스크립트로 객체 생성하기 (자원 낭비)
function Person(arg){
this.name = arg;
this.getName = function(){
return this.name;
}
this.setName = function(value){
this.name = value;
}
}
var me = new Person("zzoon");
console.log(me.getName()); //zzoon
me.setName("iamhjoo");
console.log(me.getName()); //iamhjoo
var you = new Person("you");
var him = new Person("him");
- 함수 Person이 클래스이자 생성자의 역할을 한다.
- 자바스크립트에서 클래스 기반의 객체 지향 프로그래밍의 기본적인 형태
=> 클래스 및 생성자의 역할을 하는 함수가 있고, 사용자는 new 키워드로 인스턴스를 생성해서 사용할 수 있음
- 위와 같은 방법은 겉으로는 별 문제 없이 작동하지만, 각 객체가 자기 영역에서 공통적으로 사용할 수 있는 setName(), getName() 함수를 따로 생성하고 있다.
=> 불필요하게 중복되는 영역을 메모리에 올려놓고 사용하기 때문에, 자원 낭비가 발생한다.
2. 프로토타입을 활용한 객체 생성하기
function Person(arg){
this.name = arg;
}
Person.prototype.getName = function(){
return this.name;
}
Person.prototype.setName = function(value){
this.name = value;
}
var me = new Person("me");
var you = new Person("you");
console.log(me.getName()); //me
console.log(you.getName()); //you
- Person 함수 객체의 prototype 프로퍼티에 getName()과 setName() 함수를 정의하였다.
=> Person으로 객체를 생성할 때, 각 객체는 각자 따로 함수 객체를 생성할 필요 없이, 프로토타입 체인으로 함수를 접근할 수 있다.
=> 자바스크립트에서 클래스 안의 메서드를 정의할 때는 프로토타입 객체에 정의한 후, new로 생성한 객체에서 접근할 수 있게 하는 것이 좋다.
3. 더글라스 크락포드가 제시한 메서드 정의 방법
Function.prototype.method = function(name,func){
if (!this.prototype[name]){
this.prototype[name] = func;
}
}
- 더글라스 크락포드는 위와 같은 메서드를 정의하는 방법을 소개했다.
Function.prototype.method = function(name,func){
this.prototype[name] = func;
}
function Person(arg){
this.name = arg;
}
Person.method("setName", function(value){
this.name = value;
});
Person.method("getName", function(){
return this.name;
});
var me = new Person("me");
var you = new Person("you");
console.log(me.getName()); //me
console.log(you.getName()); //you
- 이를 이용한 방법이 위와 같다.
'CSE > Java Script' 카테고리의 다른 글
[Java Script] 객체지향 프로그래밍 : 상속 (0) | 2021.09.14 |
---|---|
[Java Script] 스코프 체인 (0) | 2021.09.06 |
[Java Script] 실행 컨텍스트 (0) | 2021.08.05 |
[Java Script] 함수와 프로토타입 체이닝 4 (0) | 2021.08.05 |
[Java Script] 함수와 프로토타입 체이닝 3 (0) | 2021.08.05 |