๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์‹œ๋„/๊ตญ๋น„์ง€์›

[D+43] JS ์˜ˆ์™ธ์ฒ˜๋ฆฌ, ์ƒ์„ฑ์ž, ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๋ฐฉ๋ฒ•

by ๐Ÿ‡๋ฐ•๋ด‰๋ด‰๐Ÿ‡ 2022. 11. 21.

 

 

๊ตญ๋น„์ง€์› 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๋Š” ๊ฐ์ฒด์ƒ์„ฑ์„ ํ•˜๋Š” ์ข…๋ฅ˜๋“ค์˜ ๋ฌธ์ œ์ ๋“ค์„ ๋ณด์™„ํ•ด์„œ ๋งŒ๋“  ๊ฒƒ์œผ๋กœ ๊ฝค ์‚ฌ์šฉ๋˜๋Š” ๊ตฌ์กฐ์ด๋‹ค.

 

์ƒ์„ฑ์ธก๋ฉด )

- ์žฅ์  : ๊ธฐ์กด ๊ฐ์ฒด์ƒ์„ฑ๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ์ ๋“ค์„ ๋ณด์™„ํ•œ ๊ฒƒ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธ๋ฆฌํ•˜๋‹ค.

- ๋‹จ์  : ๋ณ„๋กœ์—†๋‹ค.

 

ํ™œ์šฉ์ธก๋ฉด )

- ์žฅ์  : ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ •๋ณด์€๋‹‰์ด๋‚˜ ๋‹คํ˜•์„ฑ ๋˜ํ•œ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

- ๋‹จ์  : ์™„๋ฒฝํ•œ ๊ฐ์ฒด์ง€ํ–ฅ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€