[목차]
01. 객체란?
💡
객체 또는 오브젝트는 클래스에서 정의한 것을 토대로 메모리에 할당된 것으로 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미하며, 변수, 자료구조, 함수, 또는 메소드가 될 수 있습니다.
특징
➡️ 메모리에 등록된 데이터(함수, 메소드, 자료구조)
➡️ 객체는 속성과 기능을 가지고 있다.
➡️ 객체를 대입하는 변수는 메모리에 올라간 객체의 주소를 참조하고 있다.
➡️ 객체를 대입하는 변수는 참조변수라고 한다.
02. 참조변수
💡
메모리에 등록된 객체의 주소값을 참조하는 변수(기본형X)
[코드예제] 객체 참조 변수
// 원시타입 : 값 // 서로 다른 곳을 가르킨다. // num1, num2 => 변수(값을 가르킨다. call by value) let num1 = 100; let num2 = num1; console.log(num1 == num2); num2 = 200; console.log(num1 == num2); // 원시타입 외의 자료형 : 객체 // 같은 주소를 가르킨다. // 배열이 주소값을 가르킨다. // arr1, arr2 => 참조변수(주소를 가르키는 변수. call by reference) const arr1 = [1, 2, 3]; const arr2 = arr1; console.log(arr1 == arr2); arr2[1] = 4; console.log(arr1, arr2);
03. 객체 선언
💡
객체 생성 방법
1️⃣ const obj = {};
2️⃣ const obj = new Object();
객체 선언 방법
➡️ {}의 기호로 객체를 선언 할 수 있다.
➡️ 객체는 키와 값으로 이루어져 있다.
➡️ 값에는 모든 데이터타입(객체, 함수 포함)을 담을 수 있다.
➡️ 키는 객체에 담긴 값의 주소이다.
➡️ 키는 주로 문자열로 지정을 한다.
➡️ 값에 지정된 함수를 메소드라고 한다.
[코드예제] 객체 선언
// 키 : 값 // 식별자(키) 선언시 유의사항 /** * 숫자 x, -(대시바) x, _(언더바) x * 키 : 카멜표기법 * 영어는 문자열로 인식 */ const obj3 = { num : 1, arr : [1,2,3], 'member-name' : '홍길동', // 키에 대시바를 넣으면 ''로 감싼다. 47 : '한국스마트정보교육원47기', // 키에 숫자는 숫자로 취급 안한다. obj : { arr : [4,5,6] }, getNum : function(){ return this.num; }, setNum : function(number){ this.num = number; } }; console.log(obj3);
04. 객체 활용
💡
1️⃣ 객체를 선언하고 그 객체의 속성 접근 및 메소드 실행을 할 수 있다.
2️⃣ this. : 객체의 메소드 내부에서 나 자신의 객체를 가리킬 때
3️⃣ 체이닝기법 : .(도트연산자)을 찍어 그 당시의 객체의 속성이나 메소드를 활용하는 방법
[코드예제] 객체 속성, 메서드 접근
const obj4 = { num : 1, arr : [1,2,3], 'member-name' : '홍길동', 47 : '한국스마트정보교육원47기', obj : { arr : [4,5,6] }, getNum : function(){ console.log(this.num); return this.num; }, setNum : function(number){ this.num = number; console.log(this.num); } }; obj4.num = 4; // 속성 동적 추가 obj4.str = '가'; console.log(obj4); // 속성접근 .(도트연산자) console.log(obj4.num); // 속성접근 객체참조변수['키'] console.log(obj4['47']); console.log(obj4['member-name']); // 메소드 호출 obj4.getNum(); obj4.setNum(5); obj4.getNum();
[코드예제] this
const obj5 = { name : '', getName : function() { return this.name; }, setName : function(name){ this.name = name; } } obj5.setName('홍길동'); console.log(obj5.getName()); // 홍길동
[코드예제] 체이닝기법
const obj6 = { num : 1, arr : [1,2,3], 'member-name' : '홍길동', 47 : '한국스마트정보교육원47기', obj : { arr : [4,5,{ name : '홍길동' }] }, getNum : function(){ console.log(this.num); return this.num; }, setNum : function(number){ this.num = number; console.log(this.num); } }; let testName = obj6.obj.arr[2].name; console.log(testName); // 홍길동
05. 객체 실습
[코드예제] 객체 실습1
const bookObj = { storeName : '한국스마트서점', bookNameArr : [ '이것이 자바다', '10분 sql', '토비의 스프링', '클린코드', '이펙티브 자바', '자바스크립트 딥다이브' ], bookInfoArr : [ {bookName : '이것이 자바다', price : 30000}, {bookName : '10분 sql', price : 20000}, {bookName : '토비의 스프링', price : 60000}, {bookName : '클린코드', price : 30000}, {bookName : '이펙티브 자바', price : 30000}, {bookName : '자바스크립트 딥다이브', price : 45000} ] } // 실습 1. 한국스마트서점에 이펙티브 자바 책이 존재하면 // '이펙티브 자바 책이 있습니다.' 존재하지 않으면 '책이 없습니다.'라고 // 콘솔에 출력하시오. let findBookName = '이펙티브 자바'; // let findBookName = '자바의 정석'; // 내가 한 방법 let bookPrint = ''; for(let i = 0; i < bookObj.bookNameArr.length; i++) { if(bookObj.bookNameArr[i] == findBookName) { bookPrint += `${findBookName} 책이 있습니다.`; } } if(bookPrint == '') { bookPrint += `${findBookName} 책이 없습니다.`; } console.log(bookPrint); // 선생님이 한 방법 const bookNameArr = bookObj.bookNameArr; let isExisit = false; for(let bookName of bookNameArr) { if (bookName == findBookName) { isExisit = true; break; } } if(isExisit) { console.log(`${findBookName} 책이 있습니다.`); } else{ console.log(`${findBookName} 책이 없습니다.`); }
[코드예제] 객체 실습2
const bookObj = { storeName : '한국스마트서점', bookNameArr : [ '이것이 자바다', '10분 sql', '토비의 스프링', '클린코드', '이펙티브 자바', '자바스크립트 딥다이브' ], bookInfoArr : [ {bookName : '이것이 자바다', price : 30000}, {bookName : '10분 sql', price : 20000}, {bookName : '토비의 스프링', price : 60000}, {bookName : '클린코드', price : 30000}, {bookName : '이펙티브 자바', price : 30000}, {bookName : '자바스크립트 딥다이브', price : 45000} ] } // 실습2. 서점에서 이것이 자바다, 이펙티브 자바를 구입했다. // 얼마를 지불해야하는지 콘솔에 출력하시오. let barCode1 = '이것이 자바다'; let barCode2 = '이펙티브 자바'; const purchaseList1 = []; let priceTotal1 = 0; // 내가 한 방법 for(let i = 0; i < bookObj.bookInfoArr.length; i++){ if(bookObj.bookInfoArr[i].bookName == barCode1) { purchaseList1.push(barCode1); priceTotal1 += bookObj.bookInfoArr[i].price; } if(bookObj.bookInfoArr[i].bookName == barCode2) { purchaseList1.push(barCode2); priceTotal1 += bookObj.bookInfoArr[i].price; } } console.log(`구입한 책은 ${purchaseList1}입니다.\n지불하실 총 금액은 ${priceTotal1}원 입니다.`); // 선생님이 한 방법 const purchaseList2 = []; let priceTotal2 = 0; const bookInfoArr = bookObj.bookInfoArr; for(let bookInfo of bookInfoArr) { if(bookInfo.bookName == barCode1) { purchaseList2.push(bookInfo); } if(bookInfo.bookName == barCode2) { purchaseList2.push(bookInfo); } } const bookInfo1 = bookInfoArr[0]; console.log(bookInfo1); // bookname, price console.log('bookName' in bookInfo1, 'in 연산자'); // 반복문 for in 객체 순회 // 배열에서 for in 시 index값은 string 타입이다. for(let key in bookInfo1) { //console.log(typeof key, 'for in 시 key 타입여부'); //console.log(bookInfo1.key); //console.log(key); //console.log(bookInfo1[key]); //if(key == 'price') priceTotal2 += bookInfo1[key]; } // 실습3. purchaseList 배열안에 있는 객체를 활용하여 // priceTotal2의 값을 구하시오 console.log(purchaseList2); for(let goods of purchaseList2) { // 방법1 priceTotal2 += goods.price; // 방법2(for in 활용) // for(let key in goods){ // if(key=='price') priceTotal2 += goods[key]; // } } console.log(`지불하실 총 금액은 ${priceTotal2}원 입니다.`);
[코드예제] 객체 실습3
// 실습. myObj의 addArr메서드를 3번 실행시켰더니 // myObj의 arr 속성 배열에 '홍길동', '유관순', '이순신' 이라는 문자열이 // 차례대로 담겼다. 위의 문구처럼 문자열이 담길 수 있도록 메서드 내의 코드를 완성하시오. const myObj = { arr : [], addArr(name) { this.arr.push(name); return this; } } myObj.addArr('홍길동') .addArr('유관순') .addArr('이순신'); console.log(myObj.arr); //실습. 자동차 주행시 주행내역과 총주행 거리를 구하시오. //위 문구대로 실행될 수 있도록 코드를 완성하고 결괏값을 출력하시오. const car = { color : 'red', model : 'K5', moveHistory : [], totalMove : 0, move(num) { this.moveHistory.push(num); this.totalMove += num; return this; }, getTotalMove(){ // for(let km of this.moveHistory){ // this.totalMove += km; // } return this.totalMove; } } car.move(50).move(100).move(70); console.log(`주행내역: ${car.moveHistory}`); console.log(`총 주행거리: ${car.getTotalMove()}km`); // 실습. nObj의 getAvg메서드를 호출 하였더니 nObj의 nArr 배열 속성 요소의 // 평균값이 리턴되었다. 위 문구대로 실행될 수 있도록 코드를 완성하고 결괏값을 출력하시오. const nObj = { nArr : [10,20,30,40,50], getAvg() { let sum = 0; let avg = 0; for(let num of this.nArr){ sum += num; avg = (sum / this.nArr.length); } return avg; } } console.log(nObj.getAvg()); // 실습. getMaxScoreStudent 메서드 호출 시 최고의 점수를 받은 학생의 명을 리턴하고 // 그 결괏값을 출력하도록 하시오. const studentObj = { score : [ {studentName : '홍길동', score : 30}, {studentName : '이순신', score : 60}, {studentName : '유관순', score : 80}, {studentName : '고길동', score : 70}, {studentName : '홍길순', score : 80} ], getMaxScoreStudent() { let maxScore = this.score[0].score; for(let i = 1; i < this.score.length; i++) { let tagetScore = this.score[i].score; if(maxScore < tagetScore) { maxScore = tagetScore; } } let maxScoreStudent = ''; let isFirst = true; for(let studentInfo of this.score) { if(studentInfo.score == maxScore) { if(isFirst) { maxScoreStudent += studentInfo.studentName; isFirst = false; continue; } maxScoreStudent += `, ${studentInfo.studentName}`; } } return maxScoreStudent; } }; console.log(studentObj.getMaxScoreStudent()); // 실습. 아래의 실행코드에서 에러가 발생하지 않도록 메서드 내의 코드를 완성하시오. const numObj = { nArr : [], addN(num) { this.nArr.push(num); return this; }, sum() { let total = 0; for(let arrHap of this.nArr) { total += arrHap; } return total; } } let n = numObj.addN(10).addN(10).addN(10).addN(10).addN(10).sum(); console.log(n, '50 결괏값');
[코드예제] 객체 실습4
// 실습. 아래는 구매에 따른 마일리지 적립 서비스이다. 실행코드에서 에러가 발생하지 않도록 메서드 내의 코드를 완성하시오.<br> // 조건. 구매에 따른 내역이 히스토리에 등록되어야한다.(프로퍼티명: history) /* 현재날짜) let date = new Date(); let year = date.getFullYear(); let month = date.getMonth() + 1; let day = date.getDate(); let time = `${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`; let currentDate = `${year}-${month}-${day} ${time}`; 예시:) mileageService.addMileage('id001',100000); mileageService.addMileage('id002',90000); mileageService.addMileage('id001',110000); mileageService.addMileage('id003',80000); mileageService.addMileage('id004',50000); console.log(mileageService.addMileage('id001',100000).getMemberInfo('id001')); console.log(mileageService.getMemberInfo('id002')); console.log(mileageService.getMemberInfo('id003')); console.log(mileageService.getMemberInfo('id004')); console.log(mileageService.history); ======================출력========================== { memberId: 'id001', currentMileage: 9170, memberLevel: 'VIP' } { memberId: 'id002', currentMileage: 1270, memberLevel: 'SILVER' } { memberId: 'id003', currentMileage: 3320, memberLevel: 'GOLD' } { memberId: 'id004', currentMileage: 5250, memberLevel: 'FLATINUM' } [ { memberId: 'id001', status: '누적', mileage: 700, date: '2022-10-13 21:46:27' }, { memberId: 'id002', status: '누적', mileage: 270, date: '2022-10-13 21:46:27' }, { memberId: 'id001', status: '누적', mileage: 770, date: '2022-10-13 21:46:27' }, { memberId: 'id003', status: '누적', mileage: 320, date: '2022-10-13 21:46:27' }, { memberId: 'id004', status: '누적', mileage: 250, date: '2022-10-13 21:46:27' }, { memberId: 'id001', status: '누적', mileage: 700, date: '2022-10-13 21:46:27' } ] */ const mileageService = { memberList : [ {memberId : 'id001', currentMileage: 7000, memberLevel: 'VIP'}, {memberId : 'id002', currentMileage: 1000, memberLevel: 'SILVER'}, {memberId : 'id003', currentMileage: 3000, memberLevel: 'GOLD'}, {memberId : 'id004', currentMileage: 5000, memberLevel: 'FLATINUM'}, {memberId : 'id005', currentMileage: 7000, memberLevel: 'BRONZE'}, {memberId : 'id006', currentMileage: 7000, memberLevel: 'GOLD'}, {memberId : 'id007', currentMileage: 7000, memberLevel: 'DIAMOND'} ], reserveReferenceTable : [ {memberLevel: 'VIP', ratio: 0.007}, {memberLevel: 'DIAMOND', ratio: 0.006}, {memberLevel: 'FLATINUM', ratio: 0.005}, {memberLevel: 'GOLD', ratio: 0.004}, {memberLevel: 'SILVER', ratio: 0.003}, {memberLevel: 'BRONZE', ratio: 0.001} ], history : [], addMileage(id, paymentAmount) { // 1. 회원의 정보를 조회 let memberInfo; for(const info of this.memberList) { if(id == info.memberId) { memberInfo = info; break; } } // 2. 회원 레벨에 맞는 회원 마일리지 적립 기준비율 구하기 let memberLevel = memberInfo.memberLevel; let ratio; for(const level of this.reserveReferenceTable) { if(memberLevel == level.memberLevel) { ratio = level.ratio; } } console.log(memberLevel, ratio); // 3. 마일리지 적립금 구하기 let mileage = paymentAmount * ratio; console.log(mileage); // 4. 회원의 현재마일리지에 적립금 누적하기 memberInfo.currentMileage += mileage; console.log(memberInfo); // 5. 현재 날짜 구하기 let date = new Date(); let year = date.getFullYear(); let month = date.getMonth() + 1; let day = date.getDate() let time = `${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`; let today = `${year}-${month}-${day} ${time}`; console.log(today); // 6. history 배열에 내역 등록 const mileageHistory = {}; mileageHistory.memberId = id; mileageHistory.status = '누적'; mileageHistory.mileage = mileage; mileageHistory.date = today; this.history.push(mileageHistory) console.log(mileageHistory); return this; }, getMemberInfo(id) { let memberInfo; for(let info of this.memberList) { if(id == info.memberId) { memberInfo = info; break; } } return memberInfo; } }; mileageService.addMileage('id001',100000); mileageService.addMileage('id002',90000); mileageService.addMileage('id001',110000); mileageService.addMileage('id003',80000); mileageService.addMileage('id004',50000); console.log(mileageService.addMileage('id001',100000).getMemberInfo('id001')); console.log(mileageService.getMemberInfo('id002')); console.log(mileageService.getMemberInfo('id003')); console.log(mileageService.getMemberInfo('id004')); console.log(mileageService.history);
tag : #javascript #객체 #참조변수 #선언 #this. #체이닝기법 #속성 #메소드
Uploaded by N2T