Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript 객체 리터럴과 생성자: 두 가지 객체 초기화 방식의 차이

JavaScript에서 객체를 생성하는 대표적인 방법은 두 가지입니다. 하나는 new Object() 표기법이고, 다른 하나는 객체 리터럴({}) 표기법입니다. 기본적으로 이 두 방식은 같은 작업을 수행합니다. 바로 새로운 객체를 초기화하는 것이죠.

하지만 객체에 속성(property)을 추가하기 시작하면 두 방식 사이에 미묘한 차이가 나타날 수 있습니다. 아래 예제를 통해 확인해 보겠습니다.

객체 리터럴을 사용한 초기화

let a = {
    name: 'Ayush'
}

위 코드는 다음과 동일하게 동작합니다.

let a = new Object();
a.name = 'Ayush';

또는 다음과 같이 빈 객체를 먼저 만든 뒤 속성을 추가할 수도 있습니다.

let a = {};
a.name = 'Ayush';

상속 클래스에서는 상황이 다릅니다

그러나 상속된(inherited) 클래스에서는 이야기가 달라집니다. 이런 클래스들은 자체적으로 정의한 커스텀 생성자(constructor)를 가질 수 있으며, 그 결과 new ClassName() 호출이 위에서 설명한 일반적인 초기화 흐름과 다르게 동작하도록 만들 수 있습니다.

즉, 생성자 내부에서 어떤 로직을 실행하고 어떤 값을 반환할지는 전적으로 개발자(프로그래머)의 재량에 달려 있다는 것입니다.

참고: 객체 리터럴이 선호되는 이유

실무에서는 대부분 객체 리터럴({}) 방식을 권장합니다. 코드가 더 간결하고 가독성이 좋으며, 전역 스코프의 Object가 다른 값으로 덮어써졌을 때 발생할 수 있는 잠재적 문제도 피할 수 있기 때문입니다.