8. 정보 꾸러미 만들기 (객체)/8.1 객체 다루기

8.1.1 정보 꾸러미 만들기 - 객체 리터럴

thejavascript4kids 2025. 7. 9. 02:57

📘 8.1.1 정보 꾸러미 만들기 - 객체 리터럴

어느 오후, 오래된 서랍을 정리하다가 어린 시절의 친구들과 주고받은 편지들을 발견했어요. 각 편지 봉투에는 보낸 사람의 이름, 받는 사람의 이름, 날짜가 적혀 있었죠. 단순히 "철수", "12살", "축구"라고 나열된 것이 아니라, "보낸 사람: 철수", "나이: 12살", "취미: 축구"처럼 각각의 정보가 무엇을 의미하는지 알 수 있게 정리되어 있었어요.

우리가 지금까지 배운 배열은 순서가 중요한 목록들을 다루는 데 완벽했어요. 하지만 때로는 순서보다 이름이 더 중요한 정보들이 있어요. 친구의 이름, 나이, 좋아하는 색깔 같은 것들을 의미 있는 이름으로 정리하고 싶을 때가 있죠. 바로 그런 순간을 위해 객체(Object)라는 새로운 방법이 우리 곁에 있어요.

🧠 새로운 용어들과 친해지기

새로운 개념과 만날 때마다 그 개념이 품고 있는 단어들을 천천히 이해하는 것이 중요해요. 마치 새로운 친구와 만날 때 그 친구의 이름을 기억하려고 노력하는 것처럼요.

용어 쉬운 설명
객체 (Object) 관련있는 정보들을 하나로 묶어서 보관하는 특별한 데이터 저장소예요.
리터럴 (Literal) 객체를 만드는 가장 쉽고 직접적인 방법으로, 코드에 바로 써서 만드는 것이에요.
속성 (Property) 객체 안에 들어있는 각각의 정보 조각들을 의미해요.
키 (Key) 각 속성의 이름 부분으로, 정보를 찾을 때 사용하는 이름표 역할을 해요.
값 (Value) 각 속성에 실제로 저장되어 있는 데이터예요.

객체는 영어로 "Object"인데, 이는 "물건"이라는 뜻이에요. 실제로 객체는 현실 세계의 물건이나 사람을 컴퓨터에서 표현하는 자연스러운 방법이랍니다.

✨ 객체의 핵심 개념

객체는 프로그래밍에서 현실 세계를 표현하는 아름다운 도구예요. 배열이 순서대로 나열된 목록이라면, 객체는 의미 있는 이름으로 정리된 정보의 집합이에요.

객체의 가장 아름다운 특징은 키-값 쌍(Key-Value Pair)으로 정보를 저장한다는 것이에요. 마치 사전에서 단어(키)를 찾으면 뜻(값)이 나오는 것처럼, 객체에서도 속성 이름(키)을 사용해서 저장된 정보(값)를 찾을 수 있어요.

배열과 다른 점은 순서가 중요하지 않다는 거예요. 배열에서는 0번째, 1번째 같은 위치가 중요했지만, 객체에서는 이름이 중요해요. student.name, student.age 처럼 의미 있는 이름으로 정보에 접근할 수 있답니다.

또한 객체는 다양한 종류의 데이터를 함께 담을 수 있어요. 숫자, 문자열, 불린값, 심지어 배열이나 다른 객체까지도 하나의 객체 안에 자연스럽게 어우러져 존재할 수 있어요.

재미있는 이야기: 친구 소개 카드

객체를 더 친근하게 이해하기 위해 하나의 이야기를 들려드릴게요.

새 학기가 시작되어 새로운 친구를 소개해야 하는 상황을 상상해보세요. 단순히 "철수, 12살, 축구"라고 순서대로 말하면 헷갈리기 쉽죠. 대신 이렇게 소개하면 어떨까요?

이름: 김철수
나이: 12살
취미: 축구
좋아하는 색깔: 파란색

이렇게 각 정보마다 이름표가 붙어있으면 훨씬 이해하기 쉽고, 나중에 "철수의 취미가 뭐였지?"라고 물어볼 때도 쉽게 찾을 수 있어요.

객체는 바로 이런 이름표가 붙은 정보 카드와 같아요. 각 정보에 의미 있는 이름을 붙여서 저장하고, 나중에 그 이름으로 자연스럽게 찾을 수 있게 해주는 거예요.

심지어 "친구들: [영희, 민수, 지영]"처럼 친구 목록까지 카드에 포함시킬 수 있어서, 한 장의 카드에 그 사람에 대한 모든 정보를 담을 수 있답니다.

