์ฐ๋ฆฌ๋ ์ด๋ป๊ฒ ๋ ์ง์ ์๊ฐ์ ๋ค๋ฃฐ ์ ์์๊น? ์น์ ํ๊ฒ๋ ์ฐ๋ฆฌ์๊ฒ๋ ๋ ์ง ๊ฐ์ฒด๊ฐ ์๋ค.
๋ ์ง ๊ฐ์ฒด๋ฅผ ํธ์ถํ๋ฉด ์๊ฐ๊ณผ ๋ ์ง๋ฅผ ์ป์ ์ ์๋ค.
var rightNow = new Date();
console.log(rightNow)
์ฝ์ ๋ก๊ทธ
Fri Jan 31 2020 10:28:58 GMT+0900 (ํ๊ตญ ํ์ค์)
๋ธ๋ผ์ฐ์ ๋ง์ ์๊ฐ์ ํํํ๋ ๋ฐฉ์์ ๋ชจ๋ ๋ค๋ฅด๋ค.
ํ์ง๋ง ๋ณดํต ์ด ๋ฐ์ดํฐ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ ๋ณด๋ค๋ ๊ฐ๊ณต์ ํด์ ์ฌ์ฉํ๋ค,
GMT
Greenwich Mean Time
์ด ์ฌ์ง์ ๋ณด๋ฉด GMT ๋ผ๊ณ ๋์ค๋ ๋ถ๋ถ์ด ์๋๋ฐ ์ด๊ฒ์ GMT๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ๋ง๋ ์๊ฐ์ด ๋น ๋ฅธ์ง๋ฅผ ํํํด์ฃผ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ new Date() ๋ก ์ป์ด์จ ๊ฐ์ Date ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ค๋ฅธ ํจ์๋ก๊ฐ ๋ ์ง, ์๊ฐ ๋ฑ์ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
let rightNow = new Date();
let year = rightNow.getFullYear();
let month = rightNow.getMonth() +1;
let date = rightNow.getDate();
let day = rightNow.getDay();
let currentHour = rightNow.getHours();
let currentMin = rightNow.getMinutes();
๊ฐ ๊ฐ๋ค์ ์ฝ์๋ก๊ทธ์ ์ณ๋ณด๋ฉด
2020
1
31
5
38
10
์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์
1. getMonth() + 1
๋ง์ฝ, ์ง๊ธ์ด 1์์ด๋ผ๋ฉด getMonth() ์์ฒด์ ๊ฐ์ 0์ด๋ค.
์๋ํ๋ฉด ์ฒซ๋ฒ์งธ ๋ฌ์ด๊ณ index ์์ผ๋ก๋ ์ฒซ๋ฒ์งธ๋ 0์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ +1์ ํด์ฃผ์ด์ผ ํ๋ค.
์ฐ๋ฆฌ๋ ์ด๋ฏธ rightNow๋ฅผ ์ ์ํ๊ธฐ ๋๋ฌธ์ ์ด ๊ฐ์ ์ ์ํ ๊ทธ ์๊ฐ ์์ฒด๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ฆ, ๋งค ์ด ์๊ฐ๋ง๋ค ํ๋ฅด๋ ์๊ฐ์ ๋ด๊ณ ์๋ ๊ฒ์ด ์๋๋ค.
getTime
let rightNow = new Date();
let time = rightNow.getTime();
getTime ๋ฉ์๋๋ ๋ ์ง์ ๋ฐ๋ฆฌ ์ด๋ฅผ ๋ฐํํ๋ค.
์์ ๊ฒ์ ์คํํด๋ณด๋ฉด,
1580435042650
์ด๋ฌํ ์ซ์๊ฐ ๋ฐํ๋๋๋ฐ, ์ด๊ฒ์ ์ง๊ธ์ ์๊ฐ์ด ๋ฐ๋ฆฌ์ด๋ก ํํ๋ ๊ฒ์ด๋ค.
์ด ๋ฐ๋ฆฌ์ด์ ๊ธฐ์ค์ด ๋๋ ๊ฒ์ 1970๋
1์ 1์ผ์ด๋ค.
๊ทธ๋์ ์ ๋ฐ๋ฆฌ์ด์ ์๋ฏธ๋ ์ 1970๋
1์ 1์ผ๋ถํฐ 1580435042650 ์ด๊ฐ ์ง๋ฌ๋ค๋ ์๋ฏธ์ด๋ค.
์ด๋ ๊ณ์ ํ๋ฅด๊ธฐ ๋๋ฌธ์, ๋ง์ฝ ์ง๊ธ ๋ค์ ์ ํจ์๋ฅผ ์คํํด์ ๊ฐ์ ๋ฐ์๋ณด๋ฉด ์์ ๊ฐ๋ณด๋ค ๋ ํฐ ๊ฐ์ด ๋์จ๋ค.
์ฆ ํ์ฌ์ ๊ฐ > ๊ณผ๊ฑฐ์ ๊ฐ
ํน์ ๋ ์ง์ Date
์ฐ๋ฆฌ๊ฐ ํ์ฌ ์๊ฐ์ ๋ฐ์ ๋ new Date()
๋ฅผ ํ์๋ค. ์ด๋ ๋งค๊ฐ๋ณ์๋ฅผ ๋น์๋์ง ์๊ณ ํน์ ํ ๋ ์ง๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฃ์ผ๋ฉด, ํด๋น ๋ ์ง์ Date๋ฅผ ๋ฐํ ๋ฐ์ ์ ์์ต๋๋ค.
let date1 = new Date('December 17, 2019 03:24:00');
let date2 = new Date('2019-12-17T03:24:00');
let date3 = new Date(2019, 5, 1);
//๊ฒฐ๊ณผ๊ฐ
2019-12-16T18:24:00.000Z
2019-12-16T18:24:00.000Z
2019-05-31T15:00:00.000Z
Quiz
๋ง๋์ด ๊ณ์ฐํ๊ธฐ
function getWesternAge(birthday) {
let birthDay = new Date(birthday) // ์์ผ ๋ ์ Date ์ป๊ธฐ
let birthYear = birthDay.getFullYear();
let birthMonth = birthDay.getMonth()+1;
let birthDate = birthDay.getDate();
let birthMonthDate = (birthMonth+"") + (birthDate+"")
let today = new Date();
let todayYear = today.getFullYear();
let todayMonth = today.getMonth()+1;
let todayDate = today.getDate();
let todayMonthDate = (todayMonth+"") + (todayDate+"")
if( Number(birthMonthDate) > Number(todayMonthDate)){
return todayYear - birthYear-1;
} else {
return todayYear - birthYear;
}
}
Number ์ซ์ ๋ฉ์๋
์ฌ๋ฌ๊ฐ์ง ์ํ ๊ณ์ฐ์ ๋ํ ๋ฉ์๋
https://www.w3schools.com/js/js_math.asp
์ ๋๊ฐ ๊ตฌํ๊ธฐ, sin, cos, ์ ๊ณฑ๊ทผ ๋ฑ๋ฑ Math ๊ฐ์ฒด์๋ ์ํ ๊ณ์ฐ์ ๋ํ ๋ฉ์๋๊ฐ ๋ง์ด ์์ต๋๋ค. ๊ทธ ์ค์์ ๋ช๊ฐ์ง๋ง ์ดํด๋ด ์๋ค
Round ๋ฐ์ฌ๋ฆผ ํจ์
Math.round()
console.log(Math.round(2.5)) // 3
์ฐ๋ฆฌ๊ฐ ์ฌ๋๋ค์๊ฒ ์ซ์ ๋ฐ์ดํฐ, ์๋ฅผ ๋ค๋ฉด ํ์ ๊ณผ ๊ฐ์ ์ซ์๋ฅผ ๋ฐ๊ณ ๊ทธ์ ๋ํ ํ๊ท ๊ฐ์ ๊ตฌํ๋ค๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ ์์์ ์ผ๋ก ๋์ค๊ฒ ๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ์์์ ๊ฒฐ๊ณผ๋ฅผ ๊น๋ํ๊ณ ๋ณด๊ธฐ ์ฝ๊ฒ ๋ง๋ค๊ธฐ ์ํด์ ์ฐ๋ฆฌ๋ ๋ฐ์ฌ๋ฆผ, ์ฌ๋ฆผ,๋ด๋ฆผ๊ณผ ๊ฐ์ ํจ์๋ฅผ์ฌ์ฉํ๊ฒ ๋๋ค.
Ceil ์ฌ๋ฆผ ํจ์
Math.ceil()
console.log(Math.ceil(2.3)) // 3
ceil์ ์ฒ์ฅ์ ์๋ฏธํ๋ฏ๋ก ์ฒ์ฅ๊น์ง ์ฌ๋ฆฐ๋ค๊ณ ์ฐ์ํ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
Floor ๋ด๋ฆผ ํจ์
Math.floor()
console.log(Math.floor(2.9)) // 2
floor์ ๋ฐ๋ฅ์ ์๋ฏธํ๋ฏ๋ก, ๋ฐ๋ฅ๊น์ง ๋์ด๋ด๋ฆฐ๋ค๊ณ ์ฐ์ํ๋ฉด ๋๊ฒ ์ฃ ?
Random
์๋ฐ์คํฌ๋ฆฝํธ์๋ ๋๋คํ ์ซ์๋ฅผ ๋ง๋ค์ด์ฃผ๋ ๋๋ค ํจ์๊ฐ ์์ต๋๋ค.
var randomNumber = Math.random()
console.log(randomNumber);
// 0.7399028302061925
์ด๋ ๋์ค๋ ๊ฒฐ๊ณผ๋ 0.0000000000000000์์ 0.9999999999999999 ์ ๊ฐ
์ฆ 0์์ 1๋ฏธ๋ง์ ๊ฐ์ ๋ณด์ฌ์ค๋๋ค.
์ด๋ฌํ ๊ฒฐ๊ณผ์ ๋ด๊ฐ ์ํ๋ ๋ฒ์๋ก ๊ณฑํ๋ฉด ์ฐ๋ฆฌ๊ฐ ์๊ฐํ๋ ๋๋คํ ์ซ์๋ฅผ ์ป์ ์ ์์ต๋๋ค.
๋ง์ฝ ํ์๋ฆฌ ์ซ์๋ฅผ ์ป๊ณ ์ถ๋ค๋ฉด?
var randomNumber = Math.random();
console.log(Math.floor(randomNumber*10));
// ex) 9.697009826327621
์ด๋ ๊ฒ ๋์จ ๋๋คํ ๊ฐ์์ ๋ด๊ฐ ์ป๊ณ ์ถ์ 9๋ง ์ทจํ๊ณ ๋๋จธ์ง๋ ๋ด๋ฆผํจ์๋ก ๋ฒ๋ฆฌ๊ณ , 9๋ง ๋จ๊ธฐ๋ ๊ฒ์ ๋๋ค. ์ด๋ฐ ๋ฐฉ์์ ํตํด์ ์ฐ๋ฆฌ๋ ๋ก๋๋ฅผ ์ถ์ฒจํ๊ฑฐ๋ ์ด๋ฒคํธ ๋น์ฒจ์๋ฅผ ๊ตฌํ๋ ๋ฑ์ ๋๋คํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ฐธ ์ ์ฉํ์ฃ ?
Quiz
์ต์(min), ์ต๋๊ฐ(max)์ ๋ฐ์ ๊ทธ ์ฌ์ด์ ๋๋ค์๋ฅผ returnํ๋ ํจ์๋ฅผ ๊ตฌํํด๋ด
์๋ค.
function getRandom(min, max){
return Math.floor((Math.random() * (max - min + 1)) + min);
}
์ max - min + 1 ์ธ๊ฐ?
์ฐ๋ฆฌ๊ฐ ๋ง์ฝ 3๋ถํฐ 10๊น์ง์ ๋๋คํ ์ซ์๋ฅผ ์ป๊ณ ์ถ๋ค๋ฉด?
์ฌ๊ธฐ์ ์ง๋ฌธ, 3๋ถํฐ 10๊น์ง๋ ์ซ์๊ฐ ๋ช ๊ฐ ์์๊น?
3, 4, 5, 6, 7, 8, 9, 10 ์ด 8๊ฐ์ ์ซ์๊ฐ ์๋ค.
์ด๊ฑธ ๋ค ์จ๋ณด์ง ์์๋ ๊ตฌํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์๊น์?
10 - 3 = 7
7 + 1 = 8 ( ์ฐพ์๋ค์! )
์ต๋๊ฐ์์ ์ต์๊ฐ์ ๋นผ๊ณ , + 1 ์ ๋ํ๋ฉด ๋ช ๊ฐ์ธ์ง ๊ตฌํ ์ ์๋ ๊ฒ์
๋๋ค.
๊ทธ๋์ max - min + 1์ ํด์ค๋๋ค.
Math.random() (max - min + 1)
0.0000000000000000์์ 0.9999999999999999 ์ ๊ฐ์, 8์ ๊ณฑํ๋ค๊ณ ํ๋ฉด?
0._ ~ 7._ ์ ๋๋คํ ๊ฐ์ด ๋์ค๊ฒ ๋ฉ๋๋ค.
1 8์ 8์ด์ง๋ง, Math.random()์ผ๋ก ๋์ค๊ฒ ๋ ๊ฐ์ 1์ ์ ๋ ๋์ง ์์ ๊ฒ์
๋๋ค.
๊ทธ๋ฐ๋ฐ ์ฐ๋ฆฌ๊ฐ ๊ตฌํ๊ณ ์ถ์ ๊ฐ์ 0๋ถํฐ 7๊น์ง์ ๊ฐ์ด ์๋์ฃ , 3๋ถํฐ 10๊น์ง์ ๊ฐ์
๋๋ค.
๊ฐ์ด ์ค์๋์? ๋ง์ต๋๋ค. 0 ~ 7 ๊ทธ๋ฆฌ๊ณ 3 ~ 10.
๋ญ๊ฐ ๋ํ๊ณ ์ถ์ ๋ง์์ด ๋ค์ฃ ?
Math.random() * (max - min + 1) + min
์ฐ๋ฆฌ๋ 3์์ 10๊น์ง์ ๊ฐ์ ๊ตฌํ๊ณ ์ถ์ ๊ฒ์ด๋ฏ๋ก
0._ ~ 7._ + 3์ ํด์ฃผ๋ฉด, 3.___ ~ 10.___ ์ ๊ฐ์ด ๋์ค๊ฒ ๋๋ ๊ฒ์ด์ฃ .
Math.floor((Math.random() * (max - min + 1)) + min);
๊น๋ํ ์ ์๋ฅผ ์ป๊ธฐ ์ํด์ ๋๋จธ์ง ์์์ ์ ๋ฒ๋ ค์ผ ํฉ๋๋ค.
๊ทธ๋์ Math.floor๋ก ์ด ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ธ์ค๋๋ค.
๋ง์ฝ ์ฐ๋ฆฌ๊ฐ ์ด๋ฌํ ์ ๋ณด๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด์ ๊ตฌํํ๋ ค๊ณ ํ๋ค๋ฉด, ์ด๋ป๊ฒ ํด์ผํ ๊น.
let plan1Name = "Basic";
let plan1Price = 3.99;
let plan1Space = 100;
let plan1Data = 1000;
let plan1Pages = 10;
let plan2Name = "Professional";
let plan2Price = 5.99;
let plan2Space = 500;
let plan2Data = 5000;
let plan2Pages = 50;
let plan3Name = "Ultimate";
let plan3Price = 9.99;
let plan3Space = 2000;
let plan3Data = 20000;
let plan3Pages = 500;
์ด๋ฐ ์์ผ๋ก ํ๋์ฉ ํ๋์ฉ ํ๋์ฝ๋ฉ์ ํด์ผ ํ ๊น....? ๋ง์ฝ ์ด๋ฌํ ๋ฐ์ดํฐ๊ฐ ๋ฐฑ๋ง๊ฐ๋ผ๋ฉด? ๊ทธ์ค์์ ๋ด๊ฐ ์ํ๋ ์ ๋ณด๋ฅผ ํ๋์ฉ ๋ฝ์์์ผ ํ๋ค๋ฉด? ์ผ๋ง๋ ๋ณต์กํ ์ง ์์์ด ์กฐ์ฐจํ๊ณ ์ถ์ง ์๋ค์. ์ด๋ฌํ ๋ณต์กํ ๋ฐ์ดํฐ, ๊ฐ๋ค์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ ๊ฒ์ด ๋ฐ๋ก object์
๋๋ค.
์์ ๋ฐ์ดํฐ๋ฅผ object ์์ผ๋ก ๋ค์ ํํ ํด๋ณด๋ฉด,
์ฐ๋ฆฌ์๊ฒ๋ ์ง๊ธ plan 1, plan 2, plan 3๋ผ๋ ์ค๋ธ์ ํธ๊ฐ ์๋ค. ์ด ์ค๋ธ์ ํธ์๋ name, price, space, transfer, pages ๋ผ๋ property๊ฐ ์์ต๋๋ค. plan 1์ name, plan 1์ ๊ฐ๊ฒฉ ๋ฑ๋ฑ ์ด๋ฌํ ๊ฐ ํ๋กํผํฐ์ ๋ค์ด๊ฐ๋ ๋ด์ฉ์ด ๊ฐ(value) ์ ๋๋ค.
๊ทธ๋ฌ๋ฉด, ์ด๋ฌํ ๊ฐ์ฒด๋ ์ด๋ค ์์ผ๋ก ์ ์ธํด์ผ ํ ๊น์?
๊ฐ์ฒด๋ ๊ธฐ๋ณธ์ ์ผ๋ก {} ์ค๊ดํธ๋ก ๊ฐ์ธ์ ธ ์์ต๋๋ค.
๋ง์ฝ ๋น ๊ฐ์ฒด๋ผ๊ณ ํ๋ฉด
var newObject = {}
๊ฐ ๋๊ฒ ์ฃ ?
๊ทธ ์์๋ ํด๋ก : ์ผ๋ก ๊ตฌ๋ถ๋ ์ด๋ฆ(propertyName) , ๊ฐ PropertyValue์ด ๋ค์ด๊ฐ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ชฉ๋ก์ , ์ผํ๋ก ๊ตฌ๋ถํฉ๋๋ค.
var student1 = {
name : "carmin",
hobby : "exercise",
age : 20,
favoriteAnimal: "dog"
}
๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ ์ฃผ์ ํด์ผํ๋ ๊ฒ๋ค์ด ์์ต๋๋ค.
-property ์ด๋ฆ์ ์ค๋ณต์ด ๋ ์ ์์ต๋๋ค.
-property ์ด๋ฆ๊ณผ property ๊ฐ ์ฌ์ด์๋ ๊ผญ : ํด๋ก ์ด ์์ด์ผ ํ๋ค.
-property๋ฅผ ์ถ๊ฐํ ๋๋ ,(์ฝํ)๊ฐ ์์ด์ผ ํ๋ค.
-property ๊ฐ์๋ ๊ทธ ์ด๋ ํ type( string, number, array, object, funcrtion, etc)
๋ ๊ฐ๋ฅํ๋ค.
๊ทธ๋ ๋ค๋ฉด, ๊ฐ ๊ฐ์ฒด์ property๊ฐ์ ์ ๊ทผ ํ๊ธฐ ์ํด์๋ ์ด๋ป๊ฒ ํด์ผํ ๊น์?
๋ฐฉ๋ฒ์ ๋๊ฐ์ง์ ๋๋ค.
student1๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ๋๋ฌผ์ ์๊ณ ์ถ๋ค๋ฉด?
student1.favoriteAnimal
student1์ ์ด๋ฆ์ด ๊ถ๊ธํ๋ค๋ฉด?
student1["name"]
์ฌ๊ธฐ์ ํฌ์ธํธ๋
๋๋ฒ์งธ ๋ฐฉ๋ฒ์์ [] ์ฌ์ด์ ํ๋กํผํฐ name์ ๋ฃ์ ๋๋ ๋ฐ๋์ "" ์๋ฐ์ดํ๋ก ๊ฐ์ผ์ ๋ฃ์ด์ผ ํ๋ค๋ ๊ฒ์
๋๋ค.
Scope
์์ด ์ฌ์ ์ scope์ ์๋ฏธ๋ฅผ ๊ฒ์ํด๋ณด๋ฉด '๋ฒ์'๋ผ๋ ๋ป์ด ๋์ต๋๋ค.
scope๋ ๋ณ์๊ฐ ์ฐ์ผ ์ ์๋ ๋ฒ์๋ฅผ ์๋ฏธํฉ๋๋ค.
์ด๋ค ๋ณ์๋ ํน์ ํ ๋ฒ์์์๋ง ์ฐ์ผ ์ ์๊ณ , ์ด๋ค ๋ฒ์๋ ๊ทธ ์ด๋ ๊ณณ์์๋ ๋ค ์ธ ์ ์์ต๋๋ค.
Block
block์ด๋ {} ์ผ๋ก ๊ฐ์ธ์ง ๋ถ๋ถ์ ์๋ฏธํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ฐ๋ function, if, for๋ฌธ์ ๋ด๋ถ์ ์๋ ๊ฒ๋ค ๋ชจ๋ ํ๋์ block ์
๋๋ค.
๋ง์ฝ, ๋ณ์๊ฐ block {} ์์์ ์ ์ ๋์๋ค๋ฉด, ๊ทธ ๋ณ์๋ ์ค๋ก์ง ๊ทธ {} ๋ด๋ถ ์์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ ๊ฒ ๋ธ๋ก {} ์์์ ์ ์๋ ๋ณ์๋ฅผ local(์ง์ญ) ๋ณ์๋ผ๊ณ ํฉ๋๋ค.
function sayHi(){
let greeting = "hello"
return greeting;
}
console.log(greeting) // ์๋ฐ์คํฌ๋ฆฝํธ ์๋ฌ!
๋ง์ฝ ์ฝ์์ฐฝ์ ์ณ๋ณธ๋ค๋ฉด VM619:1 Uncaught ReferenceError: greeting is not defined at <anonymous>:1:13
์ด๋ฌํ ์๋ฌ ๋ฉ์ธ์ง๋ฅผ ๋ณผ ์ ์์ ๊ฒ์
๋๋ค. greeting์ด ์ ์ ๋์ด ์์ง ์๋ค๊ณ ํ๋ค์. ์๋ํ๋ฉด, greeting ์ด๋ผ๋ ๋ณ์๋ sayHi๋ผ๋ ์ง์ญ ์ค์ฝํ ์์์๋ง ์ธ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
Global Scope
์์์ block ์ด๋ผ๋ ๊ณต๊ฐ์ด ์๋ค๊ณ ํ์ฃ . ๊ทธ๋ ๋ค๋ฉด, ๊ทธ ๋๋จธ์ง ๊ณต๊ฐ์ ์ด๋์ผ๊น์? ๋ฐ๋ก Global scope ์ ์ญ ์ค์ฝํ์
๋๋ค.
์ ์ญ ์ค์ฝํ๋ ์ฝ๋ ์ด๋์์๋ ์ ๊ทผํ ์ ์๋ ๋ฒ์ ์
๋๋ค.
Global variable
์ ์ญ๋ณ์๋ ์ด๋ฌํ ์ ์ญ ์ค์ฝํ์์ ๋ง๋ค์ด์ง, ์ ์๋ ๋ณ์ ์
๋๋ค.
let greeting = "hello"
function sayHi(){
console.log(greeting)
return greeting;
}
console.log(sayHi());
// hello
// hello
greeting์ ๋ธ๋ก ๋ฐ์ ์ ์ญ ์ค์ฝํ์์ ์ ์ธ๋ ์ ์ญ ๋ณ์ ์ด๊ธฐ ๋๋ฌธ์ sayHi() ํจ์ ์์์๋ ์คํ๋์์ต๋๋ค.
Scope์ ์ค์ผ
๊ธ๋ก๋ฒ ์ค์ฝํ์ ๋ก์ปฌ ์ค์ฝํ๋ฅผ ์ ๊ตฌ๋ถํด์ ์จ์ผ ํฉ๋๋ค.
๊ธ๋ก๋ฒ ๋ณ์๋ฅผ ์ ์ธํ๋ฉด, ๊ทธ ๋ณ์๋ ํจ์์ ๊ทธ ์ด๋ ๊ณณ์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๊ฒ์ globalnamespace๋ผ๊ณ ํฉ๋๋ค.
namespace๊ฐ ๋ญ์ผ? ๋ผ๋ ์๊ฐ์ด ๋์ค ์ ์์ต๋๋ค. namespace๋ ๋ณ์ ์ด๋ฆ์ ์ฌ์ฉํ ์ ์๋ ๋ฒ์๋ฅผ ๋งํฉ๋๋ค.
์ด๊ฒ์ scope๋ผ๊ณ ๋ ํ๊ณ , ๋ณ์์ด๋ฆ์ ์ด์ผ๊ธฐ ํ ๋๋ namespace๋ผ๊ณ ๋ ํฉ๋๋ค.
global๋ณ์๋ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋ ์์ ๊น์ง ๊ณ์ ์ด๋์๋ ์ธ ์ ์์ต๋๋ค. ๋ฐ๋ฉด์ {} ์ค์ฝํ ์์์ ์์ฑ๋ local ๋ณ์๋ block์ด ๋๋๋ฉด ์ธ ์ ์์ต๋๋ค.
๋ง์ฝ, global ๋ณ์๊ฐ ๊ณ์ํด์ ์กด์ฌํด์ ๊ทธ ๊ฐ์ด ๊ณ์ํด์ ๋ฐ๋๋ค๋ฉด ๋์ค์ ํผ๋์ด ์ค๊ฑฐ๋ ๋ฐ์ดํฐ๊ฐ ๊ณ์ํด์ ๋ฐ๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์๋ ์์ต๋๋ค. ์์๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
const music = "BTS" // ๊ฐ์ด ๋ณํ์ง ์๋ const
const pop = "halsey" // const ์ฌ์ฉ
let award = "grammy" // ๊ฐ์ด ๋ณํ๋ let์ ์ฌ์ฉ
const theStage = () => {
award = "BMA";
return "Special Stage :" + music + 'feat' + pop + "in" + award;
console.log(theStage());
console.log(award)
//Special Stage :BTSfeathalseyinBMA
//BMA
์์ ์์๋ฅผ ๋ณด๋ฉด award๋ ์ ์ญ ์ค์ฝํ์์ ๋ง๋ค์ด์ง ์ ์ญ ๋ณ์์
๋๋ค. ํ์ง๋ง let์ผ๋ก ์ ์ธ์ด ๋์ด์ ๊ฐ์ด ๋ฐ๋ ์ ์์ต๋๋ค.
์๋๋ ๋ค๋ฅผ๊น, theStage๋ผ๋ ํจ์์์ award์ ๊ฐ์ ํ ๋นํ๊ณ ๊ทธ ๊ฒฐ๊ณผ award๋ผ๋ ์ ์ญ ๋ณ์์ ๊ฐ์ด "grammy" ์์ "BMA"๋ก ๋ฐ๋์์ต๋๋ค.
์ด๋ฌํ scope์ ์ค์ผ์ ๋ง๊ธฐ ์ํด์๋ global ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ต์ํ ํ๊ณ ์ต๋ํ ๋ช ํํ ๋ธ๋ก ์์์ let, const๋ฅผ ์ฌ์ฉํ๊ณ ๋ณ์๋ฅผ ์๋กญ๊ฒ ( ๊ฒน์น์ง ์๊ฒ ) ๋ง๋ค์ด ๋ด๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ข์ Scoping ์ต๊ด์ ๊ธฐ๋ฆ ์๋ค!!
function whatIs(type) {
let description;
switch (type) {
case 'scope':
description = '๋ณ์๊ฐ ์ ์ธ๋๊ณ ์ฐ์ผ ์ ์๋ ๋ฒ์';
break;
case 'block':
description = ' {},์ค๊ดํธ๋ก ๊ฐ์ธ์ง๊ฒ. ex)function, if๋ฌธ, for๋ฌธ';
break;
case 'global scope':
description = '์ ์ญ. block ์ ๋ฐ๊นฅ ๋ถ๋ถ. ์ด๋ ๊ณณ์์๋ ์ ๊ทผ ๊ฐ๋ฅ';
break;
case 'global variable':
description = '์ ์ญ ์ค์ฝํ์์ ์ ์ธ๋ ๋ณ์';
break;
case 'block scope':
description = 'block ์์ ์๋ ๋ถ๋ถ';
break;
case 'local variable':
description = 'block ์์์ ์ ์ธ๋ ๋ณ์. ๋ธ๋ก์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ';
break;
case 'global namespace':
description = '์ด๋ ๊ณณ์์๋ ์ฌ์ฉํ ์ ์๋ ์ ์ญ ๋ณ์์ ์ด๋ฆ';
break;
case 'scope pollution':
description = '๋ณ์์ด๋ฆ, ๋ณ์์ ๋ฒ์๊ฐ ํผ์ฉ๋์ด ์๋ ์ํฉ';
break;
default :
description = ''
break;
}
return description;
}
ํด๋์ค๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ์
๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ฌด์์ผ๊น์?
ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ค๋ก ๊ตฌ์ฑํ๊ณ , ๊ทธ ๊ฐ์ฒด๋ค ๊ฐ์ ์๋ก ์ํธ์์ฉ ํ๋๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํฉ๋๋ค. ์ด๋ฌํ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์์ด์ class, ๊ฐ์ฒด, ๊ฐ์ฒด ์งํฅ์ ์ค์ํ ์ฃผ์ ์
๋๋ค.
๊ทธ๋ผ ๋๋์ฒด ๊ฐ์ฒด ์งํฅ์ด๋ ๋ฌด์์ธ๊ฐ?
์ฐ์ ๊ฐ์ฒด๋, ์์ด๋ก object , ์๋ฏธ๋ ์ฌ๋ฌผ์ด๋ผ๋ ๋ป์
๋๋ค.
๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ๊ฐ์ฒด๊ฐ ์์ฃ . ์์์ { name = "carmin"} ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ํ์
์ด ์์ต๋๋ค.
๊ทธ ๊ฐ์ฒด์ ์ด ๊ฐ์ฒด๋ ์กฐ๊ธ ๋ค๋ฅธ๋ฐ์, ์ฌ๊ธฐ์์ ๊ฐ์ฒด๋ ํ์ ํ ๋ก์ง์ ๊ฐ์ง๊ณ ์๋ ํ๋(method)์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ํ ( ๋ฉค๋ฒ ๋ณ์ ) ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ์
๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ตฌ์กฐ์ ํ์ ์ง๋๊ณ , ๋น์ทํ ๋ชจ์์ ๊ฐ์ฒด๋ฅผ ์ฝ๊ฒ ๋ง๋ค์ด ๋ผ ์ ์์ต๋๋ค.
๋ง์ฝ, ์ฐ๋ฆฌ๊ฐ 'bmw' ๋ผ๋ ์ฐจ๋ฅผ ๊ฐ์ฒด๋ก ์ ์ํด๋ณธ๋ค๊ณ ํฉ์๋ค.
์ด bmw๋ผ๋ ๊ฐ์ฒด๋, 5๊ฐ์ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
name, price, getName, getPrice, applyDiscount
let bmw = {
name : "bmw"
price : 4000,
getName : function(){
return this.name;
},
getPrice: function(){ // ์ด๋ ๊ฒ ๊ฐ์ฒด์ ๊ฐ์ ํจ์๋ฅผ ํ ๋นํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
return this.price;
},
applyDiscount : function(discount){
return this.price * discount;
}
}
}
์ด ๊ฐ์ฒด์์ getPrice ํจ์๋ฅผ ํธ์ถํด๋ณด๊ฒ ์ต๋๋ค.
const bmwPriceByFunction = bmw.getPrice(); /// 4000
์ด๋ ๊ฒ ๊ฐ์ฒด์ ๋ด๋ถ ์์์ ํด๋น ๊ฐ์ฒด์ ํํผํฐ๋ฅผ ์ ๊ทผํ๋ ค๋ฉด this๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ getPrice ๊ฐ ํจ์์์, this(bmw)์ price ํค์ ์ ๊ทผํ ์ ์์๊ณ ๊ทธ ๊ฐ์ ๊ตฌํด์ฌ ์ ์์๋ ๊ฒ์ ๋๋ค.
๋ง์ฝ ์ฐ๋ฆฌ๊ฐ bmw ๋ฟ๋ง ์๋๋ผ ๋๋ณด๋ฅด๊ธฐ๋, ์๋ํ, sm์๋ฆฌ์ฆ ๋ฑ ์ ๋ง์ ์ฐจ๋ค์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค๋ฉด ๋งค๋ฒ ์์์ ํ ๊ฒ์ฒ๋ผ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผ ํ ๊น์? ์๋๋๋ค.
ํ์ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ class ํด๋์ค๋ฅผ ์์ฑํด์ ์ด๋ฌํ ๊ฐ์ฒด๋ค์ ๋ง๋ค์ด ๋ผ ์ ์์ต๋๋ค.
์์ฑ์ (Constructor)
classํด๋์ค๋, ์ด๋ฌํ ๊ฐ์ฒด์ ์ค๊ณ๋์
๋๋ค.
๊ทธ๋ฆฌ๊ณ object์ class์ ๊ฐ์ฅ ํฐ ์ฐจ์ด๋, constructor ์ด๋ผ๋ ์์ฑ์ ํจ์์ ์ ๋ฌด์
๋๋ค.
๋ง์ฝ, class, constructor์ ์ด์ฉํด์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ car ์ด๋ผ๋ class๋ฅผ ๋ง๋ค์์ต๋๋ค.
class Car {
constructor(name, price) {
this.name = name;
this.price = price;
}
์ด๋ฌํ class๋ก ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด๋ด
์๋ค.
const sonata = new Car("sonata', 2000)
์ด๋ ๊ฒ ๋ง๋ค์ด์ง ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์ธ์คํด์ค instance๋ผ๊ณ ๋งํ๋ฉฐ, ์ด๋ ๊ฒ ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋๋ง๋ค constructor() ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
์์์ ๋ณด๋ฉด constructor ๋ฉ์๋ ์์ ์ฐจ ์ด๋ฆ๊ณผ ๊ฐ๊ฒฉ์ ๊ฐ์ด ์ธ์๋ก ๋ค์ด๊ฐ์ ์์ฉ๋ ๊ฒ์ด์ฃ .
-class์ ์ด๋ฆ์ ํญ์ ๋๋ฌธ์๋ก ์์ํด์ผ ํ๋ฉฐ CarmelCase๋ก ์์ฑํด์ผ ํฉ๋๋ค.
-Car class์ instance๋ฅผ ์์ฑํ ๋ ๋ง๋ค constructor๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค.
-constructor()๋ฉ์๋๋ ์ธ์๋ฅผ ๋ฐ์ต๋๋ค. ์์์๋ name, price๊ฐ ์ธ์์์ต๋๋ค.
-์ด ๋ฉ์๋ ์์์ this ๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํ์ต๋๋ค. class์ ์คํ๋ฒ์์์ this๋ ํด๋น instance๋ฅผ ์๋ฏธํฉ๋๋ค.
-constructor()์์ ์ธ์๋ก ๋์ด๋
ธ๋ ๊ฐ์ผ๋ก car instance์ name, price ํ๋กํผํฐ์ ๊ฐ์ ํ ๋นํ์ต๋๋ค.
-์ด๋ ๊ฒ, ํด๋์ค ๋ด์์ name, price์ ๊ฐ์ด ๋ณ๊ฒฝ๊ฐ๋ฅํ ์ํ ๊ฐ์ด์, class๋ด์ ์ปจํ
์คํธ ์ด๋ ๊ณณ์์๋ ์ฌ์ฉํ ์ ์๋ ๋ณ์๋ฅผ '๋ฉค๋ฒ ๋ณ์'๋ผ๊ณ ํฉ๋๋ค.
์ด๋ฌํ ๋ฉค๋ฒ ๋ณ์๋ this ํค์๋๋ก ์ ๊ทผํฉ๋๋ค.
this.name
this.price๊ฐ ๋ฐ๋ก ๊ทธ ๋ฉค๋ฒ ๋ณ์์
๋๋ค.'
Instance
๊ฐ์๊ธฐ ๋ฌด์จ ์ธ์คํด์ค? ์ธ์คํดํธ ํ๋ฒ๊ฑฐ ์๋์ผ? ์ฃ์กํฉ๋๋ค.
์์์ ์ฐ๋ฆฌ๋ class instance๋ฅผ ์์ฑํด ๋ณด์์ต๋๋ค.
const sonata = new Car("sonata', 2000)
์ด๋ ๊ฒ์!
์ด๋ ๊ฒ class๋ฅผ ํตํด์ ์์ฑ๋ ๊ฒ์ ๋ฐ๋ก Instance๋ผ๊ณ ํฉ๋๋ค.
Instance๋ class์ ํ๋กํผํฐ ์ด๋ฆ๊ณผ method๋ฅผ ๊ฐ๊ณ ์๋ ๊ฐ์ฒด์
๋๋ค.
์ธ์คํดํธ๋ ๊ทธ ๋ง๋ค ๋ชจ๋ ๋ค๋ฅธ property ๊ฐ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
bmw๋ ๊ฐ๊ฒฉ์ด 4000 ์ด์์ง๋ง sonata๋ 2000 ์ด์์ฃ ?
์ธ์คํดํธ๋ฅผ ๋ง๋๋ ๋ฒ
-class์ด๋ฆ์ new๋ฅผ ๋ถ์ฌ์ ์์ฑํฉ๋๋ค.
์ฐ๋ฆฌ๋ car ์ด๋ผ๋ class ์์ new ๋ฅผ ์ผ๊ณ ,
๊ทธ ๋ค์ constructor์์ ํ์ํ ์ ๋ณด๋ฅผ ์ธ์๋ก ๋๊ฒผ์ต๋๋ค. ๋ฌผ๋ก ๊ทธ ์ธ์๋ () ๊ดํธ ์์ ๋ค์ด๊ฐ์ฃ .
-newํค์๋๋, Car ์ด๋ผ๋ ํด๋์ค์ ์๋ก์ด instance๋ฅผ ์์ฑํ ๋ ํ์ํ ํค์๋์
๋๋ค. ์ด ํค์๋๋ฅผ ํตํด์ ์ฐ๋ฆฌ๋ constructor() ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ์๋ก์ด instance๋ฅผ ๋ฆฌํดํด์ฃผ๋ ๊ฒ์
๋๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ด๋ ๊ฒ ๋ง๋ค์ด์ง ์๋ก์ด instance๋ฅผ ์๋ก์ด ๋ณ์์ ์ ์ฅํ์ต๋๋ค.
Method
๋ฉ์๋๋ ํจ์์
๋๋ค. ๊ทธ๋ฐ๋ฐ ๊ฐ์ฒด๊ฐ ํ๋กํผํฐ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๋ฉ์๋๋ผ๊ณ ํฉ๋๋ค.
์ดํด๊ฐ ์ ์๊ฐ ์๋ ์์ต๋๋ค.
Class ์ method๋ ์์์ ๋ฐฐ์ด object์ ๋ฌธ๋ฒ์ด ๋๊ฐ์ต๋๋ค. ๋ค๋ง ๋ค๋ฅธ ์ ์ ํ๋กํผํฐ๋ง๋ค comma(,)๋ก ๊ตฌ๋ถํด์ฃผ์ง ์์๋ ๋๋ค๋ ๊ฒ์ ๋๋ค.
changeType ํจ์๋ฅผ ํธ์ถํ๊ณ ๊ทธ ์ธ์์ ์๋ก์ด ์ปคํผํ์
์ด๋ฆ์ ๋ฃ์ด์ฃผ์๋๋ coldbrew์ type ํ๋กํผํฐ์ ๊ฐ์ด espresso ์์ brewing์ผ๋ก ๋ฐ๋์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ด๋ค ๋ฉ์๋๋ฅผ ์คํํ ๋ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ ์ฉ๋ ํ๋กํผํฐ ๊ฐ์ ๋ฃ์ ์ ์์ต๋๋ค.