객체(Object)에 대하여, 변수와 리터럴

프로그래밍에서의 객체

가장 흔히 쓰이는 의미로, 데이터(속성)와 그 데이터를 처리하는 기능(동작)을 하나로 묶어놓은 실체입니다. 위키독스위키독스 +1

  • 구성 요소:
    • 속성(Property/Attribute): 객체가 가진 정보 (예: 자동차의 색상, 모델명).
    • 메서드(Method): 객체가 할 수 있는 행동 (예: 자동차의 주행하기, 멈추기).
  • 클래스와의 관계클래스가 ‘설계도(붕어빵 틀)’라면, 객체는 그 설계도를 바탕으로 실제로 메모리에 만들어진 ‘결과물(붕어빵)’입니다. 이를 구체적으로 부를 때 인스턴스(Instance)라고도 합니다.
  • 특징: 각 객체는 서로 독립적이며, 식별 가능한 고유의 이름을 가집니다. 

개념 예시

1. 붕어빵 예시 (클래스 vs 객체)

  • 붕어빵 틀 (클래스): 붕어빵을 만들기 위한 ‘설계도’입니다. 모양은 정해져 있지만, 그 자체를 먹을 순 없죠.
  • 붕어빵 (객체): 틀에서 찍어낸 실제 결과물입니다.
    • 객체 A: 속성(팥소), 상태(따끈함)
    • 객체 B: 속성(슈크림), 상태(식었음)
    • 모양은 같지만, 안에 든 재료나 상태가 다른 각각의 독립된 객체가 됩니다.

2. 자동차 예시 (속성 vs 기능)

프로그래밍에서 객체는 ‘정보’와 ‘능력’을 동시에 가집니다.

  • 객체 이름: 내 차 (MyCar)
  • 속성 (데이터):
    • 모델명: 아반떼
    • 색상: 흰색
    • 현재 속도: 60km/h
  • 메서드 (동작/기능):
    • 가속하기(): 속도를 높이는 동작
    • 브레이크(): 차를 멈추는 동작

1. 딕셔너리와 객체의 관계

  • 객체(Object): ‘사물’이라는 아주 넓은 개념입니다. (자동차, 강아지, 데이터 묶음 등)
  • 딕셔너리(Dictionary): 그 사물 중에서도 ‘이름표(Key)와 내용물(Value)로 이루어진 명부’ 같은 특정 형태의 자료구조를 말합니다. 

2. 왜 헷갈릴까요? (JavaScript의 영향)

자바스크립트(JS)라는 언어 때문일 가능성이 큽니다.

  • JS에서는 객체를 만들 때 { name: "철수", age: 20 } 같은 형식을 쓰는데, 이게 파이썬의 딕셔너리와 모양이 똑같습니다.
  • 그래서 많은 입문자가 “객체 = {키:값} 묶음 = 딕셔너리”라고 생각하게 됩니다.

3. 차이점 (핵심)

  • 딕셔너리: 단순히 데이터를 담아두는 바구니 역할에 집중합니다. (값들의 모임)
  • 객체: 데이터뿐만 아니라 기능(함수/메서드)까지 포함할 수 있는 더 큰 개념입니다.
    • 예: 딕셔너리는 “이름” 정보만 갖지만, 객체는 “이름” 정보에 더해 “인사하기”라는 행동까지 가질 수 있습니다. 

결론:
자료형 관점에서 딕셔너리는 데이터를 구조화해서 들고 있는 ‘데이터 객체’의 일종입니다.

1. 자바스크립트 객체 (Object) = 딕셔너리?

자바스크립트에서 객체를 만드는 가장 흔한 방법은 { } (중괄호)를 쓰는 것입니다.

javascript

let user = {
  name: "철수",  // 키: 값
  age: 25        // 키: 값
};

코드를 사용할 때는 주의가 필요합니다.

이 구조는 파이썬 같은 언어의 딕셔너리와 완전히 똑같습니다. 그래서 자바스크립트에서 객체는 데이터를 저장하는 ‘사전(Dictionary)’처럼 쓰입니다.

2. 하지만 딕셔너리보다 더 강력합니다

자바스크립트 객체는 단순한 데이터 묶음을 넘어 행동(함수)도 가질 수 있습니다.

javascript

let user = {
  name: "철수",
  sayHello: function() { // 객체 안에 함수(메서드)가 들어감
    console.log("안녕하세요!");
  }
};

user.sayHello(); // "안녕하세요!" 출력 (행동 수행)

코드를 사용할 때는 주의가 필요합니다.

일반적인 딕셔너리가 ‘명부’라면, 자바스크립트 객체는 ‘데이터와 기능을 모두 갖춘 로봇’에 가깝습니다.

3. 진짜 딕셔너리 전용인 Map도 있어요

최신 자바스크립트(ES6+)에는 딕셔너리 기능을 더 전문적으로 수행하는 Map이라는 자료형이 따로 추가되었습니다.

  • 일반 객체 { }: 데이터 + 기능(함수)을 합칠 때 주로 사용
  • Map: 순수하게 ‘키-값’ 쌍으로 데이터를 관리할 때(딕셔너리 용도) 사용

결론:
자바스크립트에서 객체는 딕셔너리처럼 동작하지만, 그 안에 함수(메서드)까지 넣어서 사용할 수 있는 더 확장된 개념이라고 보시면 됩니다.

1. 점 표기법 (Dot Notation)

