Public 메서드: public method - OOP JavaScript

public 메서드는 객체 콘텍스트에서 누구든지 접근할 수 있는 메서드다. 이렇게 특정 객체의 모든 인스턴스에서 사용할 수 있는 공개 메서드를 만들려면 prototype이라는 프로퍼티에 대해 알아야 한다. 이 프로퍼티에는 어떤 객체의 모든 복사본에 대한 참조 같은 객체가 하나 들어있다. 이 prototype 객체의 모든 프로퍼티는 객체의 모든 인스턴스에서 사용할 수 있다. 이런 방식의 프로퍼티 생성과 참조 과정덕분에 3장에ㅓ 논의할 상속을 쉽게 구현할 수 있다.

객체의 프로토타입도 단순히 객체이므로 다른 객체와 마찬가지로 새로운 프로퍼티를 붙일 수 있다. 프로토타임에 프로퍼티를 붙이면 이 프로퍼티는 프로토타입으로 만든 모든 객체의 일부가 되고 이 프로퍼티는 공개 프로퍼티(어느 곳에서든 접근할 수 있음)가 된다. 아래의 코드는 이와 관련된 예이다.



prototype 객체를 통해 추가한 메서드를 갖는 객체의 예

							// 이름을 하나 받아서 현재 콘텍스트에 저장하는 간단한 함수
							function User (name) {
								this.name = name;
							}

							// 이름을 주면서 함수의 새 인스턴스를 생성한다.
							var me = new User("My Name");

							// 이름이 me의 프로퍼티로 설정된 것을 볼 수 있다.
							alert(me.name == "My Name");

							// 그리고 me가 User 객체의 인스턴스임을 알 수 있다.
							alert(me.constructor == User);

							// 단순히 보면 User()가 함수이므로,
							// 함수 취급을 하면 어떻게 될까?
							User("Test");

							// 이 함수의 this 콘텍스트가 설정되지 않았기 때문에
							// 콘텍스트는 기본적으로 전역 변수 'window'가 된다.
							// 그 결과 주어진 이름과 window.name이 같아진다.
							alert(window.name == "Test");
						

상기의 예제 코드에서 constructor 프로퍼티를 사용하는 예를 보았다. 이 프로퍼티는 모든 객체에 들어 있으며 항상 객체를 생성한 함수를 가리킨다. 이런 식으로, 기반 클래스는 같지만 프로퍼티는 다른 새로운 객체를 효과적으로 복제할 수 있다. 아래의 코드틑 이와 관련된 한 예이다.

me 객체의 생성자 함수는 User이다. me의 constructor 프로퍼티는 User를 가리킨다.



constructor 프로퍼티를 사용하는 예

							// 간단한 새 User 객체를 정의한다.
							function User () { }

							// 새 User 객체를 만든다.
							var me = new User();

							// 역시나 새 User 객체를 만든다.
							// (첫 번째 User 객체의 constructor를 참조한다.)
							var you = new me.constructor();

							alert(me.constructor);

							// 실제로 constructor가 같음을 알 수 있다.
							alert(me.constructor == you.constructor);
						

이제 간단한 객체를 생성하는 방법을 알았으니, 객체를 그토록 유용하게 만드는 콘텍스트 메서드와 프로퍼티를 추가할 차례이다.