diff --git "a/docs/25_\355\201\264\353\236\230\354\212\244/\354\265\234\354\243\274\354\232\251.md" "b/docs/25_\355\201\264\353\236\230\354\212\244/\354\265\234\354\243\274\354\232\251.md"
new file mode 100644
index 00000000..e9bc63ae
--- /dev/null
+++ "b/docs/25_\355\201\264\353\236\230\354\212\244/\354\265\234\354\243\274\354\232\251.md"
@@ -0,0 +1,302 @@
+# π 25μ₯ ν΄λμ€
+
+**TIL κΈ°λ‘μΌ** : 2023.12.19 (25.1 ~ 25.5)
+
+## λͺ©μ°¨
+
+[1. ν΄λμ€λ νλ‘ν νμ
μ λ¬Έλ²μ μ€νμΈκ°?](#-251-ν΄λμ€λ-νλ‘ν νμ
μ-λ¬Έλ²μ -μ€νμΈκ°)
+[2. ν΄λμ€ μ μ](#-252-ν΄λμ€-μ μ)
+[3. ν΄λμ€ νΈμ΄μ€ν
](#-253-ν΄λμ€-νΈμ΄μ€ν
)
+[4. μΈμ€ν΄μ€ μμ±](#-254-μΈμ€ν΄μ€-μμ±)
+[5. λ©μλ](#-255-λ©μλ)
+
+## π 25.1 ν΄λμ€λ νλ‘ν νμ
μ λ¬Έλ²μ μ€νμΈκ°?
+
+μλ°μ€ν¬λ¦½νΈλ νλ‘ν νμ
κΈ°λ° κ°μ²΄μ§ν₯ μΈμ΄μ΄λ€.
+
+νλ‘ν νμ
κΈ°λ° κ°μ²΄μ§ν₯ μΈμ΄λ ν΄λμ€κ° νμμλ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ° μΈμ΄λ€.
+
+```javascript
+// ES5 μμ±μ ν¨μ
+var Person = (function () {
+ function Person(name) {
+ this.name = name;
+ }
+
+ // νλ‘ν νμ
λ©μλ
+ Person.prototype.sayHi = function () {
+ console.log(`Hi! My name is ` + this.name);
+ };
+
+ // μμ±μ ν¨μ λ°ν
+ return Person;
+})();
+
+var me = new Person("Lee");
+me.sayHi(); // Hi! My name is Lee
+```
+
+ES6μ λμ
λ ν΄λμ€λ κΈ°μ‘΄ νλ‘ν νμ
κΈ°λ° κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°λ³΄λ€ μλ°λ C#κ³Ό κ°μ ν΄λμ€ κΈ°λ° κ°μ²΄μ§ν₯ νλ‘κ·Έλλ° μΈμ΄μ λ§€μ° ν‘μ¬ν μλ‘μ΄ κ°μ²΄ μμ± λ§€μ»€λμ¦μ μ μνλ€.
+
+κ·Έλ λ€κ³ ES6μ ν΄λμ€κ° κΈ°μ‘΄μ νλ‘ν νμ
κΈ°λ° κ°μ²΄μ§ν₯ λͺ¨λΈμ νμ§νλ κ²μ μλλ€. μ¬μ€ ν΄λμ€λ ν¨μμ΄λ©° κΈ°μ‘΄ νλ‘ν νμ
κΈ°λ° ν¨ν΄μ ν΄λμ€ κΈ°λ° ν¨ν΄μ²λΌ μ¬μ©ν μ μλλ‘ νλ λ¬Έλ²μ μ€νsyntactic sugar μ΄λΌκ³ λ³Ό μλ μλ€.
+
+ν΄λμ€μ μμ±μ ν¨μ λͺ¨λ νλ‘ν νμ
κΈ°λ°μ μΈμ€ν΄μ€λ₯Ό μμ±νμ§λ§, ν΄λμ€λ λμ± μ격νλ©° μμ±μ ν¨μμμλ μ 곡νμ§ μλ κΈ°λ₯λ μ 곡νλ€.
+
+1. ν΄λμ€λ₯Ό `new` μ°μ°μ μμ΄ νΈμΆνλ©΄ μλ¬κ° λ°μνλ€.
+
+2. ν΄λμ€λ μμμ μ§μνλ `extends`μ `super` ν€μλλ₯Ό μ 곡νλ€.
+
+3. ν΄λμ€λ νΈμ΄μ€ν
μ΄ λ°μνμ§ μλ κ²μ²λΌ λμνλ€. νμ§λ§ ν¨μ μ μΈλ¬ΈμΌλ‘ μ μλ μμ±μ ν¨μλ ν¨μ νΈμ΄μ€ν
μ΄, ν¨μ ννμμΌλ‘ μ μν μμ±μ ν¨μλ λ³μ νΈμ΄μ€ν
μ΄ λ°μνλ€.
+
+4. ν΄λμ€ λ΄μ λͺ¨λ μ½λμλ μ묡μ μΌλ‘ `strict mode`κ° μ§μ λμ΄ μ€νλλ©° strict modeλ₯Ό ν΄μ ν μ μλ€.
+
+5. ν΄λμ€μ `constructor`, νλ‘ν νμ
λ©μλ, μ μ λ©μλλ λͺ¨λ νλ‘νΌν° μ΄νΈλ¦¬λ·°νΈ [[Enumerable]]μ κ°μ΄ falseλ€. λ€μ λ§ν΄, μ΄κ±°λμ§ μλλ€.
+
+μ΄μ κ°μ΄ ν΄λμ€λ μμ±μ ν¨μ κΈ°λ°μ κ°μ²΄ μμ± λ°©μλ³΄λ€ κ²¬κ³ νκ³ λͺ
λ£νλ€. λ°λΌμ λ¬Έλ²μ μ€νμ΄λΌκ³ 보기보λ€λ **μλ‘μ΄ κ°μ²΄ μμ± λ§€μ»€λμ¦**μ΄λΌ 보λ κ²μ΄ μ’ λ ν©λΉνλ€.
+
+## π 25.2 ν΄λμ€ μ μ
+
+ν΄λμ€λ `class` ν€μλλ₯Ό μ¬μ©νμ¬ μ μνλ€. ν΄λμ€ μ΄λ¦μ μμ±μ ν¨μμ λ§μ°¬κ°μ§λ‘ νμ€μΉΌ μΌμ΄μ€λ₯Ό μ¬μ©νλ κ²μ΄ μΌλ°μ μ΄λ€.
+
+ν΄λμ€λ ν¨μμ λ§μ°¬κ°μ§λ‘ ννμμΌλ‘ μ μν μ μμΌλ©°, μ΄λ ν΄λμ€κ° κ°μΌλ‘ μ¬μ©ν μ μλ μΌκΈ κ°μ²΄λΌλ κ²μ μλ―Ένλ€. λ°λΌμ λ€μκ³Ό κ°μ νΉμ§μ κ°λλ€.
+
+- 무λͺ
μ 리ν°λ΄λ‘ μμ±ν μ μλ€. μ¦ λ°νμμ μμ±μ΄ κ°λ₯νλ€.
+
+- λ³μλ μλ£κ΅¬μ‘°μ μ μ₯ κ°λ₯νλ€..
+
+- ν¨μμ 맀κ°λ³μλ‘ μ λ¬ν μ μλ€.
+
+- ν¨μμ λ°νκ°μΌλ‘ μ¬μ©ν μ μλ€.
+
+---
+
+ν΄λμ€ λͺΈμ²΄μμ μ μν μ μλ λ©μλλ `constructor`(μμ±μ), νλ‘ν νμ
λ©μλ, μ μ λ©μλ μΈ κ°μ§κ° μλ€.
+
+```javascript
+class Person {
+ // μμ±μ
+ constructor(name) {
+ // μΈμ€ν΄μ€ μμ± λ° μ΄κΈ°ν
+ this.name = name;
+ }
+
+ // νλ‘ν νμ
λ©μλ
+ sayHi() {
+ console.log(`Hi! My name is ${this.name}`);
+ }
+
+ // μ μ λ©μλ
+ static sayHello() {
+ console.log("Hello!");
+ }
+}
+
+const me = new Person("Lee");
+
+// μΈμ€ν΄μ€μ νλ‘νΌν° μ°Έμ‘°
+console.log(me.name); // Lee
+// νλ‘ν νμ
λ©μλ νΈμΆ
+me.sayHi(); // Hi! My name is Lee
+// μ μ λ©μλ νΈμΆ
+Person.sayHello(); // Hello!
+```
+
+ν΄λμ€μ μμ±μ ν¨μμ μ μ λ°©μμ λΉκ΅νλ©΄ λ€μκ³Ό κ°λ€.
+
+![](https://velog.velcdn.com/images/wuzoo/post/684b6601-b86b-4a93-b7cc-3927e934a822/image.png)
+
+## π 25.3 ν΄λμ€ νΈμ΄μ€ν
+
+ν΄λμ€λ ν¨μλ‘ νκ°λλ€.
+
+```javascript
+class Person {}
+
+console.log(typeof Person); // function
+```
+
+ν΄λμ€ μ μΈλ¬ΈμΌλ‘ μ μν ν΄λμ€λ ν¨μ μ μΈλ¬Έκ³Ό κ°μ΄ μμ€μ½λ νκ° κ³Όμ , μ¦ λ°νμ μ΄μ μ λ¨Όμ νκ°λμ΄ ν¨μ κ°μ²΄λ₯Ό μμ±νλ€. μ΄λ ν΄λμ€κ° νκ°λμ΄ μμ±λ ν¨μ κ°μ²΄λ μμ±μ ν¨μλ‘μ νΈμΆν μ μλ ν¨μ, μ¦ constructorμ΄λ€.
+
+ν΄λμ€ μ μΈλ¬Έμ λ§μΉ νΈμ΄μ€ν
μ΄ λ°μνμ§ μλ κ²μ²λΌ 보μ΄λ κ·Έλ μ§ μλ€.
+
+```javascript
+const Person = "";
+
+{
+ // νΈμ΄μ€ν
μ΄ λ°μνμ§ μλλ€λ©΄ ''μ΄ μΆλ ₯λμ΄μΌ νλ€.
+ console.log(Person);
+ // Reference: Cannot access 'Person' before initialization
+
+ // ν΄λμ€ μ μΈλ¬Έ
+ class Person {}
+}
+```
+
+λ³μ νΈμ΄μ€ν
μ΄ λ°μνμ§ μλλ€λ©΄ ν΄λΉ μ€μ½νμ `Person` μλ³μκ° λ±λ‘λμ§ μμμΌλ―λ‘ μ μ λ³μμ Personμ μΆλ ₯νκ² μ§λ§, ν΄λμ€ μ μΈλ¬Έμ΄ νΈμ΄μ€ν
μ΄ λ°μνμ¬ μμ§ μ΄κΈ°νλμ§ μμλ€λ **"μΌμμ μ¬κ°μ§λ"**λ₯Ό μλ―Ένλ λ¬Έκ΅¬κ° μΆλ ₯λλ€.
+
+var, let, const, function, class ν€μλλ₯Ό μ¬μ©νμ¬ μ μΈλ λͺ¨λ μλ³μλ νΈμ΄μ€ν
λλ€.
+
+## π 25.4 μΈμ€ν΄μ€ μμ±
+
+ν΄λμ€λ μμ±μ ν¨μμ΄λ©° νμ `new` μ°μ°μμ ν¨κ» νΈμΆλμ΄ μΈμ€ν΄μ€λ₯Ό μμ±νλ€.
+
+```javascript
+class Person {}
+
+// μΈμ€ν΄μ€ μμ±
+const me = new Person();
+console.log(me); // Person {}
+```
+
+ν΄λμ€λ μΈμ€ν΄μ€λ₯Ό μμ±νλ κ²μ΄ μ μΌν μ‘΄μ¬ μ΄μ μ΄λ―λ‘, `new` μ°μ°μμ ν¨κ» νΈμΆνμ§ μμΌλ©΄ μλ¬κ° λ°μνλ€.
+
+```javascript
+class Person {}
+
+const me = Person();
+// TypeError: Class constructor Person cannot be invoked without 'new'
+```
+
+## π 25.5 λ©μλ
+
+### 25.5.1 constructor
+
+`constructor`λ μΈμ€ν΄μ€λ₯Ό μμ±νκ³ μ΄κΈ°ννκΈ° μν νΉμν λ©μλλ€. constructorλ μ΄λ¦μ λ³κ²½ν μ μλ€.
+
+```javascript
+class Person {
+ // μμ±μ
+ constructor(name) {
+ this.name = name;
+ }
+}
+```
+
+ν΄λμ€κ° μμ±ν μΈμ€ν΄μ€μ λ΄λΆλ₯Ό λ€μ¬λ€λ³΄μ.
+
+```javascript
+// μΈμ€ν΄μ€ μμ±
+const me = new Person("Lee");
+console.log(me);
+```
+
+![](https://velog.velcdn.com/images/wuzoo/post/25f04bf1-4a02-46e1-b5da-37fa9de3973f/image.png)
+
+Person ν΄λμ€μ constructor λ΄λΆμμ thisμ μΆκ°ν name νλ‘νΌν°κ° ν΄λμ€κ° μμ±ν μΈμ€ν΄μ€μ νλ‘νΌν°λ‘ μΆκ°λ κ²μ νμΈν μ μλ€. μ¦, μμ±μ ν¨μμ λ§μ°¬κ°μ§λ‘ constructor λ΄λΆμμ thisμ μΆκ°ν νλ‘νΌν°λ μΈμ€ν΄μ€ νλ‘νΌν°κ° λλ€. constructor λ΄λΆμ thisλ μμ±μ ν¨μμ λ§μ°¬κ°μ§λ‘ ν΄λμ€κ° μμ±ν μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν¨λ€.
+
+μΈμ€ν΄μ€λ₯Ό μμ±ν λ ν΄λμ€ μΈλΆμμ μΈμ€ν΄μ€ νλ‘νΌν°μ μ΄κΈ°κ°μ μ λ¬νλ €λ©΄ λ€μκ³Ό κ°μ΄ `constructor`μ 맀κ°λ³μλ₯Ό μ μΈνκ³ μΈμ€ν΄μ€λ₯Ό μμ±ν λ μ΄κΈ°κ°μ μ λ¬νλ€. μ΄λ μ΄κΈ°κ°μ constructorμ 맀κ°λ³μμκ² μ λ¬λλ€.
+
+### 25.5.2 νλ‘ν νμ
λ©μλ
+
+ν΄λμ€ λͺΈμ²΄μ μ μν λ©μλλ μμ±μ ν¨μμ μν κ°μ²΄ μμ± λ°©μκ³Όλ λ€λ₯΄κ² ν΄λμ€μ `prototype` νλ‘νΌν°μ λ©μλλ₯Ό μΆκ°νμ§ μμλ κΈ°λ³Έμ μΌλ‘ νλ‘ν νμ
λ©μλκ° λλ€.
+
+```javascript
+class Person {
+ // μμ±μ
+ constructor(name) {
+ this.name = name;
+ }
+
+ // νλ‘ν νμ
λ©μλ
+ sayHi() {
+ console.log(`Hi! My name is ${this.name}`);
+ }
+}
+
+const me = new Person("Lee");
+me.sayHi(); // Hi! My name is Lee
+```
+
+### 25.5.3 μ μ λ©μλ
+
+μ μ static λ©μλλ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μμλ νΈμΆν μ μλ λ©μλλ₯Ό λ§νλ€.
+
+μμ±μ ν¨μμ κ²½μ° μ μ λ©μλλ₯Ό μμ±νκΈ° μν΄μλ λ€μκ³Ό κ°μ΄ λͺ
μμ μΌλ‘ μμ±μ ν¨μμ λ©μλλ₯Ό μΆκ°ν΄μΌ νλ€.
+
+```javascript
+// μμ±μ ν¨μ
+function Person(name) {
+ this.name = name;
+}
+
+// μ μ λ©μλ
+Person.sayHi = function () {
+ console.log("Hi!");
+};
+
+Person.sayHi(); // Hi!
+```
+
+ν΄λμ€μμλ λ©μλμ `static` ν€μλλ₯Ό λΆμ΄λ©΄ μ μ λ©μλκ° λλ€.
+
+```javascript
+class Person {
+ // ...
+ static sayHi() {
+ console.log("Hi");
+ }
+}
+```
+
+μ μ λ©μλλ μΈμ€ν΄μ€λ‘ νΈμΆν μ μλ€. μΈμ€ν΄μ€μ νλ‘ν νμ
μ²΄μΈ μμλ ν΄λμ€κ° μ‘΄μ¬νμ§ μκΈ° λλ¬Έμ μΈμ€ν΄μ€λ‘ ν΄λμ€μ λ©μλλ₯Ό μμλ°μ μ μλ€.
+
+```javascript
+// μΈμ€ν΄μ€ μμ±
+const me = new Person("Lee");
+me.sayHi(); // TypeError: me.sayHi is not a function
+```
+
+### 25.5.4 μ μ λ©μλμ νλ‘ν νμ
λ©μλμ μ°¨μ΄
+
+λ λ©μλμ μ°¨μ΄λ λ€μκ³Ό κ°λ€.
+
+1. μ μ λ©μλμ νλ‘ν νμ
λ©μλλ μμ μ΄ μν΄ μλ νλ‘ν νμ
체μΈμ΄ λ€λ₯΄λ€.
+2. μ μ λ©μλλ ν΄λμ€λ‘ νΈμΆνκ³ νλ‘ν νμ
λ©μλλ μΈμ€ν΄μ€λ‘ νΈμΆνλ€.
+3. μ μ λ©μλλ μΈμ€ν΄μ€ νλ‘νΌν°λ₯Ό μ°Έμ‘°ν μ μμ§λ§ νλ‘ν νμ
λ©μλλ μΈμ€ν΄μ€ νλ‘νΌν°λ₯Ό μ°Έμ‘°ν μ μλ€.
+
+```javascript
+class Square {
+ // μ μ λ©μλ
+ static area(width, height) {
+ return width * height;
+ }
+}
+
+console.log(Square.area(10, 10)); // 100
+```
+
+μ μ λ©μλ areaλ 2κ°μ μΈμλ₯Ό μ λ¬λ°μ λ©΄μ μ κ³μ°νλ€. μ΄λ μΈμ€ν΄μ€ νλ‘νΌν°λ₯Ό μ°Έμ‘°νμ§ μλλ€. λ§μ½ μΈμ€ν΄μ€ νλ‘νΌν°λ₯Ό μ°Έμ‘°ν΄μΌ νλ€λ©΄ νλ‘ν νμ
λ©μλλ₯Ό μ¬μ©ν΄μΌ νλ€.
+
+```javascript
+class Square {
+ constructor(width, height) {
+ this.width = width;
+ this.height = height;
+ }
+
+ // νλ‘ν νμ
λ©μλ
+ area() {
+ return this.width * this.height;
+ }
+}
+
+const square = new Square(10, 10);
+console.log(square.area()); // 100
+```
+
+22μ "ν¨μ νΈμΆ λ°©μκ³Ό this λ°μΈλ©"μμ μ΄ν΄λ³΄μλ―μ΄ λ©μλ λ΄λΆμ `this`λ λ©μλλ₯Ό μμ ν κ°μ²΄κ° μλ λ©μλλ₯Ό νΈμΆν κ°μ²΄, μ¦ λ©μλ μ΄λ¦ μμ λ§μΉ¨ν(.) μ°μ°μ μμ κΈ°μ ν κ°μ²΄μ λ°μΈλ©λλ€.
+
+μ μμ μ κ²½μ° `square` κ°μ²΄λ‘ νλ‘ν νμ
λ©μλ `area`λ₯Ό νΈμΆνκΈ° λλ¬Έμ area λ΄λΆμ thisλ square κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€.
+
+μ μ λ©μλλ ν΄λμ€λ‘ νΈμΆν΄μΌ νλ―λ‘ μ μ λ©μλ λ΄λΆμ thisλ μΈμ€ν΄μ€κ° μλ ν΄λμ€λ₯Ό κ°λ¦¬ν¨λ€. μ¦, νλ‘ν νμ
λ©μλμ μ μ λ©μλ λ΄λΆμ this λ°μΈλ©μ΄ λ€λ₯΄λ€.
+
+λ©μλ λ΄λΆμμ μΈμ€ν΄μ€ νλ‘νΌν°λ₯Ό μ°Έμ‘°ν νμκ° μλ€λ©΄ `this`λ₯Ό μ¬μ©ν΄μΌ νλ―λ‘ νλ‘ν νμ
λ©μλλ₯Ό μ¬μ©ν΄μΌ νμ§λ§, μΈμ€ν΄μ€ νλ‘νΌν°λ₯Ό μ°Έμ‘°ν΄μΌ ν νμκ° μλ€λ©΄ thisλ₯Ό μ¬μ©νμ§ μκ² λλ€.
+λ°λΌμ thisλ₯Ό μ¬μ©νμ§ μλλ€λ©΄ νλ‘ν νμ
λ©μλλ μΈμ€ν΄μ€λ₯Ό μμ±ν ν μΈμ€ν΄μ€λ‘ νΈμΆν΄μΌ νλ―λ‘ thisλ₯Ό μ¬μ©νμ§ μλ μ μ λ©μλλ‘ μ μνλ κ²μ΄ μ’λ€.
+
+### 25.5.5 ν΄λμ€μμ μ μν λ©μλμ νΉμ§
+
+1. `function` ν€μλλ₯Ό μλ΅ν λ©μλ μΆμ½ ννμ μ¬μ©νλ€.
+2. κ°μ²΄ 리ν°λ΄κ³Όλ λ€λ₯΄κ² ν΄λμ€μ λ©μλλ₯Ό μ μν λλ μ½€λ§(,)κ° νμ μλ€.
+3. μ묡μ μΌλ‘ `strict mode`λ‘ μ€νλλ€.
+4. `for ... in`λ¬Έμ΄λ `Object.keys` λ©μλ λ±μΌλ‘ μ΄κ±°ν μ μλ€. μ¦, νλ‘νΌν°μ μ΄κ±°κ° λΆκ°λ₯νλ©° νλ‘νΌν° μ΄νΈλ¦¬λ·°νΈ [[Enumerable]]μ κ°μ΄ falseλ€.
+5. λ΄λΆ λ©μλλ [[Constructor]]λ₯Ό κ°μ§ μλ non-constructorλ€. λ°λΌμ `new` μ°μ°μμ ν¨κ» νΈμΆν μ μλ€.