📘 15.2.1 new
- 클래스 설계도로 진짜 물건 만들기
여러분, 안녕하세요. 지난 시간에 우리는 클래스라는 물건을 만드는 설계도를 배웠어요. 하지만 아무리 멋진 설계도가 있어도, 실제로 만들어보지 않으면 사용할 수 없겠죠? 마치 로봇 설계도가 있어도 실제 로봇을 만들어야 갖고 놀 수 있는 것처럼요.
오늘은 그 설계도를 가지고 정말로 살아 움직이는 물건들을 하나씩 만들어내는 특별한 방법을 배워볼 거예요. 바로 new
라는 특별한 키워드예요. 이 작은 단어가 만들어내는 일들을 보면 참으로 신기하답니다.
🧠 새로운 단어들과 친해지기
물건을 만들 때 자주 쓰이는 단어들을 쉽게 풀어서 알아보겠어요.
단어 | 쉬운 설명 |
---|---|
new | 클래스 설계도를 보고 진짜 물건을 만들어주는 특별한 키워드예요 |
진짜 물건 만들기 | 설계도를 보고 실제로 사용할 수 있는 물건을 만드는 과정이에요 |
물건 찾기 주소 | 만들어진 물건이 컴퓨터 안 어디에 있는지 가리키는 표시예요 |
독립성 | 각 물건이 서로 다른 곳에 있어서 영향을 주지 않는 특성이에요 |
new
는 영어로 "새로운"이라는 뜻이에요. 마치 새로운 장난감을 하나 만들어달라고 하는 것과 같아요.
✨ new
키워드가 뭔지 알아보기
new
키워드는 컴퓨터 안에서 물건 만드는 공장의 생산 버튼 같은 역할을 해요. 우리가 만든 클래스 설계도를 보고, 실제로 만질 수 있고 사용할 수 있는 완성품을 뚝딱 만들어주는 신기한 도구랍니다.
new
를 사용하면 컴퓨터가 정말 체계적으로 일을 해요. 먼저 컴퓨터 메모리에 새로운 빈 공간을 하나 마련해요. 그 공간에 클래스에서 정의한 대로 물건의 특징들과 기능들을 차곡차곡 넣어줍니다.
그다음 constructor
라는 초기 설정 도우미를 자동으로 실행해서 물건을 완전히 완성해요. 마지막에 완성된 물건을 우리에게 돌려준답니다.
가장 신기한 점은 같은 설계도로 만든 물건들이 모두 각자 독립적이라는 거예요. 마치 같은 틀로 쿠키를 여러 개 구워도 각각의 쿠키가 서로 다른 접시에 올려지는 것처럼, 하나의 물건을 바꿔도 다른 물건들에게는 전혀 영향을 주지 않아요.
재미있는 비유: 자동차 공장의 생산 라인
new
키워드를 '자동차 공장의 생산 라인'에 비유해볼게요.
여러분이 현대자동차 공장에 견학을 갔다고 상상해보세요. 공장에는 정말 신기한 자동차 생산 라인이 하나 있고, 컴퓨터에는 여러 가지 자동차 설계 도면들이 저장되어 있어요.
공장장님이 "소나타 자동차 하나 만들어줘!"라고 하면서 '생산 시작' 버튼을 누르면 어떤 일이 일어날까요?
생산 라인은 먼저 빈 차체를 준비해요. 설계 도면을 읽어서 엔진을 달고, 바퀴를 끼우고 시트를 설치해서 완성된 소나타를 만들어줍니다.
정말 신기한 건 같은 설계 도면으로 여러 번 만들어도 각각의 자동차가 모두 완전히 별개라는 거예요. 첫 번째 자동차의 색깔을 바꿔도 두 번째 자동차는 그대로이고, 각각 다른 차주에게 팔려 다른 곳으로 갈 수 있어요.
new
키워드도 똑같은 자동차 생산 라인이에요. 클래스라는 설계 도면을 읽어서, 실제로 만질 수 있고 사용할 수 있는 진짜 물건을 하나씩 만들어주는 거랍니다.
🎯 왜 new
키워드를 배워야 할까요?
new
키워드를 배우는 이유는 정말 실용적이에요.
첫 번째로 클래스를 실제로 사용할 수 있게 돼요. 아무리 완벽한 자동차 설계도가 있어도 실제 자동차를 만들지 않으면 타고 다닐 수 없듯이, 클래스도 new
로 물건을 만들어야 진짜 유용한 프로그램이 됩니다.
두 번째로 같은 종류의 여러 물건을 쉽게 관리할 수 있어요. 게임에서 몬스터 100마리, 아이템 50개를 만들어야 한다면? new
를 사용해서 필요한 만큼 똑똑하게 생성할 수 있어요.
세 번째로 컴퓨터 메모리를 안전하게 사용할 수 있어요. 각 물건이 독립적인 공간을 가지기 때문에 서로 방해하지 않고, 필요없어진 물건은 자동으로 정리되어 컴퓨터가 깔끔하게 유지되요.
⚙️ 기본 사용법 배우기
new
키워드의 사용법은 의외로 간단해요. 이렇게 생겼어요:
기본 형태:
let 내물건 = new 클래스이름();
정보와 함께 만들기:
let 내물건 = new 클래스이름(정보1, 정보2);
여러 물건을 연속으로 만들기:
let 물건1 = new 클래스이름();
let 물건2 = new 클래스이름();
let 물건3 = new 클래스이름();
실제 예시:
class Dog {
constructor(name, breed) {
this.name = name;
this.breed = breed;
}
}
let myDog = new Dog("멍멍이", "진돗개");
let yourDog = new Dog("바둑이", "시바견");
여기서 중요한 건 new
다음에 오는 클래스 이름 뒤에 반드시 괄호 ()
를 써야 한다는 점이에요. 정보가 없어도 빈 괄호는 꼭 필요해요.
🧪 직접 해보면서 배우기
이제 실제 예시를 통해서 new
키워드가 어떻게 동작하는지 함께 살펴볼게요.
🔹 첫 번째 예시: new의 기본 동작 이해하기
첫 번째로는 new
키워드가 어떤 과정을 거쳐서 물건을 만드는지 확인해보겠습니다.
// 간단한 자동차 클래스 만들기
class Car {
constructor(color, brand) {
this.color = color;
this.brand = brand;
this.speed = 0;
console.log(`${color} ${brand} 자동차가 만들어졌어요!`);
}
// 자동차가 달릴 수 있는 기능
drive() {
this.speed = this.speed + 10;
console.log(`${this.brand} 자동차가 ${this.speed}km/h로 달려요!`);
}
}
// new 키워드로 여러 자동차 만들기
console.log("=== 자동차 만들기 공장 ===");
let car1 = new Car("빨강", "현대"); // 빨강 현대 자동차가 만들어졌어요!
let car2 = new Car("파랑", "기아"); // 파랑 기아 자동차가 만들어졌어요!
let car3 = new Car("노랑", "삼성"); // 노랑 삼성 자동차가 만들어졌어요!
// 각 자동차는 독립적으로 움직여요
console.log("\n=== 각 자동차 따로따로 테스트 ===");
car1.drive(); // 현대 자동차가 10km/h로 달려요!
car2.drive(); // 기아 자동차가 10km/h로 달려요!
console.log("car1 속도:", car1.speed); // 10
console.log("car2 속도:", car2.speed); // 10
console.log("car3 속도:", car3.speed); // 0 (아직 안 움직임)
이 과정을 차근차근 설명해드릴게요. new Car(...)
를 부를 때마다 새로운 자동차가 하나씩 만들어져요. 각 자동차는 자신만의 색깔과 브랜드를 가지고, drive()
기능을 사용해도 다른 자동차에게는 전혀 영향을 주지 않아요. 마치 각자 다른 장난감 자동차를 가지고 노는 것과 같아요.
🔹 두 번째 예시: 물건들이 독립적으로 동작하는지 확인하기
두 번째로는 같은 설계도로 만든 여러 물건이 어떻게 독립적으로 동작하는지 확인해보겠습니다.
// 학생 클래스 만들기
class Student {
constructor(name, grade = 1) {
this.name = name;
this.grade = grade;
this.subjects = []; // 공부하는 과목들을 담을 바구니
this.totalScore = 0; // 총 점수
}
// 과목 점수를 추가하는 기능
addSubject(subject, score) {
this.subjects.push(subject);
this.totalScore = this.totalScore + score;
console.log(`${this.name}: ${subject} 과목 ${score}점 추가!`);
}
// 평균 점수를 계산하는 기능
getAverage() {
if (this.subjects.length === 0) return 0;
return this.totalScore / this.subjects.length;
}
// 학생 정보를 보여주는 기능
showInfo() {
console.log(`=== ${this.name} 학생 정보 ===`);
console.log(`학년: ${this.grade}`);
console.log(`과목 수: ${this.subjects.length}`);
console.log(`평균 점수: ${this.getAverage().toFixed(1)}`);
}
}
// 여러 학생 만들어보기
let student1 = new Student("철수", 3);
let student2 = new Student("영희", 4);
let student3 = new Student("민수"); // 기본 학년 사용
// 각 학생에게 서로 다른 과목 점수 주기
student1.addSubject("수학", 85); // 철수: 수학 과목 85점 추가!
student1.addSubject("국어", 90); // 철수: 국어 과목 90점 추가!
student2.addSubject("영어", 95); // 영희: 영어 과목 95점 추가!
student2.addSubject("과학", 88); // 영희: 과학 과목 88점 추가!
student3.addSubject("미술", 100); // 민수: 미술 과목 100점 추가!
// 각 학생 정보는 독립적으로 관리돼요
console.log("\n=== 각 학생 정보 확인 ===");
student1.showInfo();
student2.showInfo();
student3.showInfo();
// 정말로 독립적인지 확인해보기
console.log("\n=== 독립성 확인 ===");
console.log("student1과 student2가 같은 물건인가요?", student1 === student2); // false
이 예시를 통해 각 학생이 완전히 독립적으로 관리되는 것을 확인할 수 있어요. 한 학생의 성적을 바꿔도 다른 학생들에게는 전혀 영향을 주지 않는답니다.
🔹 세 번째 예시: new 없이 부르면 어떻게 될까?
세 번째로는 new
키워드를 사용하지 않았을 때 어떤 문제가 생기는지 확인해보겠습니다.
// 계산기 클래스 만들기
class Calculator {
constructor(name = "계산기") {
this.name = name;
this.result = 0; // 계산 결과
this.operations = []; // 계산 과정 기록
}
// 더하기 기능
add(number) {
this.result = this.result + number;
this.operations.push(`+${number}`);
return this; // 연속으로 계산할 수 있게 자기 자신을 돌려줘요
}
// 빼기 기능
subtract(number) {
this.result = this.result - number;
this.operations.push(`-${number}`);
return this;
}
// 결과를 보여주는 기능
getResult() {
console.log(`${this.name} 결과: ${this.result}`);
console.log(`계산 과정: ${this.operations.join(' ')}`);
return this.result;
}
}
// 올바른 방법 - new 사용하기
console.log("=== 올바른 방법 ===");
let calc1 = new Calculator("첫 번째 계산기");
let calc2 = new Calculator("두 번째 계산기");
calc1.add(10).subtract(3).add(5); // 10 + (-3) + 5 = 12
calc2.add(20).subtract(8); // 20 + (-8) = 12
calc1.getResult(); // 첫 번째 계산기 결과: 12
calc2.getResult(); // 두 번째 계산기 결과: 12
// 잘못된 방법 - new 없이 부르기 (에러 발생해요!)
console.log("\n=== 잘못된 방법 ===");
try {
let wrongCalc = Calculator("잘못된 계산기"); // new가 없어요!
} catch (error) {
console.log("에러가 났어요:", error.message);
console.log("해결법: 반드시 new 키워드와 함께 사용하세요!");
}
// 올바르게 만들어진 물건인지 확인하는 방법
console.log("\n=== 물건 종류 확인 ===");
console.log("calc1이 Calculator로 만든 물건인가요?", calc1 instanceof Calculator); // true
이 예시에서 보듯이 클래스는 반드시 new
키워드와 함께 사용해야 정상적인 물건이 만들어져요. instanceof
라는 특별한 확인 도구를 사용하면 물건이 어떤 클래스로 만들어졌는지 확인할 수 있어요.
🔄 new
키워드 사용 순서 정리하기
지금까지 배운 new
키워드 사용 과정을 차근차근 정리해보겠습니다.
첫 번째 단계는 new 키워드 사용하기입니다. new 클래스이름()
형태로 물건 만들기 명령을 내리는 것이죠.
두 번째 단계는 빈 물건 만들기입니다. 컴퓨터가 메모리에 새로운 빈 공간을 마련하고 기본 물건 틀을 만들어요.
세 번째 단계는 this 연결하기입니다. 만들어진 빈 물건을 클래스의 this
에 연결해서 기능들이 올바른 물건을 다룰 수 있게 해요.
네 번째 단계는 constructor 실행하기입니다. 클래스에서 정의한 constructor
도우미가 자동으로 실행되어 물건을 완전히 준비해줍니다.
마지막으로 다섯 번째 단계는 완성된 물건 돌려주기입니다. 모든 준비가 끝난 물건을 변수에 담아서 사용할 수 있게 돌려줍니다.
🔄 14단원 복습: 배열 메서드 되돌아보기
15단원을 배우기 전에 14단원에서 배운 고급 배열 메서드를 복습해볼까요?
복습 문제 1: sort로 정렬하고 find로 찾기
// 학생들의 점수를 정렬하고 특정 점수를 찾아보세요.
let studentScores = [
{ name: "철수", score: 85 },
{ name: "영희", score: 92 },
{ name: "민수", score: 78 },
{ name: "지은", score: 96 },
{ name: "현우", score: 89 }
];
// 점수 높은 순서로 정렬
let sortedStudents = [...studentScores].sort(function(a, b) {
return b.score - a.score; // 높은 점수부터
});
console.log("점수 순 정렬:");
sortedStudents.forEach(function(student, index) {
console.log(`${index + 1}위: ${student.name} (${student.score}점)`);
});
// 90점 이상인 첫 번째 학생 찾기
let excellentStudent = studentScores.find(function(student) {
return student.score >= 90;
});
console.log("90점 이상 첫 번째 학생:", excellentStudent.name);
sort는 배열을 원하는 순서로 정렬해주고, find는 조건을 만족하는 첫 번째 요소를 찾아주는 기능이에요.
복습 문제 2: filter와 map으로 데이터 처리하기
// 성적 데이터를 가공해보세요.
let allScores = [88, 76, 92, 84, 95, 69, 78, 91];
// 80점 이상만 필터링
let goodScores = allScores.filter(function(score) {
return score >= 80;
});
// 각 점수에 등급 추가
let scoresWithGrade = goodScores.map(function(score) {
let grade;
if (score >= 90) grade = "A";
else if (score >= 80) grade = "B";
else grade = "C";
return {
score: score,
grade: grade
};
});
console.log("원본 점수:", allScores);
console.log("80점 이상:", goodScores);
console.log("등급 포함:");
scoresWithGrade.forEach(function(item) {
console.log(`${item.score}점 → ${item.grade}등급`);
});
filter는 조건에 맞는 것만 골라내고, map은 모든 요소를 변환해서 새로운 배열을 만들어주는 기능이에요.
🧠 자주 하는 실수와 주의할 점
new
키워드를 사용할 때 초보자들이 자주 하는 실수들을 미리 알아두면 더 안전한 코딩을 할 수 있어요.
❌ 실수 1: new 없이 클래스 부르기
// 클래스 만들기
class Person {
constructor(name) {
this.name = name;
}
greet() {
console.log(`안녕하세요, ${this.name}입니다!`);
}
}
// 잘못된 사용 - new 없이 부르기
try {
let wrongPerson = Person("철수"); // 에러가 나요!
} catch (error) {
console.log("에러:", error.message);
}
// 올바른 사용 - new와 함께 부르기
let correctPerson = new Person("영희");
correctPerson.greet(); // 안녕하세요, 영희입니다!
클래스는 설계도일 뿐이고, 실제 물건을 만들려면 반드시 new
키워드가 필요해요. 이를 잊으면 컴퓨터가 "이건 물건이 아니야!"라고 에러를 내뿜어요.
❌ 실수 2: 괄호 () 빼먹기
class Animal {
constructor(type = "동물") {
this.type = type;
}
}
// 이렇게 해도 때로는 작동하지만 좋지 않아요
let wrongAnimal = new Animal; // 괄호 없음
// 올바른 방법 - 항상 괄호 포함하기
let correctAnimal = new Animal();
let dog = new Animal("강아지");
괄호가 없어도 때로는 작동하지만, 항상 괄호를 써주는 것이 명확하고 일관성 있는 코드를 만드는 방법이에요.
❌ 실수 3: 물건들이 같다고 생각하기
class Counter {
constructor() {
this.count = 0;
}
increment() {
this.count = this.count + 1;
console.log(`숫자 세기: ${this.count}`);
}
}
// 두 개의 독립적인 숫자 세기 도구 만들기
let counter1 = new Counter();
let counter2 = new Counter();
// 각각 독립적으로 작동해요
counter1.increment(); // 숫자 세기: 1
counter1.increment(); // 숫자 세기: 2
counter2.increment(); // 숫자 세기: 1 (counter2는 독립적이에요)
// 서로 다른 물건임을 확인하기
console.log("같은 물건인가요?", counter1 === counter2); // false
new
로 만들 때마다 완전히 새로운 물건이 만들어져요. 같은 클래스로 만들어졌더라도 서로 다른 존재랍니다.
연습문제 시작 전 잠깐, 생각해보니.
코드를 쓰다 보면 이상한 일들이 참 많이 일어나요. 분명히 같은 클래스로 만든 물건들인데, 하나가 바뀌어도 다른 것은 그대로 있다니요. 처음에는 이상했지만, 지금 생각해보니 정말 좋은 일이에요. 각자의 삶이 독립적이라는 것, 서로 간섭받지 않고 제 몫의 일을 할 수 있다는 것. 코드 속에서도 이런 자연스러운 독립성이 있다는 게 신기하지 않나요?
✏️ 연습문제로 개념 다지기
이제 배운 내용을 연습문제를 통해 확실히 익혀보겠습니다.
Ex1) 애완동물 만들기 - new로 여러 동물친구 만들어보자
class Pet {
constructor(name, species) {
this.name = name; // 이름 저장
this.species = species; // 동물 종류 저장
this.hunger = 50; // 배고픔 지수를 50으로 시작
this.happiness = 50; // 행복 지수를 50으로 시작
}
// 먹이 주기 기능
feed() {
this.hunger = this.hunger - 20; // 배고픔을 20 줄임
this.happiness = this.happiness + 10; // 행복을 10 늘림
console.log(`${this.name}이(가) 맛있게 먹었어요!`);
}
// 놀아주기 기능
play() {
this.hunger = this.hunger + 10; // 놀면 조금 배고파짐
this.happiness = this.happiness + 20; // 놀면 많이 행복해짐
console.log(`${this.name}이(가) 즐겁게 놀고 있어요!`);
}
}
// 여기에 new를 사용해서 여러 애완동물을 만들어보세요.
let pet1 = new Pet("멍멍이", "강아지"); // Pet 클래스로 강아지 만들기
let pet2 = new Pet("야옹이", "고양이"); // Pet 클래스로 고양이 만들기
pet1.feed(); // 멍멍이에게 먹이 주기
pet2.play(); // 야옹이와 놀아주기
console.log("멍멍이 배고픔:", pet1.hunger); // 멍멍이의 현재 배고픔 확인
console.log("야옹이 행복:", pet2.happiness); // 야옹이의 현재 행복 확인
Ex2) 올바른 방법과 잘못된 방법 비교해보자
class Phone {
constructor(brand, model) {
this.brand = brand; // 브랜드 저장
this.model = model; // 모델명 저장
this.battery = 100; // 배터리를 100%로 시작
}
// 전화 걸기 기능
call() {
console.log(`${this.brand} ${this.model}로 전화를 걸어요!`);
}
}
// 올바른 방법 - new 키워드 사용하기
let myPhone = new Phone("삼성", "갤럭시"); // new로 핸드폰 만들기
myPhone.call(); // 만든 핸드폰으로 전화 걸기
// 잘못된 방법 (아래 주석을 풀면 에러가 나요)
// let wrongPhone = Phone("애플", "아이폰"); // new가 없어서 에러!
Ex3) 물건의 독립성을 확인해보자
class BankAccount {
constructor(owner, balance = 0) {
this.owner = owner; // 계좌 주인 저장
this.balance = balance; // 잔액 저장
}
// 돈 넣기 기능
deposit(amount) {
this.balance = this.balance + amount; // 잔액에 돈을 더함
console.log(`${this.owner}님 ${amount}원 입금완료!`);
}
}
// 여러 계좌 만들기
let account1 = new BankAccount("철수", 1000); // 철수 계좌 - 1000원으로 시작
let account2 = new BankAccount("영희", 2000); // 영희 계좌 - 2000원으로 시작
// 각각 독립적으로 입금하기
account1.deposit(500); // 철수 계좌에 500원 넣기
account2.deposit(300); // 영희 계좌에 300원 넣기
console.log("철수 잔액:", account1.balance); // 1500 (1000 + 500)
console.log("영희 잔액:", account2.balance); // 2300 (2000 + 300)
console.log("같은 계좌인가요?", account1 === account2); // false - 서로 다른 계좌예요!
🤔 조금 더 어려운 문제로 실력 확인하기
기본 연습을 마쳤다면, 이제 조금 더 깊이 있는 문제들을 통해 new
키워드에 대한 이해를 확인해보겠습니다.
Q1. new
키워드가 하는 일을 순서대로 설명해보세요.
정답: 1) 컴퓨터 메모리에 빈 물건을 만들고, 2) 만들어진 물건을 클래스의 this에 연결한 다음, 3) constructor 도우미를 자동으로 실행해서 물건을 완전히 준비하고, 4) 준비가 끝난 물건을 돌려줘서 변수에 저장할 수 있게 합니다.
Q2. 같은 클래스로 만든 여러 물건이 독립적인 이유를 설명해보세요.
정답: 각 물건은 컴퓨터 메모리의 서로 다른 위치에 저장되기 때문입니다. 마치 같은 설계도로 집을 여러 채 지어도 각 집이 다른 주소를 가지는 것처럼, new로 만든 각 물건도 고유한 메모리 주소를 가지고 있어서 하나를 바꿔도 다른 물건에는 영향을 주지 않습니다.
🧚♀️ 이야기로 다시 배우기: 스마트폰 공장의 생산 시스템 대모험
지금까지 배운 내용을 재미있는 이야기로 다시 정리해볼까요?
우리나라에 "첨단 스마트폰 공장"이 있었어요. 이 공장에는 정말 신기한 기계가 하나 있었는데, 바로 '자동 생산 시스템'이었답니다.
공장에는 설계 전문가들이 만든 완벽한 스마트폰 설계도들이 컴퓨터에 저장되어 있었어요. 어떤 설계도는 게임용 폰, 어떤 설계도는 카메라용 폰, 또 어떤 설계도는 업무용 폰의 모습이 그려져 있었죠.
어느 날, 전 세계에서 주문이 들어왔어요. "게임용 폰 1000대, 카메라용 폰 500대, 업무용 폰 300대 만들어주세요!"
공장장님은 "NEW!" 버튼을 누르기 시작했어요. "게임용 폰 설계도로 NEW!" 하자 생산 라인에서 윙윙윙 소리와 함께 반짝이는 게임용 폰이 하나 완성되어 나왔습니다. 다시 "NEW!" 버튼을 누르니 또 다른 게임용 폰이 나왔어요.
정말 신기한 건 각각의 폰이 모두 독립적이라는 거였어요. 첫 번째 폰의 배경화면을 바꿔도 두 번째 폰은 그대로였고, 세 번째 폰에 앱을 설치해도 다른 폰들은 영향을 받지 않았답니다.
공장 직원들이 "어떻게 이런 시스템이 가능해요?"라고 물어보니, 공장장이 대답했어요. "이 자동 생산 시스템은 완벽한 설계도를 가지고, 필요한 만큼 독립적인 제품들을 정확하게 만들어내는 것이 특징이에요!"
new
키워드도 똑같은 자동 생산 시스템이에요. 클래스라는 완벽한 설계도를 가지고, 필요한 만큼 독립적인 물건들을 정확하게 만들어내는 놀라운 도구랍니다!
✅ 학습 완료 체크리스트
이번 시간에 배운 내용들을 모두 이해했는지 확인해보세요!
학습 내용 | 이해했나요? |
---|---|
15.2.1의 기본 개념 | ✅ |
기본 사용법과 문법 | ✅ |
주요 특징과 차이점 | ✅ |
자주 하는 실수들 | ✅ |
실전 예제 이해 | ✅ |
14단원 복습 완료 | ✅ |
🎯 추가 연습 문제들
조금 더 연습하고 싶은 친구들을 위한 추가 문제들이에요!
추가 문제 1. Pet 클래스를 만들고 new로 여러 애완동물을 생성해보세요.
// 답:
class Pet {
constructor(name, species) {
this.name = name;
this.species = species;
this.hunger = 50;
this.happiness = 50;
}
feed() {
this.hunger = this.hunger - 20;
this.happiness = this.happiness + 10;
console.log(`${this.name}이(가) 먹이를 먹었어요!`);
}
play() {
this.hunger = this.hunger + 10;
this.happiness = this.happiness + 20;
console.log(`${this.name}이(가) 즐겁게 놀고 있어요!`);
}
getStatus() {
console.log(`${this.name}(${this.species}) - 배고픔: ${this.hunger}, 행복: ${this.happiness}`);
}
}
// 여러 애완동물 생성
let pet1 = new Pet("멍멍이", "강아지");
let pet2 = new Pet("야옹이", "고양이");
let pet3 = new Pet("짹짹이", "앵무새");
// 각 애완동물은 독립적으로 관리됨
pet1.feed();
pet2.play();
pet3.feed();
console.log("=== 모든 애완동물 상태 ===");
pet1.getStatus();
pet2.getStatus();
pet3.getStatus();
추가 문제 2. new 없이 호출했을 때와 new로 호출했을 때의 차이를 확인해보세요.
// 답:
class Phone {
constructor(brand, model) {
this.brand = brand;
this.model = model;
this.battery = 100;
}
call(number) {
if (this.battery > 0) {
this.battery = this.battery - 5;
console.log(`${this.brand} ${this.model}로 ${number}에 전화 중...`);
} else {
console.log("배터리가 없습니다!");
}
}
}
// 올바른 방법 - new 사용
console.log("=== new 사용 (올바른 방법) ===");
let myPhone = new Phone("삼성", "갤럭시");
myPhone.call("010-1234-5678");
console.log("배터리:", myPhone.battery);
console.log("타입 확인:", myPhone instanceof Phone);
// 잘못된 방법 - new 없이 사용
console.log("\n=== new 없이 사용 (잘못된 방법) ===");
try {
let wrongPhone = Phone("애플", "아이폰"); // 에러 발생
} catch (error) {
console.log("에러가 발생했습니다:", error.name);
console.log("해결법: new 키워드를 사용하세요!");
// 올바른 방법으로 다시 생성
let correctPhone = new Phone("애플", "아이폰");
console.log("올바른 생성:", correctPhone.brand, correctPhone.model);
}
📂 마무리 정보
오늘 배운 15.2.1
내용이 여러분의 자바스크립트 지식에 잘 저장되었나요? 다음 시간에는 더 재미있는 내용으로 만나요!
기억할 점: 오늘 배운 내용을 꼭 연습해보시고, 궁금한 점이 있으면 언제든 다시 돌아와서 읽어보세요.
무료 JavaScript 학습 플랫폼에서 단계별 학습과 실시간 코드 실행을 통해
더욱 효과적이고 재미있게 학습하실 수 있습니다.
'15. 클래스로 틀 만들기 (클래스) > 15.2 인스턴스 생성하기' 카테고리의 다른 글
15.2.3 모두가 함께 쓰는 특별한 기능들 - 정적 메서드 (0) | 2025.07.22 |
---|---|
15.2.2 인스턴스 속성과 메서드 - 각 객체의 개인 정보와 특별한 능력들 (0) | 2025.07.22 |