diff --git "a/sep/sep-3rd/yunji/[sep-3rd]\354\234\244\354\247\200\355\225\231\354\212\265\354\240\225\353\246\254.md" "b/sep/sep-3rd/yunji/[sep-3rd]\354\234\244\354\247\200\355\225\231\354\212\265\354\240\225\353\246\254.md"
new file mode 100644
index 0000000..30e2124
--- /dev/null
+++ "b/sep/sep-3rd/yunji/[sep-3rd]\354\234\244\354\247\200\355\225\231\354\212\265\354\240\225\353\246\254.md"
@@ -0,0 +1,280 @@
+# ๐ 16์ฅ ~ 17์ฅ ์์ฝ ์ ๋ฆฌ
+
+## 1. ๊ฐ์ฒด = ๋ฐ์ดํฐ + ์จ๊ฒจ์ง ์ ๋ณด
+
+์๋ฐ์คํฌ๋ฆฝํธ์์ **๊ฐ์ฒด**๋ ๋จ์ํ `{}`์ ๊ฐ๋ง ๋ด๋ ๊ฒ ์๋๋ผ,
+์์ง์ด ๋ชฐ๋ ๊ด๋ฆฌํ๋ **์จ๊ฒจ์ง ์ฌ๋กฏ([[Prototype]], [[Call]] ๋ฑ)** ๊ณผ
+**์๋์ผ๋ก ์คํ๋๋ ๋ฉ์๋( [[Get]], [[Set]])** ๊น์ง ํฌํจ๋๋ค.
+
+```
+๊ฐ์ฒด = { ํ๋กํผํฐ๋ค } + [[์ฌ๋กฏ]] + [[๋ฉ์๋]]
+```
+
+
+
+## 2. ํจ์ ๊ฐ์ฒด = ํน๋ณํ ๊ฐ์ฒด
+
+ํจ์๋ **๊ฐ์ฒด**์ด๋ค. ๊ทธ๋ฐ๋ฐ ํจ์๋ผ์ ํน๋ณํ ๋ ๊ฐ์ง ์ฌ๋กฏ์ ๊ฐ์ง ์ ์๋ค.
+
+1. **[[Call]]** โ ํจ์์ฒ๋ผ ์คํ ๊ฐ๋ฅ (`f()`)
+2. **[[Construct]]** โ new ์ฐ์ฐ์๋ก ์คํ ๊ฐ๋ฅ (`new f()`)
+
+๐ **๋ชจ๋ ํจ์๋ ๊ฐ์ฒด์ง๋ง, ๋ชจ๋ ํจ์๊ฐ ์์ฑ์(new) ๊ฐ๋ฅํ ๊ฑด ์๋**.
+
+
+
+## 3. ํจ์์ ์ข
๋ฅ
+
+### (1) callable ํจ์ (ํธ์ถ ๊ฐ๋ฅํ ํจ์)
+
+- `[[Call]]` ์ฌ๋กฏ์ ๊ฐ์ง ํจ์
+- ๊ทธ๋ฅ `f()` ํํ๋ก ์คํ ๊ฐ๋ฅ
+
+```javascript
+function sayHi() {
+ console.log("hi");
+}
+sayHi(); // ์คํ๋จ
+```
+
+### (2) constructor ํจ์ (์์ฑ์ ํจ์ ๊ฐ๋ฅ)
+
+- `[[Call]]` + `[[Construct]]` ๋ ๋ค ์๋ ํจ์
+- ์ฆ, `f()`๋ ๋๊ณ , `new f()`๋ ๋๋ ํจ์
+
+ #### โ function ์ ์ธ๋ฌธ, function ํํ์, class
+
+ #### โ ์ฆ, ๋ณดํต function ํค์๋๋ก ๋ง๋ ํจ์๋ ๋ค constructor
+
+```js
+function Foo() {} // โ
constructor
+const Bar = function () {}; // โ
constructor
+class Baz {} // โ
constructor
+```
+
+### (3) non-constructor ํจ์ (์์ฑ์ ๋ถ๊ฐ)
+
+- `[[Call]]`๋ง ์๊ณ `[[Construct]]` ์๋ค
+- ์ฆ, ๊ทธ๋ฅ `f()`๋ง ๋๊ณ , new๋ก ํธ์ถํ ์ ์๋ค
+ #### โ ํ์ดํ ํจ์, ๋ฉ์๋ ์ถ์ฝ ํํ
+
+```javascript
+const arrow = () => {}; // โ non-constructor
+const obj = {
+ hi() {}, // โ ๋ฉ์๋ ์ถ์ฝํ โ non-constructor
+};
+```
+
+
+
+## 4. this ๋ฐ์ธ๋ฉ ์๋ฆฌ
+
+์๋ฐ์คํฌ๋ฆฝํธ์์ `this๋ "๋๊ฐ ํธ์ถํ๋"์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.`
+
+1. ๊ทธ๋ฅ ํจ์ ํธ์ถ โ ์ ์ญ ๊ฐ์ฒด(window/undefined)
+2. ๊ฐ์ฒด์ ๋ฉ์๋๋ก ํธ์ถ โ ๊ทธ ๊ฐ์ฒด๊ฐ this
+3. new๋ก ์์ฑ์ ํธ์ถ โ ์๋ก ๋ง๋ค์ด์ง ๊ฐ์ฒด๊ฐ this
+4. `bind`, `call`, `apply` ์ฌ์ฉ โ ์ง์ ํ ๊ฐ์ด this
+
+
+
+์์:
+
+### 1. ๊ทธ๋ฅ ํจ์ ํธ์ถ
+
+```js
+function sayHi() {
+ console.log(this);
+}
+
+sayHi();
+```
+
+- ์๊ฒฉ ๋ชจ๋(strict mode) โ undefined
+
+- ๋น์๊ฒฉ ๋ชจ๋ โ window (๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ์ ์ญ ๊ฐ์ฒด)
+
+#### ๐ ์๋ฌด๋ ์ฃผ์ธ์ด ์์ผ๋๊น, ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ญ ๊ฐ์ฒด๊ฐ this๊ฐ ๋จ.
+
+
+
+### 2. ๊ฐ์ฒด์ ๋ฉ์๋๋ก ํธ์ถ
+
+```js
+let user = {
+ name: "์ฒ ์",
+ greet: function () {
+ console.log(this.name);
+ },
+};
+
+user.greet(); // "์ฒ ์"
+```
+
+- `user.greet()`๋ผ๊ณ ๊ฐ์ฒด๊ฐ ์์ ๋ถ์ด์ ํธ์ถ๋๋ฉด โ ๊ทธ ๊ฐ์ฒด(`user`)๊ฐ `this`
+
+#### ๐ "๋๊ฐ ๋ถ๋ ๋? โ user๊ฐ ๋ถ๋ ๋ค โ this = user"
+
+
+
+### 3. new๋ก ์์ฑ์ ํธ์ถ
+
+```js
+function Person(name) {
+ this.name = name;
+}
+
+let p1 = new Person("์ํฌ");
+console.log(p1.name); // "์ํฌ"
+```
+
+- `new` ํค์๋๋ก ๋ถ๋ฅด๋ฉด โ **์๋ก์ด ๊ฐ์ฒด๊ฐ ์๋์ผ๋ก ๋ง๋ค์ด์ง๊ณ ** ๊ทธ ๊ฐ์ฒด๊ฐ this
+
+- `this.name = name` ์ ๊ฒฐ๊ตญ `์๋ก ๋ง๋ค์ด์ง ๊ฐ์ฒด์ name์ ๋ถ์ด๋ ๊ฒ.`
+
+#### ๐ "new๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ this๋ก ์ค"
+
+
+
+### 4. bind, call, apply ์ฌ์ฉ
+
+```js
+function sayHello() {
+ console.log(this.name);
+}
+
+let user1 = { name: "๋ฏผ์" };
+let user2 = { name: "์ง์" };
+
+sayHello.call(user1); // "๋ฏผ์"
+sayHello.apply(user2); // "์ง์"
+
+let bound = sayHello.bind(user1);
+bound(); // "๋ฏผ์"
+```
+
+- call, apply, bind๋ this๋ฅผ ๊ฐ์ ๋ก ์ง์ ํ ์ ์๋ ๋ฐฉ๋ฒ
+
+- `.call(user1)` ํ๋ฉด โ `this = user1`
+
+- `.apply(user2)` ํ๋ฉด โ `this = user2`
+
+- `.bind(user1)` ํ๋ฉด โ ์๋ก์ด ํจ์๊ฐ ๋ง๋ค์ด์ง๊ณ ๊ทธ ์์์ ํญ์ `this = user1`
+
+#### ๐ "this๋ฅผ ๋ด๊ฐ ์ํ๋ ๊ฐ์ฒด๋ก ๊ฐ์ ๊ณ ์ ์ํฌ ์ ์๋ค
+
+
+
+## 5. new ์ฐ์ฐ์์ ๋์
+
+`new Foo()`๊ฐ ์คํ๋ ๋ ์ค์ ๋ก ์ผ์ด๋๋ ์ผ:
+
+1. **์ ๊ฐ์ฒด ์์ฑ** `{}`
+2. ๊ทธ ๊ฐ์ฒด์ `[[Prototype]]`์ `Foo.prototype`์ผ๋ก ์ค์
+3. `Foo` ํจ์ ์คํ (this = ์ ๊ฐ์ฒด)
+4. `Foo` ์์์ ๊ฐ์ฒด๋ฅผ ๋ช
์์ ์ผ๋ก returnํ๋ฉด ๊ทธ ๊ฐ์ฒด ๋ฐํ, ์๋๋ฉด ์ ๊ฐ์ฒด ๋ฐํ
+
+```js
+function Foo() {
+ this.value = 10;
+}
+const obj = new Foo();
+
+console.log(obj); // Foo { value: 10 }
+console.log(obj.__proto__ === Foo.prototype); // true
+```
+
+
+
+
+
+# + ์ถ๊ฐ๋ก
+
+## this ๋ฐ์ธ๋ฉ ๊ท์น (์ฐ์ ์์ ์ค์ฌ)
+
+this๋ ํจ์ ํธ์ถ ๋ฌธ๋งฅ(ํธ์ถ ๋ฐฉ์)์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฐ์ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค:
+
+### 1. new ๋ฐ์ธ๋ฉ(์์ฑ์ ํธ์ถ)
+
+- `new F()` โ this๋ ์๋ก ์์ฑ๋ ๊ฐ์ฒด(ํญ์ ๊ฐ์ฒด). (๊ฐ์ฅ ๋์ ์ฐ์ ์์)
+
+### 2. ๋ช
์์ ๋ฐ์ธ๋ฉ (explicit binding)
+
+- `f.call(obj, ...), f.apply(obj, ...)` โ this๋ obj๋ก ๊ณ ์ .
+
+- `f.bind(obj)`๋ก ๋ง๋ ๋ฐ์ด๋ ํจ์๋ ๋ด๋ถ์ ์ผ๋ก [[BoundThis]]๋ฅผ ๊ฐ์ง๋ค.
+
+### 3. ์์์ (๊ฐ์ฒด) ๋ฐ์ธ๋ฉ (implicit / method call)
+
+- `obj.m()` โ this๋ ํธ์ถ ์์ ์ ๋ฒ ์ด์ค ๊ฐ์ฒด(obj).
+
+- ์ฃผ์: `const fn = obj.m; fn();` ์ฒ๋ผ ์ถ์ถํ๋ฉด ์์์ ๋ฐ์ธ๋ฉ ์์ค.
+
+### 4. ๊ธฐ๋ณธ ๋ฐ์ธ๋ฉ(default)
+
+- ์ ๊ท์น์ ํด๋นํ์ง ์์ผ๋ฉด:
+
+ - ์๊ฒฉ ๋ชจ๋(strict): this === undefined
+
+ - ๋น์๊ฒฉ(sloppy): this === globalThis (๋ธ๋ผ์ฐ์ ์์ window, ๋ชจ๋ ํ๊ฒฝ์์ globalThis)
+
+๊ทธ๋ฆฌ๊ณ ํน์ ๊ท์น:
+
+- ํ์ดํ ํจ์(arrow): this๋ฅผ ๋ฐ์ธ๋ฉํ์ง ์์. ์ ์ธ ์์ (๋ ์์ปฌ)์ this๋ฅผ ์บก์ฒ(= lexical this). ๋ฐ๋ผ์ call/apply/bind๋ก ๋ฐ๊พธ์ง ๋ชปํจ.
+
+- ๋ฐ์ด๋ ํจ์: bind๋ก ๋ง๋ ํจ์๋ ๋ด๋ถ ์ฌ๋กฏ์ [[BoundThis]]๋ฅผ ๊ฐ๊ณ ์ผ๋ฐ ํธ์ถ์์ ๊ทธ ๊ฐ์ด ์ฌ์ฉ๋จ. ๋ค๋ง new๋ก ํธ์ถํ๋ฉด(๋์ ์์ฑ์์ด๋ฉด) new ์ฐ์ ๊ถ ๋๋ฌธ์ ๋ฐ์ด๋๋ this๋ ๋ฌด์๋ ์ ์์(์๋ ์์ ์ฐธ์กฐ).
+
+์์
+
+```js
+function show() {
+ console.log(this);
+}
+
+const obj = { a: 1, show };
+
+obj.show(); // implicit โ this === obj
+const f = obj.show;
+f(); // default โ this === undefined (strict) or globalThis (non-strict)
+
+show.call({ x: 1 }); // explicit โ this === {x:1}
+
+const arrow = () => console.log(this);
+arrow(); // lexical this (์ ์ธ๋ ํ๊ฒฝ์ this)
+```
+
+์ฐ์ ์์ ์์ (bind vs new):
+
+```js
+function Person(name) {
+ this.name = name;
+}
+const Bound = Person.bind({ name: "BOUND" });
+
+Bound("A"); // ์ผ๋ฐ ํธ์ถ: ๋ฐ์ด๋๋ this({name:'BOUND'})์ ์ ์ฉ
+new Bound("B"); // new ํธ์ถ: new๊ฐ ์ฐ์ โ this๋ ์ ๊ฐ์ฒด, name === 'B'
+```
+
+์์ : new๋ก ์์ฑํ๋ฉด ์ ๊ฐ์ฒด๊ฐ this๊ฐ ๋๊ณ , ๋ฐ์ด๋๋ this๋ ๋ฌด์๋ฉ๋๋ค(๋จ, ๋ด๋ถ ๋์์ spec ์ฒ๋ฆฌ๊ฐ ์ฝ๊ฐ ๋ณต์กํ์ง๋ง ์ฌ์ฉ์ ์
์ฅ์์ ์ด๋ ๊ฒ ์ดํดํ๋ฉด ๋๋ค).
+
+
+
+## prototype๊ณผ constructor ๊ด๊ณ
+
+(์ค๋ฌด์์ ์์ฃผ ํท๊ฐ๋ฆฌ๋ ๋ถ๋ถ)
+
+- ํจ์ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋(์ผ๋ฐ์ ์ธ ํจ์) ์๋์ผ๋ก ๊ทธ ํจ์์ prototype ํ๋กํผํฐ(๊ฐ์ฒด)๊ฐ ๋ง๋ค์ด์ง๋ค. ์ด prototype ๊ฐ์ฒด์๋ ๊ธฐ๋ณธ์ ์ผ๋ก constructor ํ๋กํผํฐ๊ฐ ์๊ณ , ๊ทธ ๊ฐ์ ๋ค์ ์๋ ํจ์(์๊ธฐ ์์ )๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
+
+```js
+function Foo() {}
+Foo.prototype.constructor === Foo; // true
+```
+
+- `new Foo()`๋ก ๋ง๋ ์ธ์คํด์ค์ ๋ด๋ถ `[[Prototype]](a.k.a. __proto__)`๋ Foo.prototype์ ๊ฐ๋ฆฌํจ๋ค.
+
+์ฃผ์: ํ๋กํ ํ์
์ ๋ฎ์ด์ฐ๋ฉด(constructor ์ฐ๊ฒฐ์ด ๊นจ์ง ์ ์์) constructor๊ฐ ์๋ ๋ณต๊ตฌ๋์ง ์์ผ๋ ํ์ํ๋ฉด ์๋์ผ๋ก ์ค์ ํด์ผ ํจ.
+
+```js
+Foo.prototype = { hello: function () {} }; // ์ด์ Foo.prototype.constructor !== Foo
+Foo.prototype.constructor = Foo; // ๋ณต๊ตฌ
+```