ECMAScript 객체 적용
객체의 생성 및 파괴는 JavaScript 실행 중에 발생하며, 이 패턴의 의미를 이해하는 것은 언어 전체를 이해하는 데 매우 중요합니다.
선언 및 인스턴스화
객체는 new 키워드 뒤에 클래스 이름을 따르는 방식으로 생성됩니다:
var oObject = new Object(); var oStringObject = new String();
첫 번째 줄 코드는 Object 클래스의 인스턴스를 생성하고 oObject 변수에 저장합니다. 두 번째 줄 코드는 String 클래스의 인스턴스를 생성하고 oStringObject 변수에 저장합니다. 파라미터가 없는 경우, 괄호는 필요하지 않으므로 위의 두 줄 코드를 다음과 같이 다시 작성할 수 있습니다:
var oObject = new Object; var oStringObject = new String;
객체 참조
이전 장에서는참조형 개념ECMAScript에서는 객체의 물리적 표현에 접근할 수 없으며, 객체의 참조만 접근할 수 있습니다. 객체를 생성할 때마다, 변수에 저장되는 것은 해당 객체의 참조가 아니라 객체 자체입니다.
객체 폐기
ECMAScript에는 쓰레기 수집 프로그램(garbage collection routine)이 있어, 객체를 특별히 파괴하여 메모리를 해제할 필요가 없습니다. 객체에 대한 참조가 더 이상 없을 때, 그 객체가 폐기(dereference)되었습니다. 쓰레기 수집 프로그램을 실행할 때, 모든 폐기된 객체가 파괴됩니다. 함수가 자신의 코드를 실행할 때마다, 쓰레기 수집 프로그램이 실행되어 모든 지역 변수를 해제하고, 예측할 수 없는 다른 경우에도 쓰레기 수집 프로그램이 실행됩니다.
객체의 모든 참조를 null로 설정하여 강제로 객체를 제거할 수 있습니다. 예를 들어:
var oObject = new Object; // 객체와 관련된 작업을 여기서 수행하세요 oObject = null;
변수 oObject가 null로 설정되면, 첫 번째로 생성된 객체에 대한 참조가 사라집니다. 이는 다음 번 용량 회수 프로그램을 실행할 때 해당 객체가 파괴될 것을 의미합니다.
객체를 사용한 후에 그를 제거하여 메모리를 해제하는 것이 좋은 습관입니다. 이렇게 하면 더 이상 접근할 수 없는 객체를 사용하지 않도록 하여, 프로그램 설계 오류가 발생하지 않도록 합니다. 또한, 구형 브라우저(예: IE/MAC)는 전체적인 가용 스토리지 콜렉터 프로세스를 가지고 있지 않으므로, 페이지를 닫을 때 객체가 올바르게 파괴되지 않을 수 있습니다. 객체와 그 모든 특성을 제거하는 것은 메모리 사용을 올바르게 유지하는 가장 좋은 방법입니다.
주의事项:객체의 모든 참조를 제거할 때 주의해야 합니다. 객체가 두 개나 더 많은 참조를 가지고 있다면, 모든 참조를 null로 설정하여 객체를 올바르게 제거해야 합니다.
이른 바인딩과 늦은 바인딩
바인딩(binding)이란, 객체 인터페이스와 객체 인스턴스를 결합하는 방법을 의미합니다.
이른 바인딩(early binding)은 객체를 인스턴스화하기 전에 그의 속성과 메서드를 정의하는 것을 의미합니다. 이렇게 하면 컴파일러나 인터프리터가 먼저 마이크로코드를 전환할 수 있습니다. Java와 Visual Basic과 같은 언어에서, 이른 바인딩이 있으면 개발 환경에서 IntelliSense(개발자에게 객체의 속성과 메서드 목록을 제공하는 기능)을 사용할 수 있습니다. ECMAScript는 강타입 언어가 아니므로 이른 바인딩을 지원하지 않습니다.
다른 한편, 늦은 바인딩(late binding)은 컴파일러나 인터프리터가 실행 전에 객체의 유형을 알지 못하는 것을 의미합니다. 늦은 바인딩을 사용하면 객체의 유형을 확인할 필요가 없으며, 객체가 속성과 메서드를 지원하는지 확인만 하면 됩니다. ECMAScript의 모든 변수는 늦은 바인딩 방법을 사용합니다. 이렇게 하면 대량의 객체 작업을 수행할 수 있으며, 어떤 형태의 제약도 없습니다.