🎯 객체를 사용하는 이유

객체를 사용하는 이유들을 생각해보면, 우리의 일상과 참 많이 닮아있어요.

가장 기본적으로는 관련있는 정보들을 하나로 묶어서 관리할 때 사용해요. 학생의 정보, 책의 정보, 게임 캐릭터의 정보처럼 여러 속성을 가진 것들을 표현할 때 객체만큼 적합한 도구는 없어요. 마치 한 사람에 대한 모든 정보를 하나의 명함에 정리해두는 것처럼요.

의미 있는 이름으로 접근할 수 있다는 점도 큰 장점이에요. 배열에서 student[0], student[1] 같은 숫자로 접근하는 것보다 student.name, student.age 같은 의미 있는 이름으로 접근하는 것이 훨씬 자연스럽고 이해하기 쉽죠.

복잡한 데이터 구조를 표현할 때도 객체가 필수적이에요. 실제 웹사이트나 앱에서 사용자 정보, 상품 정보, 게시글 정보 등은 모두 객체 형태로 저장되고 관리돼요.

또한 코드의 가독성을 높여줘요. 코드를 읽는 사람이 각 데이터가 무엇을 의미하는지 쉽게 알 수 있어서, 팀워크와 협업에도 큰 도움이 되어요.

⚙️ 기본 사용법 살펴보기

객체 리터럴의 기본 사용법은 매우 직관적이고 자연스러워요.

// 기본 형태
let 객체이름 = {
    키1: 값1,
    키2: 값2,
    키3: 값3
};

// 실제 예시
let student = {
    name: "김철수",
    age: 12,
    grade: 6,
    hobby: "축구"
};

중요한 규칙들:

  • 중괄호 {}: 객체의 시작과 끝을 표시
  • 키: 값: 콜론(:)으로 이름과 값을 연결
  • 쉼표 ,: 여러 속성을 구분할 때 사용
  • 따옴표: 키 이름은 보통 따옴표 없이 사용 (특수한 경우만 필요)

접근 방법:

let fruit = {
    name: "사과",
    color: "빨간색",
    price: 1000
};

// 점 표기법으로 접근
console.log(fruit.name);    // "사과"
console.log(fruit.color);   // "빨간색"
console.log(fruit.price);   // 1000

🧪 실습으로 익혀보기

이제 실제 실습을 통해 객체 리터럴의 다양한 사용법을 천천히 경험해보겠어요. 각각의 실습은 우리가 실제로 마주할 수 있는 상황들이에요.

🔹 실습 1: 나만의 캐릭터 카드 만들기

첫 번째 실습에서는 게임 캐릭터의 정보를 객체로 만들어보는 과정을 통해 객체의 기본 사용법을 알아보겠어요.

실습1) 내가 좋아하는 게임 캐릭터 "정보 카드 만들기"를 해보자

// 내가 좋아하는 게임 캐릭터 정보를 객체로 만들어봅시다
let myCharacter = {
    name: "용감한 기사",
    level: 15,
    health: 100,
    weapon: "번개 검",
    isAlive: true
};

// 캐릭터 정보를 하나씩 확인해봅시다
console.log("=== 내 캐릭터 정보 ===");
console.log("이름:", myCharacter.name);
console.log("레벨:", myCharacter.level);
console.log("체력:", myCharacter.health);
console.log("무기:", myCharacter.weapon);
console.log("생존 여부:", myCharacter.isAlive);

// 객체 전체를 한 번에 보기
console.log("\n전체 캐릭터 정보:", myCharacter);

// 객체가 어떤 타입인지 확인해봅시다
console.log("myCharacter의 타입:", typeof myCharacter);  // "object"

// 캐릭터 상태에 따른 메시지 출력
if (myCharacter.isAlive) {
    console.log(myCharacter.name + "는 아직 살아있어요!");
} else {
    console.log(myCharacter.name + "는 쓰러졌어요...");
}

// 레벨이 높은지 확인해보기
if (myCharacter.level >= 10) {
    console.log("고레벨 캐릭터네요! 👑");
} else {
    console.log("아직 초보 캐릭터예요! 💪");
}

이 실습을 통해 객체가 어떻게 여러 종류의 정보를 하나로 묶어서 관리하는지, 그리고 의미 있는 이름으로 각 정보에 접근하는 방법을 이해할 수 있어요.

🔹 실습 2: 우리 반 친구 소개하기

이번 실습에서는 친구의 다양한 정보를 객체에 담고, 배열까지 포함해서 더 복잡한 객체를 만들어보겠어요.

