프로그래밍 언어에서 객체는 주로 객체 지향 프로그래밍(Object Oriented Programming, OOP)의 핵심 개념 중 하나입니다.
객체 지향 프로그래밍
실제 존재하고 인지하고 있는 {사물 = 객체(Object)}를 컴퓨터 세계에서 표현하고 사용하기 위해 핵심적인 개념 또는 기능만을 추출하는 추상화(abstraction)를 통해 모델링하려는 프로그래밍 패러다임
객체는 데이터와 데이터를 조작하는 방법(함수 혹은 메서드)을 하나로 묶은 것을 의미합니다. 객체는 주로 '속성'과 '메서드'로 구성되어 있습니다.
속성은 객체의 상태나 특성 혹은 특징, 즉 자기 자신을 나타내기 위한 정보라고 생각하면 이해하기 쉽습니다. 주로 자동차를 예시로 설명합니다. 자동차의 제조회사, 이름, 색상 등을 속성이라 할 수 있습니다.
메서드는 객체가 수행할 수 있는 동작을 의미하며 혹은 조작하기 위한 도구입니다. 자동차의 경우 달리기, 멈추기, 후진 등이 있습니다.
JavaScript는 객체 기반의 스크립트 언어이며 JavaScript를 이루고 있는 거의 모든 것이 객체입니다. 여러 가지를 수용할 수 있는 그릇이라 생각할 수 있습니다. JavaScript 객체는 다음과 같이 생성할 수 있으며 키(key)와 값(value)으로 구성된 것을 확인할 수 있습니다.
let car = {
brand: "Hyundai",
model: "Sonata",
year: 2020,
start: function() {
console.log("Car starts");
},
stop: function() {
console.log("Car stops");
}
};
JavaScript에서는 'new' 연산자와 생성자 함수를 통해 객체를 생성하는 방법도 제공합니다. 이를 통해 동일한 속성과 메서드를 가진 객체를 여러 개 생성할 수 있습니다.
function Car(brand, model, year) {
this.brand = brand;
this.model = model;
this.year = year;
this.start = function() {
console.log("Car starts");
};
this.stop = function() {
console.log("Car stops");
};
}
let car1 = new Car("Hyundai", "Sonata", 2024);
let car2 = new Car("Kia", "K5", 2023);
여기서 new 연산자가 필요한 이유가 단지 동일한 속성과 메서드를 가진 객체를 여러 개 생성하기 위해서 필요한가? 의문이 들어 찾아보았습니다.
객체지향의 세계에서는 보통 준비된 객체를 직접 사용하는 것을 인정하지 않습니다. 객체는 '자기 자신 안에서 데이터를 보존할 수 있다'라는 성질 즉, 불변성을 가지고 있기 때문입니다.
서로 다른 애플리케이션의 객체의 동일한 프로퍼티를 조작하려고 한다면 서로 충돌하여 올바른 작동을 하지 않을 수 있습니다. 따라서 객체의 원본은 직접적으로 접근하지 않고 '원본을 복제한 복사본'을 만들어 사용함으로써 오류를 방지할 수 있습니다.
객체의 복제를 만드는 것을 인스턴스화라고 하며, 이로 인해 만들어진 복제본을 인스턴스라고 부릅니다. 인스턴스화는 객체를 사용하기 위해서 자기 자신의 영역을 확보하는 행위라고 말할 수 있습니다.
객체에서는 객체를 초기화하기 위해 같은 이름의 메소드가 존재하는데 이를 생성자(constructor)라고 부릅니다. 객체 이름은 다시 말해 생성자 이름이기도 합니다.
let 변수명 = new 객체 이름([인수, ...])
생성된 인스턴스는 변수에 보관되어 이를 객체로 취급할 수 있습니다. 인스턴스(복제된 객체)가 보관된 변수는 인스턴스 변수 또는 객체 변수라고 불립니다.
다음에는 객체 중에서 JavaScript의 내장 객체(Built-in Object)에 대해 공부하고 글 작성할 예정입니다.