몽탁이의 개발일기
생성자 본문
자바스크립트는 함수 기반 프로그래밍이기 때문에 객체지향적인 프로그래밍을 하는데 있어서 다른 언어와는 차이점이 많습니다.
자바스크립트에서 객체를 생성할때
var p0 = {}
p0.name='egoing';
p0.introduce=function (){
return 'My name is '+ this.name;
}
var p1 = {}
p1.name='leezche';
p1.introduce=function (){
return 'My name is '+ this.name;
}
이와 같은 식으로 p라는 객체를 생성하고 그 후에 프로퍼티를 만드는 방법이 있고
var p0 = {
name: 'egoing';
introduce: function (){
return 'My name is '+ this.name;
}
}
var p1 = {
name: 'leezche';
introduce: function (){
return 'My name is '+ this.name;
}
}
객체를 생성하는 과정에서 프로퍼티를 만드는 방법이 있습니다.
두 방법중 어떤 것이 더 좋다고 말할 수는 없습니다. 상황에 따라 쓰이는 용도가 다르기 때문입니다.
첫 번째 방식은 응집성은 떨어지지만 동적으로 프로퍼티를 만들 수 있다는 것을 보여주고
두 번째 방식은 응집성이 높아져 알아보기가 쉽고 유지 보수하기가 편리하다는 장점이 있습니다.
하지만 위의 방식은 객체를 생성할 때마다 같은 내용을 반복해야된다는 점에서 유지 보수하는데 불편함이 있습니다.
이것을 해결하기위해 자바스크립트는 생성자를 사용합니다.
function Person(name){
this.name=name,
this.introduce=function(){
return 'My name is '+ this.name;
}
}
var p1=new Person('egoing');
var p2=new Person('leezche');
여기서 생성자 함수는 알아보기 쉽게 자바의 클래스처럼 맨 앞의 문자를 대문자로 정의하는 것을 원칙으로 하며
함수가 new 연산자를 만났을때는 함수를 호출하는 것이 아닌 생성자로 인식하고 p1에는 Person이라는 객체가 들어가게 됩니다.
이런식으로 공통적인 부분을 생성자로 빼고 객체를 만드는 것은 객체 지향 프로그래밍에 있어서 중요한 것이고 반드시
필요한 기능이라고 생각합니다.
추가적으로
function Person(){}
var p0 = Person(); // undefinded
var p1 = new Person(); // Person(){}
new를 사용하지 않은 경우와 한 경우를 비교해보면
p0에는 Person이라는 함수안에 아무것도 정의되어 있지 않기 때문에 undefinded가 출력되는 반면에
p1에는 Person을 생성자로 인식하고 Person자체를 객체로 만들어 Person(){}이라는 값이 출력이 됩니다.
'Javascript 정리' 카테고리의 다른 글
this (0) | 2020.07.01 |
---|---|
전역객체 (0) | 2020.06.30 |
apply 메소드 (0) | 2020.06.30 |
arguments 객체 (0) | 2020.06.30 |
클로저 사용시 주의사항 (0) | 2020.06.29 |