실습2) 우리 반 단짝 친구 "상세 정보 카드 만들기"를 해보자

// 우리 반 친구 정보를 자세하게 만들어봅시다
let bestFriend = {
    name: "박영희",
    age: 11,
    grade: 5,
    favoriteSubjects: ["수학", "과학", "미술"],  // 배열도 넣을 수 있어요!
    hasGlasses: false,
    favoriteColor: "보라색",
    petCount: 2
};

// 친구 소개 시작!
console.log("=== 내 단짝 친구 소개 ===");
console.log("이름: " + bestFriend.name);
console.log("나이: " + bestFriend.age + "살");
console.log("학년: " + bestFriend.grade + "학년");

// 안경 착용 여부 확인
if (bestFriend.hasGlasses) {
    console.log("안경을 쓰고 있어요! 👓");
} else {
    console.log("안경을 쓰지 않아요!");
}

console.log("좋아하는 색깔: " + bestFriend.favoriteColor);
console.log("키우는 동물 수: " + bestFriend.petCount + "마리");

// 좋아하는 과목들 하나씩 출력해보기
console.log("\n좋아하는 과목들:");
for (let i = 0; i < bestFriend.favoriteSubjects.length; i++) {
    console.log((i + 1) + ". " + bestFriend.favoriteSubjects[i]);
}

// 친구에 대한 종합 평가
console.log("\n=== 친구 정보 요약 ===");
console.log(bestFriend.name + "는 " + bestFriend.age + "살이고,");
console.log(bestFriend.favoriteSubjects.length + "개의 과목을 좋아하며,");
console.log(bestFriend.petCount + "마리의 동물을 키우는 친구예요!");

이 실습을 통해 객체 안에 배열을 포함시키는 방법과, 객체의 속성을 활용한 복합적인 작업을 이해할 수 있어요.

🔹 실습 3: 빈 상자에서 시작해서 하나씩 채우기

세 번째 실습에서는 빈 객체를 만들고 나중에 속성을 하나씩 추가하는 방법을 알아보겠어요.

실습3) 빈 수집 상자에서 "하나씩 정보 채우기"를 해보자

// 처음에는 빈 수집 상자를 만들어봅시다
let collectionBox = {};

// 빈 상자 확인하기
console.log("처음 수집 상자:", collectionBox);  // {}

// 상자가 비어있는지 확인하는 간단한 방법
let isEmpty = true;
for (let key in collectionBox) {
    isEmpty = false;
    break;
}
console.log("상자가 비어있나요?", isEmpty);  // true

console.log("\n=== 수집품을 하나씩 넣어봅시다 ===");

// 첫 번째 수집품 추가
collectionBox.stamps = 50;
console.log("우표 추가 후:", collectionBox);

// 두 번째 수집품 추가
collectionBox.favoriteCoin = "한국 500원 동전";
console.log("동전 추가 후:", collectionBox);

// 세 번째 수집품 추가
collectionBox.isOrganized = false;
console.log("정리 상태 추가 후:", collectionBox);

// 네 번째 수집품 추가 (배열)
collectionBox.books = ["해리포터", "아르센 뤼팽", "셜록홈즈"];
console.log("책들 추가 후:", collectionBox);

// 최종 수집 상자 확인
console.log("\n=== 최종 수집 상자 내용 ===");
console.log("우표 개수:", collectionBox.stamps + "개");
console.log("특별한 동전:", collectionBox.favoriteCoin);
console.log("상자가 정리되어 있나요?", collectionBox.isOrganized ? "네" : "아니요");

console.log("보유한 책들:");
for(let i = 0; i < collectionBox.books.length; i++) {
    console.log("  " + (i + 1) + ". " + collectionBox.books[i]);
}

// 수집품의 총 가치 계산해보기
let totalValue = collectionBox.stamps * 10;  // 우표 1개 = 10원
console.log("\n수집 상자의 총 가치: " + totalValue + "원");

// 새로운 수집품 추가하기
collectionBox.specialItem = "한정판 카드";
console.log("특별 아이템 추가:", collectionBox.specialItem);

console.log("\n최종 완성된 수집 상자:", collectionBox);

이 실습을 통해 빈 객체에서 시작해서 동적으로 속성을 추가하는 방법과, 객체의 속성값을 활용한 계산을 이해할 수 있어요.

🧠 자주 하는 실수와 조심할 점

새로운 도구를 배울 때는 자주 하는 실수들을 미리 알아두는 것이 도움이 되어요. 실수는 배움의 일부이지만, 미리 알고 있으면 더 부드럽게 배울 수 있어요.

