TIL - 21.07.19 ๐จโ๐ป - Js, OOP
TIL - 21.07.19 ๐จโ๐ป
- Set ๊ฐ์ฒด
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
Set ๊ฐ์ฒด
Set ๊ฐ์ฒด๋ ๋ฐฐ์ด๊ณผ ์ ์ฌํ ๊ฐ์ฒด๋ก ํ๋กํผํฐ ํค๋ก 0๋ถํฐ ์์ํ๋ ์ซ์๋ฅผ ๊ฐ์ง๋ฉฐ, ๊ฐ์ฒด์ ํ๋กํผํฐ ๊ฐ์ผ๋ก ์ ์ผํ ๊ฐ๋ค๋ง ๊ฐ์ง๋ค๋ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค. ( ๋ฌผ๋ก ์ฐธ์กฐ ์๋ฃํ์ ํน์ฑ์ ์์ธ๋ ์๋ค. )
์๋ NaN !== NaN ์ด์ง๋ง, Set ๊ฐ์ฒด ์์์๋ ์ ์ผํ ๊ฐ์ผ๋ก ๊ฐ์ฒด์ ํ๋กํผํฐ๋ก ํ๋์ NaN๋ง ๊ฐ์ง ์ ์๋ค.
์ฌ๋ฌ ๋ฉ์๋๊ฐ ์๋๋ฐ ๋ํ์ ์ธ ๋ฉ์๋ ์ธ ๊ฐ๋ฅผ ์๊ฐํ์๋ฉด,
.add()
- Set ๊ฐ์ฒด์ ํ๋กํผํฐ ์ถ๊ฐํ๋ค.
.has()
- Set ๊ฐ์ฒด์ ๊ดํธ ์์ ์ธ์๊ฐ ์๋์ง ๋ถ๋ฆฌ์ธ ํ์
์ผ๋ก ๋ฐํํ๋ค.
.size
- Set ๊ฐ์ฒด์ ํ๋กํผํฐ ์๋ฅผ ์ซ์๋ก ๋ฐํํ๋ค.
let arr = [1, 2, 3, 3, 4] let set = new Set([...arr]) // set { 1, 2, 3, 4 }; ์ค๋ณต๋๋ ํ๋กํผํฐ 3 ํ๋ ์ ๊ฑฐ. set.add(5) // set { 1, 2, 3, 4, 5 } set.add(3) // set { 1, 2, 3, 4, 5 }; 3์ ์ด๋ฏธ ์์ผ๋ฏ๋ก ์ถ๊ฐ๋์ง ์๋๋ค. set.add([1, 2]) // set { 1, 2, 3, 4, 5, [1, 2] } set.add([1, 2]) // set { 1, 2, 3, 4, 5, [1, 2], [1, 2] }; ์ฐธ์กฐ ์๋ฃํ ์ด๊ธฐ์ set.has(2) // true; set.has([1, 2]) // false; ์ญ์ ์ฐธ์กฐ ์๋ฃํ ์ด๊ธฐ์. set.size // 7; ์ซ์์ด๋ก ๋ฐํํ๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ( Object Orient Programming )
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๋ค๋ฅด๊ฒ ๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ ๋ฌถ์ด์ ์ฒ๋ฆฌํ๋ค.
์์ฑ๊ณผ ๋ฉ์๋๊ฐ ํ๋์ ๊ฐ์ฒด๋ผ๋ ๊ฐ์ด์ ์กฐํฉ๋๋ฉฐ ์ด๋ฅผ class
๋ผ ํ๋ค.
์ฃผ์ํ ์
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ๋ฉ์๋ ํธ์ถ์ ํ์ดํ ํจ์๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
- ํด๋ก์ ์ ๋น์ทํ ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ๋ง๋ค๊ณ ๊ทธ ํจ์๋ฅผ ๋ณ์์ ํ ๋นํ๋ฉด ๋ณ์๋ฅผ ๋ณ๊ฐ์ ๋ ๋ฆฝ๋ ๊ฐ์ฒด๋ก ์ฌ์ฉํ ์ ์๋ค.
// ๊ฐ์ฒด๋ฅผ ์ด์ฉํด ๋ง๋ ์นด์ดํฐ const counter = { value: 0, increase: function(){ this.value++ }, decrease: function(){ this.value-- }, getValue: function(){ return this.value } } // ํด๋ก์ ๋ฅผ ์ด์ฉํด ๋ง๋ ์นด์ดํฐ const makeCounter = () => { return { value: 0, increase: function(){ this.value++ }, decrease: function(){ this.value-- }, getValue: function(){ return this.value } } } let counter1 = makeCounter(); counter1.increase(); counter1.increase(); counter1.increase(); counter1.getValue(); // 3 let counter2 = makeCounter(); counter2.decrease(); counter2.decrease(); counter2.decrease(); counter2.getValue(); // -3; ํด๋ก์ ์ ํน์ฑ์ ๋ฐ๋ผ ๊ฐ๊ฐ ๋ค๋ฅธ value๋ฅผ ๊ฐ์ง๋ค.
class ์ instance
์๋ฅผ ๋ค์ด, ์ด๋ค ๋ฌผ๊ฑด์ ๋ง๋ค๋ ํ๋์ ์ฒญ์ฌ์ง(blue print)์ ๋ง๋ค๊ณ ๊ทธ ์ฒญ์ฌ์ง์ ๋ฐ๋ผ ๋ฌผ๊ฑด์ ๋ง๋ค๋ฉด ๊ฐ๊ฐ์ ๋
๋ฆฝ๋ ๋ฌผ๊ฑด์ด ๋ง๋ค์ด์ง๋ค.
์ฌ๊ธฐ์ ์ฒญ์ฌ์ง์ class
๋ผ๊ณ ํ๊ณ , ๋ฌผ๊ฑด์ instance Object
, ์ค์ฌ์ instance
๋ผ๊ณ ํ๋ค.
-
์ฌ๊ธฐ์
instance
๋ฅผ ๋ง๋ค๋, ์ฆ ๋ณ์์class
๋ฅผ ํ ๋นํ ๋, ์ผ๋ฐ ํจ์ ํ ๋นํ๋ฏ ํ ๋นํ๋ ๊ฒ์ด ์๋๋ผnew
ํค์๋๋ฅผ ์ฌ์ฉํ๊ณ ํจ์์ ์ฒซ ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ์์ฑํ๋ค. -
ES5๊น์ง ํด๋์ค๋ฅผ ๋ง๋ค๋ ์ผ๋ฐ ํจ์ ๋ง๋ค๋ฏ function์ ์ฌ์ฉํ๋, ํจ์ ์ด๋ฆ์ ์ฒซ ๊ธ์๋ฅผ ๋๋ฌธ์๋ก ํ๊ธฐํด ๊ตฌ๋ถํ๋ค๋ฉด, ๋น๊ต์ ์ต์ ์ธ ES6๋ฌธ๋ฒ์์
class
๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํด ํด๋์ค๋ฅผ ์์ฑํ๋ค. -
์ด
class
๋ดinstance
๊ฐ ๋ง๋ค์ด์ง๋ ์คํ๋ ์์ฑ์ ํจ์(constructor
)๋ฅผ ๋ง๋ ๋ค.
์์ฑ์ ํจ์๋ ๋ฐํ ๊ฐ์ ๊ฐ์ง์ง ์์ผ๋ฉฐ ๊ฐ์ฒด์ ํ ๋นํ ํ๋กํผํฐ ์ ๋ณด๊ฐ ๋ค์ด์์ง๋ง, ๊ฐ์ฒด๊ฐ ์๋๋ผ ํจ์์ด๊ธฐ์ ์ฝค๋ง๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. -
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์
this
๋instance
๊ฐ์ฒด๋ฅผ ๋ปํ๋ค. -
ํ๋กํผํฐ ๊ฐ์ ํธ์ถํ ๋
instance.key;
์ ๊ฐ์ด ํธ์ถํ๋ฉด ๋์ง๋ง ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ๋ค๋ฅธ ๋ด์ฅ ๋ฉ์๋์ ๊ฐ์ดinstance.method();
์ ๊ฐ์ด ์๊ดํธ๋ฅผ ์ ์ด์ค๋ค.
// ES5 function Developer(name, gender, age){ // ์์ฑ์ ํจ์ this.name = name; this.gender = gender; this.age = age; } // ๋ฉ์๋ ์์ฑ, className.prototype ์ ๋ฉ์๋๋ฅผ ์์ฑํ๋ค. Developer.prototype.coding = function(){ console.log(this.name + '์ด/๊ฐ ์ฝ๋ฉ์ ์์ํฉ๋๋ค!') } //ES6 class Developer(){ // ์์ฑ์ ํจ์ constructor(name, gender, age){ this.name = name; this.gender = gender; this.age = age; } // ๋ฉ์๋ ์์ฑ coding(){ console.log(this.name + '์ด/๊ฐ ์ฝ๋ฉ์ ์์ํฉ๋๋ค!') } let newDev = new Developer('sunghoon', 'male', '26') // ์ธ์คํด์ค ์์ฑ๋ฒ ์ฐจ์ด๋ ์๋ค. newDev.name // 'sunghoon'; newDev.coding() // 'sunghoon์ด/๊ฐ ์ฝ๋ฉ์ ์์ํฉ๋๋ค!'
์ค๊ฐ ์ฉ์ด ์ ๋ฆฌ
prototype
- ๋ชจ๋ธ์ ์ฒญ์ฌ์ง์ ๋ง๋ค๋ ์ฐ๋ ์ํ ๊ฐ์ฒด(original form)constructor
- instance๊ฐ ์ด๊ธฐํ๋ ๋ ์คํํ๋ ์์ฑ์ ํจ์this
- ํจ์ ์คํ์ ํด๋น scope ๋ง๋ค ์์ฑ๋๋ ๊ณ ์ ํ ์คํ(execution) context.
new
ํค์๋๋กinstance
์์ฑ์ ํด๋นinstance
๊ฐthis
๊ฐ์ด ๋จ.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ 4๊ฐ์ง ํน์ง
-
์บก์ํ ( Encapsulation )
์ฝ๋๊ฐ ๋ณต์กํ์ง ์๊ฒํ๊ณ ์ฌ ์ฌ์ฉ์ฑ์ ๋ํ -
์ถ์ํ ( Abtraction )
์ญ์ ์ฝ๋๋ฅผ ๋ณต์กํ์ง ์๊ฒํ๊ณ , ๋จ์ํ๋ ์ฌ์ฉ์ผ๋ก ๋ณํ์ ์ํฅ์ ์ต์ํํจ. -
์์ ( Inheritance )
์ฌ์ฌ์ฉ์ฑ์ ๋ํ. -
๋คํ์ฑ ( Polymorphism )
๋์ผํ ๋ฉ์๋์ ๋ํด if/else if ์ ๊ฐ์ ์กฐ๊ฑด๋ฌธ ๋์ ๊ฐ์ฒด์ ํน์ฑ์ ๋ง๊ฒ ์์ฑํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง.
์บก์ํ
์บก์ํ์ ์์ ์ ๋ฐ์ดํฐ(ํ๋กํผํฐ)์ ๊ธฐ๋ฅ(๋ฉ์๋)์ ํ๋์ ๋จ์๋ก ๋ฌถ๋ ๊ฒ์ด๋ผ๋ ๊ฒ์ด๋ค.
์ด ๋ง์ ๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ด ๋์จํ๊ฒ ๊ฒฐํฉ๋๋ ๊ฒ์ ๋ปํ๋ค.
- ๋์จํ ๊ฒฐํฉ์ด๋?
์ฝ๋ ์คํ ์์์ ๋ฐ๋ฅธ ์ ์ฐจ์ ์ฝ๋ ์์ฑ์ด ์๋ ์ฝ๋๊ฐ ์์งํ๋ ์ค์ ๋ชจ์ต๊ณผ ๋ฎ๊ฒ ์ฝ๋๋ฅผ ๋ชจ์ ๊ฒฐํฉํ๋ ๊ฒ
์บก์ํ ํน์ง์ผ๋ก ํ์๋๋ ๊ธฐ๋ฅ์ด ํ๊ฐ์ง ๋ ์๋๋ฐ, ๋ฐ๋ก ์๋ํ์ด๋ค.
์๋ํ๋ ๋ด๋ถ ๋ฐ์ดํฐ๋ ๋ด๋ถ ๊ตฌํ์ด ์ธ๋ถ๋ก ๋ ธ์ถ๋์ง ์๋๋ก ๋ง๋๋ ๊ฒ์ ๋ปํ๊ณ , ์ฝ๊ฒ ๋งํด ๊ตฌํ์ ์จ๊ธฐ๊ณ , ๋์์ ๋ ธ์ถ์ํค๋ ๊ฒ์ ๋งํ๋ค.
์๋ํ๋ก ๋ํ ์ผํ ๊ตฌํ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์จ๊ธฐ๊ณ ๊ฐ์ฒด ์ธ๋ถ์์ ํ์ํ ๋์๋ง ๋ ธ์ถ์ํฌ ์ ์๋ค.
๊ณ ๋ก ์ธ์ ๋ ๊ตฌํ์ ์์ ํ ์ ์์ผ๋ฏ๋ก ๋์จํ ๊ฒฐํฉ์ ์ ๋ฆฌํ๋ค.
--
์ถ์ํ
์ถ์ํ๋ ๋ด๋ถ ๊ตฌํ์ ์์ฃผ ๋ณต์กํ์ง๋ง ๋
ธ์ถ๋๋ ๋ถ๋ถ์ ๋จ์ํ๊ฒ ๋ง๋ ๋ค๋ ๊ฐ๋
์ด๋ค.
ํด๋์ค ์ ์์ ๋ฉ์๋์ ์์ฑ๋ง ์ ์ํ ๊ฒ์ ์ธํฐํ์ด์ค๋ผ๊ณ ํ๊ณ , ์ด ์ธํฐํ์ด์ค๊ฐ ๊ณง ์ถ์ํ์ ๋ณธ์ง์ด๋ค.
์บก์ํ vs ์ถ์ํ
์บก์ํ๋ ์ฝ๋์ ๋ฐ์ดํฐ์ ์๋์ ์ด์ ์ด ๋ง์ถฐ์ง ๋ฐ๋ฉด์,
์ถ์ํ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์
์ฅ์์ ํ์์น ์์ ๊ฒ์ ๋
ธ์ถํ์ง ์๊ณ ๋จ์ ์ด๋ฆ์ผ๋ก ์ ์ํ๋ ๊ฒ์ ์์ ์ด ์๋ค.
์์
์์์ ๊ธฐ๋ณธ ํด๋์ค(base class)์ ํน์ง์ ํ์ ํด๋์ค(derive class)๊ฐ ๋ฌผ๋ ค ๋ฐ๋ ๊ฒ์ ๋ปํ๋ค.
์์์ ๋ฐ์๋ ํด๋์ค ์ด๋ฆ ๋ค์ extends
ํค์๋๋ฅผ ๋ฃ์ด์ ์์ ๋ฐ์ ํด๋์ค๋ฅผ ๋ช
๊ธฐํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์์ฑ์ ํจ์ ๋ด๋ถ์ super
ํค์๋๋ฅผ ์ด์ฉํด์ ์์ ๋ฐ์ ํด๋์ค์์ ์์๋ฐ์ ์์ฑ์ ๋ช
๊ธฐํ๋ค.
super
ํค์๋๋ ์ธ์๊ฐ ์๋ ์๋ ์๊ด์์ด base class์์ ๋ชจ๋ ์์ฑ์ ์์ ๋ฐ๋๋ค.
๋ค๋ง, ํ์ ํด๋์ค์์ ์์ ๋ฐ์ ํ๋กํผํฐ๋ฅผ ์ฌํ ๋นํ๊ณ ์ถ์๋๋ super
์ ์ธ์์ ๋ช
๊ธฐํด์ค์ผ ํ๋ค.
๋ฉ์๋์ ๊ฒฝ์ฐ๋ super
ํค์๋์์ ๋ฐ๋ก ๋ช
๊ธฐํ์ง ์๋๋ผ๋ extends
ํด์ฌ๋ ๋ฐ์์จ๋ค.
class Human { constructor(name, age){ this.name = name; this.age = age; this.gender = 'male'; } } class Student extends Human { constructor(name, age, gender, grade){ super(); this.grade = grade; } } let student1 = new Student('sunghoon', 10, 'female', 'A'); console.log(student1) // Student {name: undefined, age: undefined, gender: "male", grade: "A"} // ์์๋ฐ์ ๊ฐ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ์ student1์ gender ๊ฐ์ female์ ๋ฃ์ด๋ // male์ ๊ฐ์ผ๋ก ๊ฐ์ง ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ค. class Student extends Human { constructor(name, age, gender, grade){ super(name, age, gender); this.grade = grade; } } let student1 = new Student('sunghoon', 10, 'female', 'A'); console.log(student1) // Student {name: "sunghoon", age: 10, gender: "male", grade: "A"} // ์ด๋ฒ์ ์ ๋๋ก ์ ์ฉ๋์์ผ๋ gender์ ๊ฒฝ์ฐ ์ ์ด์ base class์์ ๊ฐ์ ๊ณ ์ ์ ์์ผ๋๊ณ // ๋งค๊ฐ๋ณ์ ์๋ฆฌ๋ฅผ ๋ง๋ค์ด ๋์ง ์์๊ธฐ์ derive class์์ ์์ฑ์ ํจ์์ gender์ // ๋งค๊ฐ๋ณ์ ์๋ฆฌ๋ฅผ ๋ง๋ค์ด๋ ์ ์ฉ์ด ์๋์๋ค. class Student extends Human { constructor(name, age, gender, grade){ super(name, age); this.grade = grade; this.gender = gender; } } let student1 = new Student('sunghoon', 10, 'female', 'A'); console.log(student1) // Student {name: "sunghoon", age: 10, gender: "female", grade: "A"} // this๋ฅผ ์ฌ์ฉํด์ ๋งค๊ฐ๋ณ์์ ์ฐ๊ฒฐํด์ฃผ๋ ๊ฒ์ผ๋ก ๋๋์ด ์ฑํ์ด๊ฐ ์ฌ์๊ฐ ๋์๋ค.
๋คํ์ฑ
๋คํ์ฑ์ ๊ฐ์ ๋ฉ์๋๋ผ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํ๋ ์ ์์์ ๋ปํ๋ค.
prototypes ํธ์ถ ๋ชจํ
์ด๊ฑด ๋จธ๋ฆฌ๊ฐ ๋ณต์กํด์ ์์ง ์ ๋ฆฌํ ์ค๋น๊ฐ ์๋๋ค.
private, static ๊ฒํก๊ธฐ
private
ํค์๋๋ ํด๋์ค ๋ด๋ถ์์๋ง ์ฐ์ด๋ ์์ฑ, ๋ฉ์๋ ๊ตฌ๋ถ๋ฒ๋๋ค.
์ง์ํ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ ์ด JavaScript ์์๋ ํด๋ก์ ๋ก ์๋ํ๋ฅผ ๊ตฌํํ๋ค.
static
ํค์๋๋ ํด๋์ค์ ์ ์ ๋ฉ์๋๋ฅผ ์ ์ํ๋ค.
GOOD ๐
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ๊ฐ๊ด์ ์ธ ์ดํด๊ฐ ์๊ฒผ๋ค.
BAD ๐ฅ
์นํด์ง๋๋ฐ ์๊ฐ์ด ์ข ๊ฑธ๋ฆด ๋ฏ ํ๋ค.
TO DO ๐ฅ
- ํ๋กํ ํ์
๊ฐ๋
๋ช
ํํ
- ์ฌ๊ทํจ์
- ๋
ธ๋ง๋์ฝ๋ ๋ฆฌ์กํธ ๋ง๋ฌด๋ฆฌ
Retrospect ๐ง
์ค๋์ ์น์
2 ์ฒซ๋ ์ด์๋ค.
๋ญ๊ฐ ์ฒซ๋ ์ด๋ผ์ ์ฝํ๊ฒ ๋๋ฆฐ๊ฑด๊ฐ ์์ง๊น์ง ํ ๋งํ ๋๋์ด ๋ ๋ค.
ํ๋กํ ํ์
๋ง ์ด๋ป๊ฒ ์ ์ดํดํ๋ฉด ๋ ๊ฒ ๊ฐ์๋ฐ, ์ด๊ฒ ๋๋ต์ ์ผ๋ก ์ด๋ป๊ฒํ๋ฉด ์ด๋ป๊ฒ ํธ์ถ๋๊ณ ์ด๋ฐ ๊ฒ ๊น์ง ํ ๋งํ๋ฐ ๋ช
ํํ๊ฒ ๊ฐ๋
์ด ์ ๋ฆฝ์ด ๋์ด์์ง ์์ ๋๋์ด ๋ ๋ค.
์ค๋ ์ปคํผ๊ฐ ๋ง์นจ ๋ค ๋จ์ด์ ธ์ ์นดํ์ธ ์์ด ๊ณต๋ถํ๋ค๋ณด๋ ์ง์ค๋ ฅ๋ ๋จ์ด์ง๊ณ ํผ๊ณคํจ์ด ๋ฐฐ๋ก ๋์ด๋ ๋๋์ด๋ค.
๋นจ๋ฆฌ์๊ณ ๋ด์ผ ๋นจ๋ฆฌ ์ผ์ด๋์ ์ฌ๊ทํจ์์ข ๋ฏธ๋ฆฌ ์กฐ์ ธ๋์ผ๊ฒ ๋ค.
๋ด๊ฐ ์ฌ๊ทํจ์์๊ฒ ์กฐ์ง๋นํ ์์
Reference ๐
https://developer.mozilla.org/
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(TIL - 21.07.19 ๐จโ๐ป - Js, OOP), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@planethoon/TIL-21.07.19์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค