객체 (Object)
이 페이지는 바이브 코딩 문맥에서 자주 쓰이는 객체 (Object)의 뜻과 쓰임을 입문 난이도 기준으로 정리한 AI 용어사전 항목입니다. 정의와 맥락, 관련 용어 5개 순서로 묶었으니, 아래 설명을 먼저 읽고 연결된 개념과 글까지 이어서 보면 이해가 빨라집니다.
객체(Object)는 프로그램 안에서 값과 그 값에 딸린 속성·동작을 하나로 묶어 다루는 데이터 단위입니다. JavaScript에서는 이름(키)과 값을 짝지은 속성의 모음이고, Python에서는 프로그램의 모든 데이터가 정체성·타입·값을 가진 객체로 표현됩니다. 데이터 교환 형식인 JSON의 객체는 같은 이름을 쓰지만, 중괄호 안에 이름/값 쌍을 적은 텍스트 표현을 가리킵니다.
속성과 메서드로 이루어진 JavaScript 객체
MDN의 JavaScript 객체 안내서는 객체를 속성(property)의 모음으로, 속성을 이름(키)과 값의 연결로 설명합니다. 객체는 중괄호 안에 속성을 적는 객체 초기자(객체 리터럴)로 만들 수 있으며, 안내서의 myHonda는 color: "red", wheels: 4와 함께 engine: { cylinders: 4, size: 2.2 }를 가집니다. 이 예처럼 속성의 값이 다시 객체일 수 있습니다.
속성에는 점 표기법(myCar.make)이나 대괄호 표기법(myCar["make"])으로 접근합니다. 같은 안내서에 따르면 속성 이름은 문자열이나 Symbol만 될 수 있고, 공백이나 하이픈이 들어 있거나 숫자로 시작하거나 변수에 담긴 이름은 대괄호 표기법으로만 읽을 수 있습니다. 없는 속성을 읽으면 null이 아닌 undefined가 나옵니다. 안내서는 외부 입력으로 정한 이름을 대괄호에 넣으면 코드가 객체 주입 공격(object injection attack)에 취약해질 수 있다고 경고합니다.
값이 함수인 속성은 메서드(method)라고 부릅니다. 문서의 일반 함수 예시에서는 this가 메서드를 호출한 객체를 가리키므로, 같은 sayHi() 함수를 manager와 intern 두 객체에 붙여 호출하면 각각 "Hello, my name is Karina"와 "Hello, my name is Tyrone"를 출력합니다. 같은 모양의 객체를 여러 개 만들 때는 생성자 함수를 정의하고 new Car("Eagle", "Talon TSi", 1993)처럼 new 연산자로 호출하거나 class 문법을 씁니다.
같은 객체인지 가르는 기준
Python 언어 참조의 데이터 모델 장은 Python 프로그램의 모든 데이터가 객체나 객체 사이의 관계로 표현되며, 모든 객체가 정체성(identity), 타입, 값을 가진다고 설명합니다. 정체성은 객체가 만들어진 뒤 바뀌지 않아 메모리 주소처럼 생각할 수 있습니다. is 연산자는 두 객체의 정체성을 비교하고, id() 함수는 정체성을 나타내는 정수를 돌려줍니다. 타입은 그 객체가 지원하는 연산과 가질 수 있는 값을 정하고, type() 함수로 확인합니다.
값이 바뀔 수 있는 객체는 가변(mutable), 만든 뒤 값을 바꿀 수 없는 객체는 불변(immutable)이라고 하며, 숫자·문자열·튜플은 불변이고 딕셔너리와 리스트는 가변입니다. 튜플이 가변 객체를 담고 있다면 그 내부 객체의 값은 바뀔 수 있습니다. 불변 타입에서는 a = 1; b = 1 뒤에 a와 b가 같은 객체를 가리킬 수도 있고 아닐 수도 있는데, 이 동작은 구현에 따라 달라 정체성 비교에서 기대지 말라고 문서는 적습니다. 반면 c = []; d = [] 뒤의 c와 d는 새로 만든 서로 다른 빈 리스트임이 보장됩니다.
MDN의 JavaScript 객체 안내서에 따르면 JavaScript에서 객체는 참조 타입이라, 속성이 같아도 서로 다른 두 객체는 결코 같지 않고 같은 객체 참조끼리 비교할 때만 참이 나옵니다. { name: "apple" }을 따로 두 번 만든 fruit와 anotherFruit는 ==와 === 비교에서 모두 false이지만, anotherFruit = fruit로 참조를 넘기면 true가 되고 fruit.name을 "grape"로 바꾼 결과가 anotherFruit에서도 보입니다.
JSON 객체와 프로그램 속 객체의 경계
IETF의 RFC 8259는 JSON(JavaScript Object Notation)을 JavaScript의 객체 리터럴에서 파생한, 언어에 독립적인 텍스트 기반 데이터 교환 형식으로 정의합니다. JSON은 문자열, 숫자, 불리언, null의 네 가지 기본 타입과 객체, 배열의 두 가지 구조 타입을 표현합니다. JSON 객체는 0개 이상의 이름/값 쌍(멤버)을 순서 없이 모은 것이고, 이름은 문자열, 값은 문자열·숫자·불리언·null·객체·배열 중 하나입니다. 이 값 목록에 함수가 없으므로 JavaScript 객체의 메서드는 JSON 객체에 그대로 담을 수 없습니다.
이름을 적는 방식도 다릅니다. MDN의 JavaScript 객체 안내서가 보여 주듯 JavaScript 객체 리터럴에서는 { color: "red" }처럼 식별자를 속성 이름으로 바로 쓸 수 있습니다. RFC는 이름을 문자열로, 문자열을 따옴표로 시작하고 끝나는 것으로 정하므로 JSON에서는 { "color": "red" }로 적습니다. RFC는 또 한 객체 안의 이름을 고유하게 두라고(SHOULD) 권고합니다.
이름이 겹치는 객체를 받은 소프트웨어의 동작은 예측할 수 없습니다. RFC에 따르면 많은 구현은 마지막 이름/값 쌍만 보고하고, 다른 구현은 오류를 내거나 파싱에 실패하며, 어떤 구현은 중복을 포함한 모든 쌍을 보고합니다. 파싱 라이브러리는 객체 멤버의 순서를 호출한 쪽 코드에 드러내는지도 서로 다르며, 멤버 순서에 기대지 않는 구현은 이 차이에 영향을 받지 않습니다.
관련 용어
객체 (Object)와 함께 자주 언급되는 개념들입니다. 비슷한 말처럼 보여도 역할과 쓰임은 다를 수 있습니다.
