210502 ์ผ์์ผ 5์ผ์ฐจ
# 3~4์ผ์ฐจ ๋ณต์ต
- ๋ฐฐ์ด์ ์ฒ์์ ์์๋ฅผ ์ถ๊ฐํ ๋ ๋ณํ์ ํจ์๊ฐ ์๋ค๋ฉด ๋ฐฐ์ด์ ์๋ ๊ธฐ์กด ๋ชจ๋ ์์๋ฅผ ํ ์นธ์ฉ ๋ค๋ก ์ด๋์ํจ ๋ค์ ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค.ย unshift()๋ ํย ๋ฒ์ ์ฌ๋ฌ ์์๋ฅผ ๋ฐฐ์ด ์์ผ๋ก ์ถ๊ฐํ ์๋ ์๋ค.
- ๋ฐฐ์ด์ ์ ์์๋ฅผ ์ ๊ฑฐํ ๋ ๋ณํ์ ํจ์๊ฐ ์๋ค๋ฉด ์์๋ฅผ ์ถ๊ฐํ ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋นํจ์จ์ ์ด๋ค.ย ๋นํจ์จ์ ์ธ ๋์ ํ์ย ๋งจ ๋์ ๋ถํ์ํ ๊ฐ์ด ์ ์ฅ๋๋ค. ๋ง์ง๋ง ์ฝค๋ง๊ฐ ์ถ๋ ฅ๋ ๊ฒ์ผ๋ก ์ ์ ์๋ค.
shift() ํจ์๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ๋จํ ๋ฐฐ์ด์ ๋งจ ์ฒ์ ์์๋ฅผ ์ ๊ฑฐํ ์ ์๋ค.
let nums = [9,1,2,3,4,5];
nums.shift();
console.log(nums);// 1,2,3,4,5
- pop()๊ณผ shift()๋ ์ ๊ฑฐ๋ ์์๋ฅผ ๋ฐํํ๋ฏ๋ก ํ์ํ๋ฉด ์ด ์์๋ฅผ ๋ณ์์ ์ ์ฅํ ์ ์๋ค.
- splice()
- ์์ ์ธ๋ฑ์ค(์ด๋ ์ง์ ๋ถํฐ ์์๋ฅผ ์ถ๊ฐํ ๊ฒ์ธ์ง)
- ์ญ์ ํ ์์์ ๊ฐ์(์์๋ฅผ ์ถ๊ฐํ ๋๋ O)
- ๋ฐฐ์ด์ ์ถ๊ฐํ ์์๋ค
let nums = [1, 2, 3, 7, 8, 9];
let newElements = [4, 5, 6];
nums.splice(3, 0, ...newElements);
console.log(nums);// 1,2,3,4,5,6,7,8,9
์์ย ์ธ๋ฑ์คย 3(nums[3]),ย 0์ด๋ฏ๋กย ์์ย ์ถ๊ฐ,ย ๊ทธย ๋ค์๋ถํฐ๋ย ์ถ๊ฐํ๋ ค๋ย ์์ย ๋ชฉ๋ก์ย ์์ ๋กญ๊ฒย ์ ๊ณตํ๋ฉดย ๋๋ค.
// splice() : ์ค๊ฐ์ ์ญ์ let nums = [1, 2, 3, 100, 200, 300, 400, 4, 5];
nums.splice(3, 4);
console.log(nums);// 1,2,3,4,5
์์ย ์ธ๋ฑ์คย 3(nums[3])๋ถํฐย ์์ย 4๊ฐ๋ฅผย ์ญ์ ํ๋ค.
- sort() ํจ์๊ฐ ๋ฐฐ์ด ์์๋ฅผ ์์๋๋ก ์ ๋ ฌํ๋ฉฐ ํนํ ๋ฌธ์์ด์ ์ ๋ ฌํ ๋ ์ ์ฉํ๋ค.
// sort() ์ซ์ ์ ๋ ฌ ํจ์function compare(num1, num2) {
return num1 - num2;
}
let nums = [3, 1, 2, 100, 4, 200];
nums.sort(compare);
console.log(nums);// 1,2,3,4,100,200
- ๋ฐฐ์ด์ ๋ง๋ค์ง ์๋ย ๋ฐ๋ณต์ ํจ์๋กย forEach()ย ํจ์๊ฐ ์๋ค.ย ๋ฐฐ์ด์ ๋ชจ๋ ์์์ ์ธ์๋ก ๋ฐ์ ํจ์๋ฅผ ํธ์ถํ๋ค.
function square(num) {
console.log(num, num * num);
}
let nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
nums.forEach(square);
- every()๋ย ๋ถ๋ฆฐ ํจ์๋ฅผ ๋ฐฐ์ด์ ์ ์ฉํด ๋ฐฐ์ด์ ๋ชจ๋ ์์๊ฐ ์ฐธ์ด๋ฉด true๋ฅผ ๋ฐํํ๋ค.
// every() : ๋ถ๋ฆฐ ํจ์๋ฅผ ๋ฐฐ์ด์ ์ ์ฉ, ๋ชจ๋ ์์๊ฐ ์ฐธ์ด๋ฉด true ๋ฐํ.function isEven(num) {
return num % 2 == 0;
}
let nums = [2, 4, 6, 8, 10];
let even = nums.every(isEven);
if (even) {
console.log("all numbers are even");
} else {
console.log("not all numbers are even");
}
- some()ย ํจ์๋ ๋ฐฐ์ด ์์ ์ค์ย ํ ์์๋ผ๋ ์ธ์๋ก ๋ฐ์ ๋ถ๋ฆฐ ์์์ ๊ธฐ์ค์ ๋ง์กฑํ๋ฉด true๋ฅผ ๋ฐํํ๋ค.
// some() : ๋ถ๋ฆฐ ํจ์๋ฅผ ๋ฐฐ์ด์ ์ ์ฉ, ํ๋๋ผ๋ ์์๊ฐ ์ฐธ์ด๋ฉด true ๋ฐํ.function isEven(num) {
return num % 2 == 0;
}
let nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let someEven = nums.some(isEven);
if (someEven) {
console.log("some numbers are even");
} else {
console.log("not all numbers are even");
}
nums = [1, 3, 5, 7, 9];
someEven = nums.some(isEven);
if (someEven) {
console.log("some numbers are even");
} else {
console.log("no numbers are even");
}
- reduce() ํจ์๋ฅผ ์ด์ฉํด ๋ฌธ์์ด์ ์ฐ๊ฒฐํ ์๋ ์๋ค.
// reduce() : ๋ฌธ์์ด๋ ์ฐ๊ฒฐํ ์ ์๋ค.function concat(accumulatedString, item) {
return accumulatedString + item;
}
let words = ["the ", "quick ", "brown ", "fox "];
let sentence = words.reduce(concat);
console.log(sentence);// the quick brown fox
- ย ๋ฌธ์์ด์ map() ์ฌ์ฉ
function first(word){
return word[0];
}
let words = ["for", "your", "information"]
let acronym = words.map(first)
console.log(acronym.join(""));// "fyi"
toString() ์ ์ด์ฉํด ์์๋ฅผ ์ถ๋ ฅํ๋ฉดย ์ฝค๋ง๊ฐ ํ์๋๋ฏ๋กย ๊ณต๋ฐฑ๋ฌธ์์ด์ ๋ถ๋ฆฌ์๋ก ์ฌ์ฉํ๋๋ก join()์ ํธ์ถ
- filter()๋ ๋ถ๋ฆฐ ํจ์๋ฅผ ๋ง์กฑํ๋ ์์๋ฅผ ํฌํจํ๋ ์๋ก์ด ๋ฐฐ์ด์ ๋ฐํํ๋ค.
// filter() : ๋ถ๋ฆฐ ํจ์๋ฅผ ๋ง์กฑํ๋ ์์๋ฅผ ํฌํจํ๋ ์๋ก์ด ๋ฐฐ์ด์ ๋ฐํfunction isEven(num) {
return num % 2 == 0;
}
function isOdd(num) {
return num % 2 != 0;
}
let nums = [];
for (let i = 0; i < 20; ++i) {
nums[i] = i + 1;
}
let evens = nums.filter(isEven);
console.log("Even numbers: ");
console.log(evens);
let odds = nums.filter(isOdd);
console.log("Odd numbers: ");
console.log(odds);
- ์ด์ฐจ์ ๋ฒ ์ด
Array.matrix = function (numrows, numcols, initial) {
let arr = [];
for (let i = 0; i < numrows; ++i) {
let columns = [];
for (let j = 0; j < numcols; ++j) {
columns[j] = initial;
}
arr[i] = columns;
}
return arr;
};
let arr = Array.matrix(3, 2, 3);
console.log(arr);
CH2 ๋ฐฐ์ด
2.8 ๊ฐ์ฒด์ ํฌํจ๋ ๋ฐฐ์ด
ํ ์ฃผ ๋์ ๊ด์ฐฐ๋ ๊ฐ์ฅ ๋์ ์จ๋๋ฅผ ์ ์ฅํ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค. ์ ์จ๋๋ฅผ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ, ์ ์ฅ๋ ์จ๋์ ํ๊ท ์ ๊ณ์ฐํ๋ ๊ธฐ๋ฅ์ ํฌํจํ๋ค.
function weekTemps() {
this.dataStore = [];
this.add = add;
this.average = average;
}
function add(temp) {
this.dataStore.push(temp);
}
function average() {
let total = 0;
for (let i = 0; i < this.dataStore.length; ++i) {
total += this.dataStore[i];
}
return total / this.dataStore.length;
}
let thisWeek = new weekTemps();
thisWeek.add(52);
thisWeek.add(55);
thisWeek.add(61);
thisWeek.add(65);
thisWeek.add(55);
thisWeek.add(50);
thisWeek.add(52);
thisWeek.add(49);
console.log(thisWeek.average());
2.9 ์ฐ์ต๋ฌธ์
#1. ๊ฐ์ฒด์ ํ์๋ค์ ์ ์ ์งํฉ์ ์ ์ฅํ๋ grades ๊ฐ์ฒด๋ฅผ ๋ง๋์์ค. ์ ์๋ฅผ ์ถ๊ฐํ๋ ํจ์, ํ์์ ํ๊ท ์ ์๋ฅผ ์ถ๋ ฅํ๋ ๊ธฐ๋ฅ์ ๊ฐ์ฒด์ ์ถ๊ฐํ์์ค.
function grades() {
this.dataStore = [];
this.add = add;
this.average = average;
}
function add(grade) {
this.dataStore.push(grade);
}
function average() {
let total = 0;
for (let i = 0; i < this.dataStore.length; ++i) {
total += this.dataStore[i];
}
return total / this.dataStore.length;
}
let grade = new grades();
grade.add(800);
grade.add(1000);
grade.add(1200);
grade.add(1400);
console.log(grade.average());// 1100
์ ์๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด dataStore๋ผ๋ ๋ฐฐ์ด์ push๋ฅผ ์ด์ฉํ์๋ค. ํ๊ท ์ ์๋ ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ๋ํ๋ค์ ๋ฐฐ์ด์ ์์ ๊ฐ์๋ก ๋๋ ๊ฐ์ ๋ฐํํ์ฌ ๊ทธ ๊ฐ์ console.log๋ก ์ถ๋ ฅํ๋ค.
#2. ๋ฐฐ์ด์ ๋จ์ด ์งํฉ์ ์ ์ฅํ ๋ค์ ๋ฐฐ์ด์ ๋ด์ฉ์ ์ ๋ฐฉํฅ ๋๋ ์ญ๋ฐฉํฅ์ผ๋ก ์ถ๋ ฅํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์์ค.
let arr = ["D", "C", "R", "L", "J"];
console.log(arr);
console.log(arr.reverse());
#3. ์ด์ฐจ์ย ๋ฐฐ์ด์ ์ด์ฉํด ์๊ฐ ์จ๋ ์๋ฃ๋ฅผ ์ ์ฅํ๋๋ก weeklyTemps ๊ฐ์ฒด๋ฅผ ๊ณ ์น์์ค. ์๊ฐ ํ๊ท , ์ง์ ํ ์ฃผ์ ํ๊ท , ๋ชจ๋ ์ฃผ์ ํ๊ท ์ ์ถ๋ ฅํ๋ ํจ์๋ฅผ ๋ง๋์์ค.
function weekTemps() {
this.dataStore = Array.matrix(4, 7, 0);// ์ด์ฐจ์ ๋ฐฐ์ด 4์ฃผ, 7์ผthis.add = add;
this.wAverage = wAverage;
this.wAverageAll = wAverageAll;
this.mAverage = mAverage;
}
Array.matrix = function (numrows, numcols, initial) {
let arr = [];
for (let i = 0; i < numrows; ++i) {
let columns = [];
for (let j = 0; j < numcols; ++j) {
columns[j] = initial++;
}
arr[i] = columns;
}
return arr;
};
function add(temp) {
this.dataStore.push(temp);
}
function wAverage(i) {
let total = 0;
if (0 < i && i < this.dataStore.length) {
// ์์ฐ์๋ง ๋ฐ๊ธฐ > ์ ๊ทํํ์ ์ฌ์ฉfor (let j = 0; j < this.dataStore[i - 1].length; ++j) {
total += this.dataStore[i - 1][j];
}
return total / this.dataStore[i - 1].length;
} else {
return "1 ~ " + this.dataStore.length + " ์ฃผ๋ก ์
๋ ฅํ์ธ์";
}
}
function wAverageAll() {
let total = 0;
let arr = [];
for (let i = 0; i < this.dataStore.length; ++i) {
for (let j = 0; j < this.dataStore[i].length; ++j) {
total += this.dataStore[i][j];
}
arr.push(i + 1 + "์ฃผ์ ํ๊ท : " + total);
total = 0;// ์ฃผ๊ฐ ์ดํฉ ์ด๊ธฐํ
}
return arr;
}
function mAverage() {
let total = 0;
let mTotal = 0;
for (let i = 0; i < this.dataStore.length; ++i) {
for (let j = 0; j < this.dataStore[i].length; ++j) {
total += this.dataStore[i][j];
}
mTotal += total;
total = 0;// ์ฃผ๊ฐ ์ดํฉ ์ด๊ธฐํ
}
return mTotal / (this.dataStore.length * this.dataStore[0].length);
}
let thisWeek = new weekTemps();
console.log(thisWeek.wAverage(1));// ์ฒซ์งธ ์ฃผ ํ๊ท console.log(thisWeek.wAverageAll());// ๋ชจ๋ ์ฃผ ํ๊ท console.log(thisWeek.mAverage());// ์๊ฐ ํ๊ท
CH3 ๋ฆฌ์คํธ
3.1 ๋ฆฌ์คํธ ADT
๋ฆฌ์คํธ๋ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ํ๋กํผํฐ๋ฅผ ํฌํจํ๋ค. ๋ฆฌ์คํธ์๋ย front, end ํ๋กํผํฐ๊ฐ ์๋ค.ย next()ย ํจ์๋ก ๋ฆฌ์คํธ์ ํ์ฌ ์์์์ย ๋ค์ ์์๋ก ์ด๋ํ ์ ์์ผ๋ฉฐย prev()ย ํจ์๋ก ํ์ฌ ์์์์ย ์ด์ ์์๋ก ์ด๋ํ ์ ์๋ค.ย moveTo(n) ํจ์๋ฅผ ์ด์ฉํ๋ฉด n ๋ฒ์งธ ์์น๋ก ํ ๋ฒ์ ์ด๋ํ ์ ์๋ค.ย currPos() ํจ์๋ ๋ฆฌ์คํธ์ ํ์ฌ ์์น๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
3.1 List ํด๋์ค ๊ตฌํ
์์ฑ์ ํจ์ ์ ์
function List() {
this.listSize = 0;
this.pos = 0;
this.dataStore = [];
this.clear = clear;
this.find = find;
this.toString = toString;
this.insert = insert;
this.append = append;
this.remove = remove;
this.front = front;
this.end = end;
this.prev = prev;
this.next = next;
this.length = length;
this.currPos = currPos;
this.moveTo = moveTo;
this.getElement = getElement;
this.contains = contains;
}
3.2.1 Append: ๋ฆฌ์คํธ์ ์์ ์ถ๊ฐ
๋ฆฌ์คํธ์ ๋ค์ ๊ฐ์ฉ ์์น(listSize)์ ์ ์์ ์ถ๊ฐํ๋ ํจ์์ด๋ค.
function append(element) {
this.dataStore[this.listSize++] = element;
}
3.2.2 Find: ๋ฆฌ์คํธ์ ์์ ๊ฒ์
remove()๋ ๊ฐ์ฅ ๊ตฌํ์ด ์ด๋ ต๋ค. ์ญ์ ํ๋ ค๋ ์์๋ฅผ ์ฐพ์ ๋ค์ ๊ทธ ์์๋ฅผ ์ญ์ ํ๊ณ ๋๋จธ์ง ์์๋ฅผ ์ผ์ชฝ์ผ๋ก ์ด๋์์ผ ์๋ฆฌ๋ฅผ ๋ฉ์์ผ ํ๋ค. ์ฐ์ ์์๋ฅผ ์ฐพ๋ ํฌํผ ํจ์ find()๋ฅผ ๊ตฌํํ๋ค.
// find() : remove๋ ์ญ์ ํ ์์๋ฅผ ์ฐพ๊ณ , ์์๋ฅผ ์ญ์ ํ๊ณ , ๋๋จธ์ง ๋ฐฐ์ด ์์๋ฅผ ์ผ์ชฝ์ผ๋ก ์ด๋์์ผ ์๋ฆฌ๋ฅผ ๋ฉ์ด๋ค. ์ญ์ ํ ์์๋ฅผ ์ฐพ์ ํฌํผ ํจ์function find(element) {
for (let i = 0; i < this.dataStore.length; ++i) {
if (this.dataStore[i] == element) {
return i;
}
}
return -1;
}
3.2.3 Remove: ๋ฆฌ์คํธ์ ์์ ์ญ์
find()๋ ๋ฃจํ๋ฅผ ๋๋ฉด์ ์์๋ฅผ ๊ฒ์ํ๊ณ ๋ฐ๊ฒฌํ๋ฉด ์์์ ์์น๋ฅผ ๋ฐํํ๋ค. ์ฐพ์ง ๋ชปํ๋ฉด -1 ์ ๋ฐํํ๋ค.ย remove()๋ find()์ ๋ฐํ๊ฐ์ผ๋ก ์๋ฌ๋ฅผ ๊ฒ์ฌํ๋ค. ์ด ๋ฐํ๊ฐ์ splice()์ ๋๊ฒจ์ฃผ์ด ์ํ๋ ์์๋ฅผ ์ญ์ ํ ๋ค์ ๋ฐฐ์ด์ ์ฐ๊ฒฐํ๋ค. ์์๋ฅผ ์ญ์ ํ๋ค๋ฉด true, ๋ชปํ๋ค๋ฉด false๋ฅผ ๋ฐํํ๋ค.
// remove() : find()์ ๋ฐํ๊ฐ์ splice ํจ์์ ๋๊ฒจ์ฃผ์ด ์ํ๋ ์์๋ฅผ ์ญ์ ํ ๋ค์ dataStore ๋ฐฐ์ด์ ์ฐ๊ฒฐํ๋ค. ์์๋ฅผ ์ญ์ ํ๋ฉด true, ๋ชปํ๋ฉด false ๋ฐํfunction remove(element) {
let foundAt = this.find(element);
if (foundAt > -1) {
this.dataStore.splice(foundAt, 1);
--this.listSize;
return true;
}
return false;
}
3.2.4 Length: ๋ฆฌ์คํธ์ ์์ ๊ฐ์
function length() {
return this.listSize;
}
3.2.5 toString: ๋ฆฌ์คํธ์ ์์ ํ์ธ
function toString(){
return this.dataStore;
}
# ์ค๊ฐ ํ ์คํธ ์ฝ๋
// ๋ฆฌ์คํธ ์ค๊ฐ ํ
์คํธfunction List() {
this.listSize = 0;
// this.pos = 0;this.dataStore = [];
// this.clear = clear;this.find = find;
this.toString = toString;
// this.insert = insert;this.append = append;
this.remove = remove;
// this.front = front;// this.end = end;// this.prev = prev;// this.next = next;this.length = length;
// this.currPos = currPos;// this.moveTo = moveTo;// this.getElement = getElement;// this.contains = contains;
}
function append(element) {
this.dataStore[this.listSize++] = element;
}
// find() : remove๋ ์ญ์ ํ ์์๋ฅผ ์ฐพ๊ณ , ์์๋ฅผ ์ญ์ ํ๊ณ , ๋๋จธ์ง ๋ฐฐ์ด ์์๋ฅผ ์ผ์ชฝ์ผ๋ก ์ด๋์์ผ ์๋ฆฌ๋ฅผ ๋ฉ์ด๋ค. ์ญ์ ํ ์์๋ฅผ ์ฐพ์ ํฌํผ ํจ์function find(element) {
for (let i = 0; i < this.dataStore.length; ++i) {
if (this.dataStore[i] == element) {
return i;
}
}
return -1;
}
// remove() : find()์ ๋ฐํ๊ฐ์ splice ํจ์์ ๋๊ฒจ์ฃผ์ด ์ํ๋ ์์๋ฅผ ์ญ์ ํ ๋ค์ dataStore ๋ฐฐ์ด์ ์ฐ๊ฒฐํ๋ค. ์์๋ฅผ ์ญ์ ํ๋ฉด true, ๋ชปํ๋ฉด false ๋ฐํfunction remove(element) {
let foundAt = this.find(element);
if (foundAt > -1) {
this.dataStore.splice(foundAt, 1);
--this.listSize;
return true;
}
return false;
}
function length() {
return this.listSize;
}
function toString() {
return this.dataStore;
}
let names = new List();
names.append("C");
names.append("R");
names.append("B");
console.log(names.toString());
names.remove("R");
console.log(names.toString());
3.2.6 Insert: ๋ฆฌ์คํธ์ ์์ ์ฝ์
insert() ๋ ๋ฆฌ์คํธ์ย ๊ธฐ์กด ์์ ๋ค์ ์๋ก์ด ์์๋ฅผ ์ฝ์
ํ๊ฒ ๋๋ค. find๋ก ๊ธฐ์กด ์์์ ์์น๋ฅผ ์ฐพ์ ํด๋น ์์น +1 ์ ์์๋ฅผ ์ถ๊ฐํ ๋ค์ listSize๋ฅผ 1๋งํผ ์ฆ๊ฐ์ํจ๋ค.
function insert(element, after) {
let insertPos = this.find(after);
if (insertPos > -1) {
this.dataStore.splice(insertPos + 1, 0, element);
++this.listSize;
return true;
}
return false;
}
3.2.7 ๋ฆฌ์คํธ์ ๋ชจ๋ ์์ ์ญ์
clear()๋ delete ๋ช
๋ น์ด๋ก ๋ฐฐ์ด์ ์ญ์ ํ๋ค์ ๋น ๋ฐฐ์ด์ ๋ค์ ๋ง๋ ๋ค. listSize์ pos๋ 0(์์ ์์น)์ผ๋ก ์ด๊ธฐํํ๋ค.
function clear() {
delete this.dataStore;
this.dataStore.length = 0;
this.listSize = this.pos = 0;
}
3.2.8 Contains: ๋ฆฌ์คํธ์ ํน์ ๊ฐ์ด ์๋์ง ํ๋จ
function contains(element) {
for (let i = 0; i < this.dataStore.length; ++i) {
if (this.dataStore[i] == element) {
return true;
}
}
return false;
}
ย
3.2.9 ๋ฆฌ์คํธ ํ์
function List() {
this.listSize = 0;
this.pos = 0;
this.dataStore = [];
// this.clear = clear;// this.find = find;// this.toString = toString;// this.insert = insert;this.append = append;
// this.remove = remove;this.front = front;
this.end = end;
this.prev = prev;
this.next = next;
// this.length = length;this.currPos = currPos;
this.moveTo = moveTo;
this.getElement = getElement;
// this.contains = contains;
}
// @ : ๋ฆฌ์คํธ ์ถ๊ฐ์ฉfunction append(element) {
this.dataStore[this.listSize++] = element;
}
// 3.2.9function front() {
this.pos = 0;
}
function end() {
this.pos = this.listSize - 1;
}
function prev() {
if (this.pos > 0) {
--this.pos;
}
}
function next() {
if (this.pos < this.listSize - 1) {
++this.pos;
}
}
function currPos() {
return this.pos;
}
function moveTo(position) {
this.pos = position;
}
function getElement() {
return this.dataStore[this.pos];
}
let names = new List();
names.append("C");
names.append("R");
names.append("Cy");
names.append("J");
names.append("B");
names.append("D");
// ์ฒซ๋ฒ์งธ ์์๋ก ์ด๋
names.front();
console.log(names.getElement());
// ํ ์์ ๋ค๋ก ์ด๋
names.next();
console.log(names.getElement());
// ๋ ์์ ๋ค๋ก ์ด๋ํ๋ค๊ฐ ํ ์์ ์์ผ๋ก ์ด๋
names.next();
names.next();
names.prev();
console.log(names.getElement());// C
3.3 ๋ฆฌ์คํธ์ ๋ฐ๋ณต
๋ฐ๋ณต์๋ฅผ ์ด์ฉํ๋ฉด List ํด๋์ค ๋ด๋ถ ์ ์ฅ์๋ฅผ ์ง์ ์ฐธ์กฐํ์ง ์๊ณ ๋ฆฌ์คํธ๋ฅผ ํ์ํ ์ ์๋ค. ๋ฆฌ์คํธ์ front, end, prev, next, currPos๋ฅผ ์ด์ฉํด ๋ฐ๋ณต์๋ฅผ ๊ตฌํํ ์ ์๋ค.
๋ฐ๋ณต์๋ ๋ฐฐ์ด์ ์ธ๋ฑ์ค์ ๋นํด ์๋์ ์ฅ์ ์ด ์๋ค.
- ๋ฆฌ์คํธ ์์์ ์ ๊ทผํ ๋ย ๋ด๋ถ ๋ฐ์ดํฐ ์ ์ฅ์๊ฐ ๋ฌด์์ธ์งย ๊ฑฑ์ ํ ํ์๊ฐ ์๋ค.
- ๋ฆฌ์คํธ์ ์ ์์๋ฅผ ์ถ๊ฐํ์ ๋ ํ์ฌ ์ธ๋ฑ์ค๊ฐ ์ธ๋ชจ ์๋ ๊ฐ์ด ๋๋ ๋ฐ๋ฉด ๋ฐ๋ณต์๋ฅผ ์ด์ฉํ๋ฉด ๋ฆฌ์คํธ๊ฐ ๋ฐ๋์ด๋ ๋ฐ๋ณต์๋ฅผ ๊ฐฑ์ ํ ํ์๊ฐ ์๋ค.
- List ํด๋์ค์ ์ฌ์ฉํ๋ย ๋ฐ์ดํฐ ์ ์ฅ์์ ์ข ๋ฅ๊ฐ ๋ฌ๋ผ์ ธ๋ ์ด์ ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์์์ ์ ๊ทผํ ์ ์๋ค.
๋ฐ๋ณต์ ์์
for (names.front(); names.currPos() < names.length(); names.next()) {
console.log(names.getElement);
}
ํ์ฌ ์์น๋ฅผ ๋ฆฌ์คํธ ์์ผ๋ก ์ค์ (front())ํ๋ค. ๊ทธ๋ฆฌ๊ณ currPos() ๊ฐ ๋ฆฌ์คํธ ๊ธธ์ด๋ณด๋ค ์์ ๋ ๋ฃจํ๋ฅผ ๋ฐ๋ณตํ๋ค. ๋ฃจํ๋ฅผ ๋ ๋๋ง๋ค next()๋ก ํ ์์์ฉ ์ ์งํ๋ค.
๋ฐ๋ ๋ฐฉํฅ ํ์ ์์
for (names.end(); names.currPos() >= 0; names.prev()) {
console.log(names.getElement);
}
ํ์ฌ ์์น๋ฅผ ๋ง์ง๋ง ์์๋ก ํ๋ค.(end()) prev()๋ฅผ ์ด์ฉํ์ฌ ํ์ฌ ์์น๊ฐ 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๋ ํ์ฌ ์์น๋ฅผ ๋ค๋ก ์ด๋์ํจ๋ค.
๋ฆฌ์คํธ๋ฅผ ํ์ํ ๋๋ง ๋ฐ๋ณต์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฉฐ ์์ ์ถ๊ฐ/์ญ์ ์๋ ์ฌ์ฉํ๋ฉด ์๋๋ค.
3.4 ๋ฆฌ์คํธ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
๋น๋์ค ๋์ฌ ์์ ์ ์ด์ํ ์ ์๋ ์์คํ
์์ ๋ฆฌ์คํธ๋ฅผ ์ด๋ป๊ฒ ํ์ฉํ ์ ์๋์ง ์์๋ณธ๋ค.
3.4.1 ํ ์คํธ ํ์ผ ์ฝ๊ธฐ
- The Godfather
- The Godfather: Part II
- The Dark Knight
- The Lord of the Rings: The Return of the King
- The Lord of the Rings: The Two Towers
- GoodFellas
์ ๋ด์ฉ์ผ๋ก ํ
์คํธ ํ์ผ์ ๋ง๋ ๋ค.
let fs = require("fs");
fs.readFile("films.txt", "utf8", function (err, data) {
let movies = data.split("\n");
console.log(movies);
});
File System ๋ชจ๋ - ํ ๋์ ๋๋ด๋ย Node.js. ํ์ผ ์ฒ๋ฆฌ์ ๊ด๋ จ๋ ์์
์ ํ๋ ๋ชจ๋๋ก, ๋ณดํต FileSystem์ ์ค์ฌ์ย fsย ๋ชจ๋์ด๋ผ๊ณ ์ค์ฌ ๋ถ๋ฆ
๋๋ค.(์ฑ
์ ์๋ ์ฝ๋์ ๋ค๋ฆ
๋๋ค.)
ํ
์คํธ ํ์ผ์ ๋ด์ฉ์ด ๋ฐฐ์ด๋ก ์ ์ฅ๋ ๋ ๊ฐํ ๋ฌธ์๊ฐ ๊ณต๋ฐฑ์ผ๋ก ์นํ๋๋ฏ๋ก ๋ฌธ์์ด ๋ฐฐ์ด์์ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ค. ๋ฐ๋ผ์ trim()์ ์ด์ฉํด ๊ฐ ์์์ ๊ณต๋ฐฑ์ ์ ๊ฑฐํ๋ ๋ฃจํ๋ฅผ ์ถ๊ฐํ๋ค.
function createArr(file) {
let fs = require("fs");
let arr = fs.readFile(file, "utf8", function (err, data) {
let arr = data.split("\n");
// console.log(movies);for (let i = 0; i < arr.length; ++i) {
arr[i] = arr[i].trim();
}
return arr;
});
return arr;
}
3.4.2 ๋ฆฌ์คํธ๋ก ์์ ์ ๊ด๋ฆฌํ๊ธฐ
movies ๋ฐฐ์ด์ ๋ด์ฉ์ ๋ฆฌ์คํธ๋ก ์ ์ฅํ๋ค.
let movieList = new List();
for (let i = 0; i < movies.length; ++i) {
movieList.append(movies[i]);
}
function displayList(list) {
for (list.front(); list.currPos() < list.length(); list.next()) {
console.log(list.getElement());
}
}
displayList()๊ฐ ๋ฌธ์์ด ๋ฑ ๋ค์ดํฐ๋ธ ํ์์ ํฌํจํ๋ ๋ฆฌ์คํธ์๋ ์ ๋์ํ์ง๋ง Customer ๊ฐ์ฒด์์ ์ ์๋ํ์ง ์์ ๊ฐ์ ์ด ํ์ํ๋ค.
function displayList(list) {
for (list.front(); list.currPos() < list.length(); list.next()) {
if (list.getElement() instanceof Customer) {
console.log(
list.getElement()["name"] + ", " + list.getElement()["movie"]
);
} else {
console.log(list.getElement());
}
}
}
instanceof ์ฐ์ฐ์๋ฅผ ์ด์ฉํด Customer ๊ฐ์ฒด์ธ์ง ํ๋์ฉ ํ์ธํ๊ณ Customer ๊ฐ์ฒด๋ฉด ๋ ํ๋กํผํฐ๋ฅผ ์ธ๋ฑ์ค๋ก ํ์ฉํด ๊ณ ๊ฐ์ด ๋น๋ฆฐ ์ํ ์ด๋ฆ์ ๊ฐ์ ธ์จ๋ค. ํด๋น ๊ฐ์ฒด๊ฐ ์๋๋ฉด ์์๋ฅผ ๊ทธ๋๋ก ๋ฐํํ๋ค.
let customers = new list();
function Customer(name, movie) {
// ๊ณ ๊ฐ๋ช
๊ณผ ๊ณ ๊ฐ์ด ๋น๋ฆฐ ์ํ ์ด๋ฆ์ ํฌํจํ๋ ๊ฐ์ฒด ์์ฑ์ ํจ์this.name = name;
this.movie = movie;
}
function checkOut(name, movie, filmList, customerList) {// ๊ณ ๊ฐ์ด ์ํ๋ฅผ ๋์ฌํ๋ ๊ธฐ๋ฅ์ ํจ์if (movieList.contains(movie)) {// ์ํ๋ฅผ ์ด์ฉํ ์ ์์ผ๋ฉด ์์ ์ํ ๋ชฉ๋ก์์ ์ง์ฐ๊ณ ๊ณ ๊ฐ์ ์ํ ๋ชฉ๋ก์ ์ถ๊ฐํ๋ค.let c = new Customer(name, movie);
customerList.append(c);
filmList.remove(movie);
} else {
console.log(movie + " is not available.");
}
}
checkOut() ์ ์ํ๋ฅผ ๋์ฌํ ์ ์๋์ง ํ์ธํ๋ค. ๋์ฌํ ์ ์๋ ์ํ๋ฉด ์ํ ์ ๋ชฉ, ๊ณ ๊ฐ๋ช
์ ์ด์ฉํด Customer ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค. ๋ง๋ ๊ฐ์ฒด๋ฅผ ๊ณ ๊ฐ ๋ฆฌ์คํธ๋ก ์ถ๊ฐํ๊ณ ์ํ ๋ฆฌ์คํธ์์ ๋์ฌํ ์ํ๋ฅผ ์ญ์ ํ๋ค. ๋์ฌํ ์ ์๋ ์ํ๋ฉด ๊ฐ๋จํ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ค.
checkOut()์ ํ
์คํธํ๋ ์ฝ๋
let movies = createArr("films.txt");
let movieList = new List();
let customers = new List();
for (let i = 0; i < movies.length; ++i) {
movieList.append(movies[i]);
}
console.log("Available movies: \n");
displayList(movieList);
checkOut("Jane Doe", "The Godfather", movieList, customers);
console.log("\nCustomer Rentals: \n");
displayList(customers);
์คํํ๋ฉด "The Godfather"๊ฐ ์ญ์ ๋ ์ํ ๋ชฉ๋ก์ด ์ถ๋ ฅ๋๊ณ ๊ณ ๊ฐ์ด ๋์ฌํ ์ํ ๋ฆฌ์คํธ๊ฐ ์ถ๋ ฅ๋๋ค.