❌ 실수 1: 콜론(:)과 등호(=) 헷갈리기

가장 흔한 실수 중 하나는 객체 안에서 키와 값을 연결할 때 등호를 사용하는 거예요.

// ❌ 잘못된 예: 등호 사용
let wrongStudent = {
    name = "철수",  // 오류 발생!
    age = 12
};

// ✅ 올바른 예: 콜론 사용
let correctStudent = {
    name: "철수",
    age: 12
};

❌ 실수 2: 속성명에 특수문자나 공백 사용할 때 따옴표 빼먹기

두 번째 실수는 속성명에 특수문자가 들어갈 때 따옴표를 빼먹는 거예요.

// ❌ 잘못된 예: 공백이 있는 키에 따옴표 없음
let wrongData = {
    first name: "영희",  // 오류 발생!
    phone-number: "010-1234-5678"  // 오류 발생!
};

// ✅ 올바른 예: 특수문자나 공백이 있을 때는 따옴표 사용
let correctData = {
    "first name": "영희",
    "phone-number": "010-1234-5678"
};

❌ 실수 3: 배열과 객체 접근 방법 헷갈리기

세 번째 실수는 배열과 객체의 접근 방법을 헷갈리는 거예요.

let fruits = ["사과", "바나나"];  // 배열
let person = {name: "철수", age: 12};  // 객체

// ❌ 잘못된 접근
console.log(fruits.0);     // 오류! 배열은 점 표기법으로 숫자 인덱스 접근 불가
console.log(person[name]); // 오류! 객체의 키에 따옴표 없음

// ✅ 올바른 접근
console.log(fruits[0]);      // "사과" (배열은 대괄호와 인덱스)
console.log(person.name);    // "철수" (객체는 점 표기법)
console.log(person["name"]); // "철수" (객체는 대괄호와 문자열도 가능)

💪 보너스 문제: 좀 더 어려운 객체 다루기

더 깊이 있는 이해를 원하는 여러분을 위해 조금 더 도전적인 문제를 준비했어요. 기본 내용을 모두 이해한 후에 도전해보세요.

Q1. 중첩 객체 만들어보기 (객체 안에 객체 넣기)

let school = {
    name: "행복초등학교",
    location: "서울",
    student: {
        name: "김철수",
        grade: 5,
        class: 2
    }
};

console.log("학교 이름:", school.name);
console.log("학생 이름:", school.student.name);
console.log("학생 학급:", school.student.grade + "학년 " + school.student.class + "반");

이 보너스 문제는 객체 안에 또 다른 객체를 넣는 고급 활용법이에요.

✏️ 연습문제로 실력 기르기

이제 배운 내용들을 연습문제를 통해 우리의 마음과 손에 익혀보겠어요. 연습은 이해를 더욱 깊게 만들고, 실제로 사용할 수 있는 능력으로 바꾸어주는 소중한 과정이에요.

Q1. 좋아하는 책 정보를 담은 객체를 만들어보세요.

// 좋아하는 책 정보 객체 만들기
let favoriteBook = {
    title: "해리포터와 마법사의 돌",
    author: "J.K. 롤링",
    pages: 320,
    isRead: true
};

// 책 정보 출력하기
console.log("책 제목:", favoriteBook.title);
console.log("저자:", favoriteBook.author);
console.log("페이지 수:", favoriteBook.pages);
console.log("읽었나요?", favoriteBook.isRead ? "네" : "아니요");

Q2. 빈 객체를 만들고 애완동물 정보를 하나씩 추가해보세요.

// 빈 객체에서 시작하기
let myPet = {};

// 정보 하나씩 추가하기
myPet.name = "멍멍이";
myPet.type = "강아지";
myPet.age = 3;
myPet.isHappy = true;

// 결과 확인하기
console.log("애완동물 정보:", myPet);
console.log("이름:", myPet.name);
console.log("종류:", myPet.type);

Q3. 여러 타입의 데이터를 포함한 음식 객체를 만들어보세요.

// 다양한 타입이 포함된 음식 객체
let favoriteFood = {
    name: "피자",
    price: 20000,
    isDelicious: true,
    ingredients: ["치즈", "토마토소스", "페퍼로니"],
    rating: 4.5
};

// 음식 정보 확인하기
console.log("음식 이름:", favoriteFood.name);
console.log("가격:", favoriteFood.price + "원");
console.log("맛있나요?", favoriteFood.isDelicious);
console.log("재료 개수:", favoriteFood.ingredients.length + "개");
console.log("평점:", favoriteFood.rating + "점");

