// 1.
function Person(name, age) {
this.name = name;
this.age = age;
this.getName = function () {
return this.name + '입니다.';
}
}
// 2.
Person.prototype.getName = function (){
return this.name + '입니다.'
}
1번과 2번은 JavaScript에서 객체 지향 프로그래밍을 구현하는 방식에 차이가 있다.
1번은 생성자 함수를 사용하여 객체를 생성하는 방식이다.
Person 함수는 name과 age라는 인자를 받아 해당 값을 객체의 프로퍼티로 설정한다.
또한, getName이라는 메소드를 객체의 프로토타입에 추가하여 객체가 이 메소드를 호출할 수 있도록 한다.
이 방식은 각 객체마다 getName 메소드가 독립적으로 생성되기 때문에 메모리 사용 측면에서 비효율적일 수 있다.
2번은 프로토타입을 이용하여 메소드를 정의하는 방식이다.
Person.prototype 객체에 getName 메소드를 추가하여
모든 Person 객체가 이 메소드를 공유할 수 있도록 한다.
이 방식은 메소드를 객체마다 독립적으로 생성하지 않기 때문에, 메모리를 절약할 수 있다.
따라서, 1번은 객체마다 메소드를 별도로 생성하여 메모리를 더 사용하지만,
2번은 메소드를 프로토타입에서 공유하여 메모리를 절약하는 장점이 있다.
일반적으로 2번의 방식이 성능과 메모리 효율성 면에서 더 좋은 선택이다.
별도 추가메모)
Q1. 자바스크립트에서 객체와 인스턴스는 같은 의미일까?
A : JavaScript에서 객체와 인스턴스는 비슷한 의미를 갖지만 약간의 차이가 있다.
객체(Object)는 데이터와 그 데이터에 관련된 동작(메소드)을 포함하는 개념이다.
객체는 특정한 추상적인 개념을 나타내는 것으로,
클래스(Class) 또는 생성자 함수(Constructor Function)를 사용하여 만들어진다.
객체는 속성(프로퍼티)과 동작(메소드)으로 구성된다.
인스턴스(Instance)는 클래스 또는 생성자 함수를 사용하여 생성된 구체적인 사례로, 특정한 객체를 의미한다.
클래스 또는 생성자 함수를 통해 인스턴스를 생성하면,
그 인스턴스는 해당 클래스 또는 생성자 함수의 속성과 동작을 상속받는다.
각각의 인스턴스는 독립적인 메모리 공간에 할당되어 독립적으로 사용될 수 있다.
간단히 말하면,
클래스나 생성자 함수를 통해 생성된 객체는 인스턴스라고 부를 수 있다.
객체는 개념적인 것을 의미하고, 인스턴스는 실제로 생성된 구체적인 사례를 의미한다.
예를 들어,
Person이라는 클래스가 있다고 가정해보자.
이 클래스로부터 john이라는 인스턴스를 생성한다면,
john은 Person 클래스의 인스턴스라고 할 수 있다.
Person 클래스는 객체의 개념을 나타내며,
john은 실제로 생성된 구체적인 사례인 인스턴스 이다.
Q2. 그렇다면 객체를 인스턴스라고 부를 수 있지만, 인스턴스를 객체라고 부르기는 어렵다는건가?
A : 맞다.
객체를 인스턴스라고 부를 수 있지만, 인스턴스를 객체라고 부르는 것은 일반적으로는 어렵다.
객체는 개념적인 것으로서 추상적인 개념을 나타내는 것을 의미한다.
클래스나 생성자 함수를 통해 만들어진 구체적인 사례가 아니라도
객체라고 부를 수 있다.
예를 들어, "사람"이라는 개념을 나타내는 객체를 만들었다면,
이는 사람 객체라고 부른다.
반면에 인스턴스는 클래스나 생성자 함수를 통해 실제로 생성된 구체적인 사례를 의미한다.
클래스나 생성자 함수를 통해 인스턴스를 생성하면,
해당 클래스나 생성자 함수의 속성과 동작을 상속받아 사용할 수 있다.
따라서, 객체를 인스턴스로 부르는 것은 일반적으로 가능하지만,
인스턴스를 객체로 부르는 것은 객체가 추상적인 개념을 나타내는 것에 비해
구체적인 사례를 의미하는 인스턴스의 특징을 감안할 때 어렵다고 할 수 있다.
'개발 > JavaScript' 카테고리의 다른 글
Set 객체: 값의 고유한 집합 저장소 (1) | 2023.12.17 |
---|---|
개인적인 This 정리 (1) | 2023.09.24 |
클래스를 이용한 모듈화 (0) | 2023.07.01 |
JS에서의 Boxing 처리 (0) | 2023.06.21 |
Array.prototype.reduce() (0) | 2023.05.07 |
개발 블로그
포스팅이 좋았다면 "좋아요❤️" 누르기 !