가장 많이 쓰이고 읽기 편한 방식입니다.

  • 사용법객체명.키이름
  • 특징: 키 이름을 정확히 알고 있을 때 사용합니다.

javascript

let user = {
  name: "철수",
  age: 25
};

console.log(user.name); // "철수"
console.log(user.age);  // 25

코드를 사용할 때는 주의가 필요합니다.

2. 대괄호 표기법 (Bracket Notation)

조금 더 강력하고 유연한 방식입니다.

  • 사용법객체명["키이름"] (키 이름을 문자열로 감싸야 함)
  • 언제 쓰나요?
    1. 키 이름에 공백이나 특수문자가 있을 때 (예: "home address")
    2. 키 이름을 변수에 담아서 동적으로 가져올 때 (매우 중요!)

javascript

let user = {
  name: "철수",
  "home address": "서울"
};

// 1. 공백이 있는 키
// console.log(user.home address); // 에러 발생!
console.log(user["home address"]); // "서울" (정상)

// 2. 변수를 사용해 접근할 때
let keyName = "name";
console.log(user[keyName]); // "철수" (user["name"]과 같음)
console.log(user.keyName);  // undefined (객체에서 'keyName'이라는 글자 그대로의 키를 찾음)

코드를 사용할 때는 주의가 필요합니다.


요약하자면!

  • 보통은 점 표기법(user.name)을 쓰세요. 코드가 깔끔합니다.
  • 하지만 키 이름이 변수에 들어있거나, 이름이 특이(공백 등)할 때는 대괄호 표기법(user[key])을 써야만 합니다.

파이썬에서 객체와 자바스크립트에서 객체가 어떻게 다른지 비교해줘

두 언어 모두 ‘객체 지향’을 지원하지만, 객체를 바라보는 관점과 구현 방식에서 큰 차이가 있습니다. 핵심적인 차이점 3가지를 정리해 드릴게요.

1. 설계도(Class)가 필수인가?

가장 큰 차이는 “설계도 없이 객체를 만들 수 있는가”입니다.

  • 파이썬 (Class 기반): 객체를 만들려면 반드시 클래스(설계도)를 먼저 정의해야 합니다. 클래스라는 틀에서 찍어낸 결과물(인스턴스)이 바로 객체입니다.
  • 자바스크립트 (Prototype 기반): 클래스 없이도 { } (중괄호)만 쓰면 즉석에서 객체를 만들 수 있습니다. 이를 객체 리터럴이라고 부르며, 딕셔너리처럼 자유롭게 생성하고 확장할 수 있습니다.

2. 딕셔너리와 객체의 관계

질문하셨던 ‘딕셔너리’ 개념과 연결되는 부분입니다.

  • 파이썬:객체와 딕셔너리는 서로 다른 자료형입니다.
    • obj.name (객체 속성 접근)과 dict['name'] (딕셔너리 키 접근)은 문법적으로 엄격히 구분됩니다.
  • 자바스크립트:객체 자체가 사실상 딕셔너리(해시 맵) 구조입니다.
    • obj.name과 obj['name']이 같은 대상을 가리키며, 실행 중에 속성을 마음대로 추가하거나 삭제하는 것이 파이썬보다 훨씬 자유롭습니다.

3. 기능(메서드)을 다루는 방식

  • 파이썬: 객체의 메서드는 클래스 내부에 고정되어 정의됩니다. 메서드 호출 시 첫 번째 인자로 항상 self를 명시해야 하는 특징이 있습니다.
  • 자바스크립트: 함수도 하나의 ‘값’이기 때문에, 객체의 속성에 함수를 변수처럼 할당하면 그것이 바로 메서드가 됩니다. 실행 시점에 따라 this가 가리키는 대상이 변할 수 있어 더 유연하지만 복잡하기도 합니다.

요약 비교표

구분파이썬 (Python)자바스크립트 (JS)
기본 철학모든 것은 객체다 (Class 기반)모든 것은 객체다 (Prototype 기반)
생성 방식class 정의 후 호출{ }로 즉석 생성 가능 (리터럴)
딕셔너리와의 관계별개의 자료형으로 구분됨객체가 곧 딕셔너리 역할을 겸함
유연성엄격함 (구조가 정해져 있음)매우 유연함 (동적 속성 추가 빈번)

리터럴(Literal)은 문자 데이터뿐만 아니라, 코드 작성자가 직접 입력한 ‘값’ 그 자체를 의미합니다.

쉽게 말해, 변수에 담기 전의 “가공되지 않은 순수한 값”을 리터럴이라고 부릅니다.

1. 리터럴의 종류 (데이터 타입에 따라)

질문하신 ‘문자 데이터’는 문자열 리터럴에 해당하며, 그 외에도 다양한 종류가 있습니다.

  • 문자열 리터럴"Hello"'JS' (따옴표로 감싼 글자들)
  • 숫자 리터럴103.14 (정수나 실수 값 그 자체)
  • 불리언 리터럴truefalse
  • 객체 리터럴{ name: "철수" } (중괄호를 써서 즉석에서 만든 객체)
  • 배열 리터럴[1, 2, 3] (대괄호를 써서 즉석에서 만든 리스트)

2. 변수 vs 리터럴 (차이점)

  • 변수: 값을 저장하는 ‘이름표(그릇)’입니다.
  • 리터럴: 그 그릇에 담기는 ‘내용물(진짜 값)’입니다.

댓글 남기기