🔄 복습하기: 지난 시간에 배운 length 속성

이전 단원에서 배운 length 속성을 간단히 복습해볼까요?

복습 문제: 객체와 배열의 length를 함께 사용해서 "학급 정보 시스템" 만들기

let classInfo = {
    className: "5학년 2반",
    teacher: "김선생님",
    students: ["철수", "영희", "민수", "지영", "현우"],
    subjects: ["국어", "수학", "과학", "사회"]
};

console.log("📚 학급 정보 시스템");

// 기본 정보 출력
console.log("\n=== 기본 정보 ===");
console.log("반 이름:", classInfo.className);
console.log("담임 선생님:", classInfo.teacher);

// 배열의 length 속성 활용하기
console.log("\n=== 통계 정보 ===");
console.log("총 학생 수:", classInfo.students.length + "명");
console.log("총 과목 수:", classInfo.subjects.length + "개");

// 학생 명단 출력 (배열 + length 활용)
console.log("\n=== 학생 명단 ===");
for(let i = 0; i < classInfo.students.length; i++) {
    console.log((i + 1) + "번: " + classInfo.students[i]);
}

// 과목 목록 출력
console.log("\n=== 과목 목록 ===");
for(let i = 0; i < classInfo.subjects.length; i++) {
    console.log("- " + classInfo.subjects[i]);
}

console.log("\n🎯 결론: 객체 안의 배열도 length로 크기를 확인할 수 있어요!");

정답 설명: 객체 안에 배열을 넣고, 그 배열의 length 속성을 사용해서 개수를 확인하고 반복 작업을 할 수 있어요. 객체와 배열을 조합하면 더 복잡하고 유용한 데이터 구조를 만들 수 있답니다.

지금까지 객체 리터럴을 사용해서 정보를 체계적이고 의미 있게 저장하는 방법을 자세히 알아보았어요. 이제 여러분은 배열과 객체를 모두 자유자재로 조합해서 현실 세계의 복잡한 정보를 컴퓨터에서 표현할 수 있게 되었어요. 마치 숙련된 정보 관리자가 된 것처럼, 각종 데이터를 체계적으로 분류하고 관리할 수 있는 능력을 갖추게 된 것이랍니다.

✅ 학습 완료 체크리스트

우리가 오늘 함께 걸어온 길을 돌아보며, 각각의 내용을 마음속에 잘 정리했는지 확인해보세요.

학습 내용 이해했나요?
객체의 기본 개념
기본 사용법과 문법
주요 특징과 차이점
자주 하는 실수들
실전 예제 이해
배열과 객체 조합

🔄 단계별 진행 과정 정리

지금까지 배운 내용을 단계별로 다시 한번 정리해볼게요.

1단계: 1) 중괄호로 객체 시작 → 2) 키: 값 형태로 속성 추가 → 3) 쉼표로 속성 구분 → 4) 객체 완성 → 5) 점 표기법으로 속성 접근

2단계: 1) 객체 생성 시작 → 2) 문자열, 숫자, 불린, 배열 등 다양한 타입 저장 → 3) 각 속성에 맞는 타입으로 값 할당 → 4) 객체 완성 → 5) 각 타입별로 접근 방법 확인

3단계: 1) 빈 객체 {} 생성 → 2) 점 표기법으로 속성 추가 → 3) 각 속성에 값 할당 → 4) 추가된 속성들 확인 → 5) 완성된 객체 확인

📂 마무리 정보

오늘 우리가 함께 배운 8.1.1의 내용이 여러분의 마음속 지식 정원에 잘 심어졌기를 바라요. 다음 시간에는 객체의 속성에 접근하고 수정하는 더 고급 기능들을 배워볼 거예요.

기억할 점: 오늘 배운 내용을 꼭 연습해보시고, 궁금한 점이 있으면 언제든 다시 돌아와서 읽어보세요. 그것이 바로 진정한 학습이 일어나는 방식이니까요.



🚀 더 체계적인 JavaScript 학습을 원하신다면?
이 포스팅에서 다룬 내용을 실제로 실습해보세요!
무료 JavaScript 학습 플랫폼에서 단계별 학습과 실시간 코드 실행을 통해
더욱 효과적이고 재미있게 학습하실 수 있습니다.
📝 실시간 코드 실행 📊 학습 진도 관리 👥 체계적 커리큘럼
📚 171개 체계적 학습레슨 · 📋 855개 4지선다 연습문제 · 🆓 완전 무료 · ⚡ 즉시 시작