๊ตญ๋น์ง์ D+43
- JS ์์ธ์ฒ๋ฆฌ, ์์ฑ์, ๊ฐ์ฒด์ ์์ฑ ๋ฐฉ๋ฒ -
JS ์์ธ์ฒ๋ฆฌ
์์ธ๋ผ๋ ๊ฒ์ ๋ฌธ๋ฒ์ ์ผ๋ก ์ด์์ ์์ง๋ง ๋ฌธ์ ๊ฐ ๋ฐ์๋๋ ๊ฒ์ ๋งํ๋ค.
Java์๋ ๋ฌ๋ฆฌ JavaScript๋ ์ฌ๋งํ๋ฉด ๊ฒฐ๊ณผ๊ฐ์ ๋ด๋ณด๋ด๋ ค๋ ํน์ง์ ๊ฐ์ง๊ณ ์์ด ์์ธ์ฒ๋ฆฌ์๋ ์ธ์ํ ํธ์ด๊ธฐ๋๋ฌธ์ ์ด์ ์ ์ฃผ์ํด์ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ฉด ๋๋ค.
• ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํด ์์ธ์ฒ๋ฆฌํ๊ธฐ
let h1Elem = document.querySelector('h1');
if(h1Elem === null)
{
// ๋ฐฉ๋ฒ1) ์ฌ์ฉ์์๊ฒ ์๋ฆฌ๋จผํธ๊ฐ ์กด์ฌํ์ง ์๋๋ค๊ณ ์ฝ์๋ก ๋์์ค๋ค.
console.log('[์์ธ๋ฐ์] ์๋ฆฌ๋จผํธ๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค.');
// ๋ฐฉ๋ฒ2) element๋ฅผ ์ง์ ๋ง๋ค์ด์ค๋ค.
h1Elem = document.createElement('h1');
document.body.appendChild(h1Elem);
h1Elem.textContent = 'Hello';
}
else
{
h1Elem.textContent = 'Hello';
}
๋ง์ฝ body ์๋ฆฌ๋จผํธ์ ์๋ฌด๊ฒ๋ ์๋๋ฐ h1์๋ฆฌ๋จผํธ๋ฅผ ์ฐพ์์ h1์ textContent์ 'Hello'๋ผ๋ ๊ฐ์ ์ ๋ ฅํ๋ ค๊ณ ํ๋ค๋ฉด h1Elem์ null๊ฐ์ ๋ด๋ฑ์ ๊ฒ์ด๊ณ null์๋ค๊ฐ textContent๋ฅผ ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ์ฒ๋ฆฌํด์ฃผ๊ธฐ ์ํด์ h1Elem์ด null๊ฐ์ผ ๊ฒฝ์ฐ์ ์ฝ์๋ก๊ทธ๋ก ์๋ฆฌ๋จผํธ๊ฐ ์กด์ฌํ์ง ์๋๋ค๊ณ ์ฐ์ด์ฃผ๊ฑฐ๋ ์๋ฆฌ๋จผํธ๋ฅผ ์๋ก๋ง๋ค์ด์ 'Hello'๋ฅผ ์ฐ์ด์ ์์ธ๋ฅผ ์ฒ๋ฆฌํด์ฃผ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
ํ์ง๋ง ์์๊ฐ์ ๋ฐฉ๋ฒ์ ์์ธ์๋ํ ๋ฌธ์ ๋ฅผ ๋ฐ์์ํค๋ ๊ฒ์ด ์๋๋ผ ์ฝ์์ฐฝ์ ๋จ์ํ ๋ฉ์์ง๋ฅผ ๋จ๊ธฐ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฒฝ๊ณ ์ ๋๋์ด ๋ค์ ์ ๋ค.
• try ~ catch๋ฌธ ์ฌ์ฉํ๊ธฐ
try~catch๋ฌธ์ ๊ธฐ์กด์ ์๋ฐ์์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ํฐ ์ฐจ์ด๋ ์์ง๋ง catch๋ฌธ์์ ๊ธฐ์กด์ ์์ธ์ ๋ํ ํ์ ์ ๋ฐ๋ก ์ ์ ํ์ง ์๊ณ ๋ณ์๋ง ์ง์ ํด์ฃผ๋ฉด ๋๋ค.
const myFunc = function()
{
try
{
const obj = {};
obj.func1(); // obj๊ฐ ๋น๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ func1์คํ์ ์๋ฌ๋ฐ์
}
catch(exception)
{
console.log('-------------------------------');
console.log(exception);
console.log('-------------------------------');
console.log('name = ' + exception.name);
console.log('message = ' + exception.message);
return;
}
finally
{
console.log('finally ๊ตฌ๋ฌธ ์คํ');
}
}
myFunc();
try~catch๋ฅผ ์ฌ์ฉํ ์์ ์ด๋ฉฐ, catch๋ฌธ์ ํตํด ๋ฐ์์จ ์์ธ์ ๋ํด name๊ณผ message๋ฅผ ๋ถ๋ฌ์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ ์๋ ์์ผ๋ฉฐ, ์ด๋ ์์ธ์ ๋ํ name๊ณผ message๋ ๋ฐ๋ก ๋ถ๋ฌ์ฌ ์ ์๋ค.
๋ํ try~catch์์ finally์ catch๋ฌธ์์ return์ ์ ๋ ฅํด๋ ์ด๋ ํ ๊ฒฝ์ฐ์๋ ๋ฐ๋์ ์คํ๋๊ธฐ ๋๋ฌธ์ ์์ธ์ฒ๋ฆฌ์ค ๋ฐ๋์ ์คํ๋์ด์ผํ ํญ๋ชฉ์ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
• throw
const myFunc = function()
{
try
{
const obj = {};
throw 'throw๋ฅผ ์ฌ์ฉํด ๊ฐ์ ๋ก ์์ธ๋ฅผ ๋ฐ์์์ผฐ์ต๋๋ค.';
}
catch(exception)
{
console.log('-------------------------------');
console.log(exception);
console.log('-------------------------------');
console.log('name = ' + exception.name);
console.log('message = ' + exception.message);
return;
}
finally
{
console.log('finally ๊ตฌ๋ฌธ ์คํ');
}
}
myFunc();
๋ํ ๋ด๊ฐ ๊ฐ์ ๋ก ์์ธ๋ฅผ ๋ฐ์์ํฌ์๋ ์๋๋ฐ ๋ฐ๋ก throw๋ฅผ ์ฌ์ฉํด์ ์์ธ๋ฅผ ๋ฐ์์ํค๋ ๋ฐฉ๋ฒ์ด๋ค.
์ฝ๋์์ฒด๊ฐ ๊ดด๋ํ๊ธฐ๋ ํ์ง๋ง ๋ด๊ฐ throw๋ฅผ ์ฌ์ฉํด์ ์์ธ๋ฅผ ๋ฐ์์ํฌ์ ์์ผ๋ฉฐ, ์ด๋ ์์ธ์ ๋ํ ์ ๋ณด๋ฅผ ํ์ธํ ์๋ ์๋ค.
์์ฑ์
• ์์ฑ์ ํจ์ (Constructor function)
- ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํ ํ๋ ํจ์
- new์ ํจ๊ป ์ฌ์ฉ๋๋ค.
- ์ผ๋ฐ์ ์ธ ๊ฐ์ฒด์งํฅ์ธ์ด์์์ ์์ฑ์์๋ ๋ค๋ฅด๋ค.
- JS์ ์์ฑ์๋ ์ผ๋ฐํจ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
• ์์ฑ์ ํจ์์ ์ดํด
// 3. MyFunc๋ ๋น๊ฐ์ฒด๋ฅผ ์ ๊ทผํ๊ธฐ ์ํด์ this๋ก ์ ๊ทผ์ ์๋ํ๋ค.
const MyFunc = function(a, b)
{
this.a = a;
this.b = b;
}
// 1. new - ํด๋์ค๊ฐ ์์ผ๋ ๋น ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค.
// 2. MyFunc๋ฅผ ์คํ์ํจ๋ค. --> ๋น๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ์ MyFunc์ this๋ก ๋๊ฒจ๋ฒ๋ฆฐ๋ค.
const m1 = new MyFunc(10, 20);
console.log(m1.a); //10
console.log(m1.b); //20
- ํจ์๋ ํจ์ ๊ฐ์ฒด์ด๋ฉฐ, ์ด๋ ํจ์๋ฅผ ํธ์ถํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ฌ๋ฌ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์๋ค.
- ํจ์ ๊ฐ์ฒด๋ฅผ new๋ก ํ ๋น์ ์ข ๋ ๋ง์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ฉฐ ์ด๋ ํจ์ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ํจ์๋ฅผ ํน๋ณํ ์์ฑ์ํจ์๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ์์ฑ์๋ฅผ ํตํด ํจ์๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด ํจ์๋ด๋ถ์ ์์์ ๊ฐ์ฒด๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ๋ฉฐ ์ด๋ฅผ this๋ก ์ ๊ทผํ๋ค.
- ์ผ๋ฐํจ์์ ๊ฒฝ์ฐ window ๊ฐ์ฒด๊ฐ ์ ๋ฌ๋๋ค, window ๊ฐ์ฒด๋ ์ ์ญ๊ฐ์ฒด์ด๋ค.
๊ฐ์ฒด์ ์์ฑ ๋ฐฉ๋ฒ
์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ฐ์ฒด์ ์์ฑ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ค.
๊ฐ์์ ์ฅ๋จ์ ์ ์๊ณ ํ์ํ ๋ ์๋ง์ ์ฉ๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํ๋ค.
• literal object
const student = {
name : 'ํ๊ธธ๋',
number : 1,
score : {
kor : 80,
eng : 50,
math : 78
}
};
์ ๋ณด์ ๋ํ ๋ฆฌ์คํธ๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
์์ฑ์ธก๋ฉด )
- ์ฅ์ : ๋ง๋ค๊ธฐ ์ฝ๋ค.
- ๋จ์ : ์ธ์คํด์ค์ ๊ฐ์๊ฐ ๋์ด๋ ์๋ก ๋ง๋๋ ์๊ฐ์ด ๊ธฐํ๊ธ์์ ์ผ๋ก ๋์ด๋๋ค.
ํ์ฉ์ธก๋ฉด )
- ์ฅ์ : ์ถ๊ฐ, ์ญ์ , ๋ณ๊ฒฝ ๋ฑ์ด ์์ ๋กญ๊ณ ํธ๋ฆฌํ๋ค.
- ๋จ์ : ์ ๋ณด์๋ ์ธก๋ฉด์์ ์ฝํ๋ค.
• ํด๋ก์
const student = function(name, number, score)
{
return {
getName : function()
{
return name;
},
getNumber : function()
{
return number;
},
getScore : function()
{
return score;
},
setName : function(_name)
{
name = _name;
},
setNumber : function(_number)
{
number = _number;
},
setScore : function(_score)
{
score = _score;
},
getTotal : function()
{
return score.kor + score.eng + score.math;
},
getAvg : function()
{
return (this.getTotal() / 3).toFixed(2);
}
};
};
const st1 = student('ํ๊ธธ๋', 1, {kor: 80, eng: 50, math: 78});
์ฌ๋ฌ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์์ํ๊ฑฐ๋ ์ ๋ณด์๋์ด ๊ฐ์กฐ๋์ด ํ์ํ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
์์ฑ์ธก๋ฉด )
- ์ฅ์ : ๋ณ๋ก ์๋ค.
- ๋จ์ : ๋ง๋ค๊ธฐ๊ฐ ๊น๋ค๋กญ๊ณ , ๋ฌธ๋ฒ์ ์ธ ์์๋ฅผ ์ดํดํ์ง ๋ชปํ๋ฉด ๋ง๋ค๊ธฐ๊ฐ ์ด๋ ต๋ค.
ํ์ฉ์ธก๋ฉด )
- ์ฅ์ : ์ ๋ณด์๋ ๊ตฌํ์ด ๊ฐ๋ฅํ๊ณ , ์ฌ๋ฌ๊ฐ์ ์ธ์คํด์ค๋ฅผ ๊ตฌํํ ์ ์๋ค.
- ๋จ์ : ์๋ฒฝํ ๊ฐ์ฒด์งํฅ์ ์๋๊ธฐ ๋๋ฌธ์ ์ธ๋ถ์์ ๋ค์ด์ค๋ ๊ฐ์ ๋ง๊ธฐ ์ด๋ ต๋ค.
• ์์ฑ์ ํจ์
const Student = function(name, number)
{
this.name = name;
this.number = number;
this.score = {
kor : 0,
eng : 0,
math : 0
};
this.getTotal = function()
{
return this.score.kor + this.score.eng + this.score.math;
};
this.getAvg = function()
{
const total = this.getTotal();
if(total === 0)
return 0;
else
return (this.getTotal() / 3).toFixed(2);
}
}
const st1 = new Student('ํ๊ธธ๋', 1);
console.log(st1.name);
console.log(st1.number);
st1.score.kor = 80;
st1.score.eng = 50;
st1.score.math = 78;
console.log(st1.getTotal());
console.log(st1.getAvg());
์ฌ๋ฌ๊ฐ์ ์ธ์คํด์ค ์์ฑ์ด๋ฉด์ ๋ถ๋ด์์ด ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ฃผ๋ก ์ฐ์ธ๋ค.
์์ฑ์ธก๋ฉด )
- ์ฅ์ : ์ฝ๊ธฐ ์ข์ผ๋ฉฐ, ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ๊ณ ๋ง๋ค๊ธฐ ํธํ๋ค.
- ๋จ์ : ์์ฑ์ ํจ์๋ก ์ฌ์ฉ๋์ง ์์ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์๋ ์ ์์ด ์ถํ์ ๋ณด์์ฝ๋๋ฅผ ํ์๋ก ํ๋ค.
ํ์ฉ์ธก๋ฉด )
- ์ฅ์ : ์ฌ๋ฌ๊ฐ์ ์ธ์คํด์ค๋ฅผ ๊ตฌํํ ์ ์๋ค.
- ๋จ์ : ์๋ฒฝํ ๊ฐ์ฒด์งํฅ์ ์๋๋ค.
• class
class Student {
constructor(name, number, score) {
this.name = name;
this.number = number;
this.score = score;
}
getName() {
return this.name;
}
getNumber() {
return this.number;
}
getScore() {
return this.score;
}
setName(_name) {
this.name = _name;
}
setNumber(_number) {
this.number = _number;
}
setScore(_score) {
this.score = _score;
}
getTotal() {
return this.score.kor + this.score.eng + this.score.math;
}
getAvg() {
return (this.getTotal() / 3).toFixed(2);
}
}
const s1 = new Student("ํ๊ธธ๋", 1, { kor: 80, eng: 50, math: 78 });
console.log(s1.getTotal());
console.log(s1.getAvg());
class๋ ๊ฐ์ฒด์์ฑ์ ํ๋ ์ข ๋ฅ๋ค์ ๋ฌธ์ ์ ๋ค์ ๋ณด์ํด์ ๋ง๋ ๊ฒ์ผ๋ก ๊ฝค ์ฌ์ฉ๋๋ ๊ตฌ์กฐ์ด๋ค.
์์ฑ์ธก๋ฉด )
- ์ฅ์ : ๊ธฐ์กด ๊ฐ์ฒด์์ฑ๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ์ ๋ค์ ๋ณด์ํ ๊ฒ์ผ๋ก ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํ๋ค.
- ๋จ์ : ๋ณ๋ก์๋ค.
ํ์ฉ์ธก๋ฉด )
- ์ฅ์ : ์ฌ๋ฌ๊ฐ์ ์ธ์คํด์ค๋ฅผ ๊ตฌํํ ์ ์์ผ๋ฉฐ, ์ ๋ณด์๋์ด๋ ๋คํ์ฑ ๋ํ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
- ๋จ์ : ์๋ฒฝํ ๊ฐ์ฒด์งํฅ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฒ์ ์๋๋ค.
'์๋ > ๊ตญ๋น์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[D+44] Front-end ๋ฏธ๋ํ๋ก์ ํธ 1์ผ์ฐจ : ์นํฐํธ ์ค์ ๋ฐ ๋ค๋น๊ฒ์ดํฐ ์ค์ (0) | 2022.11.22 |
---|---|
[D+44] javaScript Class (0) | 2022.11.22 |
[D+42] ๋ฌธ์๊ฐ์ฒด ์์ฑ, ์ด๋ฒคํธ ์ฒ๋ฆฌ (0) | 2022.11.18 |
[D+41] ์ด๋ฒคํธ์ ๋ฉ์์ง, sort์ ์๋ฆฌ (0) | 2022.11.17 |
[D+40] ๋ฌธ์-๊ฐ์ฒด ๋ชจ๋ธ DOM (0) | 2022.11.16 |
๋๊ธ