์ ์ฒด ๊ธ
๋๋ฆฌ์์ ์ต๋ช ๋ฉ์๋(1)
์ฐธ๊ณ ์์ https://youtu.be/HNX_FZBU_wA ๋๋ฆฌ์(Delegator) - ์ฝ๋(๋ฉ์๋)๋ฅผ ๋์ ์คํํ๋ ๊ฐ์ฒด - ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฏ ์ฌ์ฉ(์ฆ, ์ธ์๋ฅผ ์ ๋ ฅํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ ๋ฐ์) - ๋จ, ๋๋ฆฌ์๊ฐ ์คํํ ์ฝ๋๋ ์ปดํ์ผ ์์ ์ด ์๋ ์คํ ์์ ์ ๊ฒฐ์ ๋๋ฆฌ์์ ์ ์ธ๊ณผ ์ฌ์ฉ (1) delegate ํค์๋ ์ฌ์ฉ, ๋๋ฆฌ์ ์ ์ธ delegate int MyDelegate(int a, int b); //์ธํฐํ์ด์ค ์ ์ธํ ๋ ์ฒ๋ผ ๊ตฌํ์ ์๋ค! ํน์ ํ์ ์ - delegate - ๋ฐํํ - ๋ธ๋ฆฌ๊ฒ์ดํธ๋ช (๋งค๊ฐ๋ณ์ ๋ชฉ๋ก) private delegate int MyDelegate(int a, int b); (2) ์ฌ์ฉ ์ namespace Delegate // Note: actual namespace de..
[๋ฆฌํฉํฐ๋ง 2ํ] 12.10์ ์ฝ๊ธฐ์ ์์ ์์์ด๋?
์ฐธ๊ณ ๊ธ https://umbum.dev/822 Composition VS Extends : delegation, decorator, wrapper Effective Java : ์์ดํ 18. (๊ธฐ๋ฅ ํ์ฅ์ด ํ์ํ ๋)์์๋ณด๋ค๋ ์ปดํฌ์ง์ ์ ์ฌ์ฉํ๋ผ [Effective Java] 4์ฅ ํด๋์ค์ ์ธํฐํ์ด์ค ์์์ด๋? extends๋ฅผ ๋งํจ. (implements๋ ์๋. ์ด๊ฑด ๊ตฌํ.) ์ปดํฌ์ง์ ์ด๋? Compo umbum.dev ๋งํฌ ์์ฝ: ์์์ extends ์ปดํฌ์ง์ ์ ํ์ํ ๊ฐ์ฒด๋ฅผ ๋ด๋ถ private ๋ณ์๋ก ๋๋ ๊ฒ(ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค์ ๊ตฌ์ฑ์์๋ก ์ฐ์ธ๋ค๋ ๋ป) ์์๊ณผ ์ปดํฌ์ง์ ์ ์ฐจ์ด๋ ์ค๋ฒ๋ผ์ด๋ฉํ๋๋ ๋ฉ์๋๋ฅผ ํธ์ถํด์ delegateํ๋๋์ ์ฐจ์ด๋ก ๋ณผ ์ ์๋ค. 0. ์์ vs ๋ธ๋ฆฌ๊ฒ์ดํธ ์์(์ปดํฌ์ง์ )..
[๋ฆฌํฉํฐ๋ง 2ํ] 12.7 ์๋ธํด๋์ค ์ ๊ฑฐํ๊ธฐ
1. ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น ๋์ด์ ์ฐ์ด์ง ์๋ ์๋ธํด๋์ค์ ๋ง์ฃผํ๋ ํ๋ก๊ทธ๋๋จธ๋ ๊ฐ์น ์๋ ๊ฒ์ ์ดํดํ๋๋ผ ์๋์ง๋ฅผ ๋ญ๋นํ ๊ฒ์ด๋ค. ์ด๋ฐ ์ ๋๊น์ง ๋๋ฉด ์๋ธํด๋์ค๋ฅผ ์ํผํด๋์ค์ ํ๋๋ก ๋์ฒดํด ์ ๊ฑฐํ๋ ๊ฒ ์ต์ ์ด๋ค. ๋ถํ์ํ ์๋ธ ํด๋์ค๋ฅผ ์ ๊ฑฐํ๊ณ , ๋์ ์ ์ธ๋ถ์์ ์ ํ ์ ํ์์๋ ๋ด๋ถ๋ก์ง๋ค์ ์ ์บก์ํํด๋๊ณ , ์ธ๋ถ์์ ์ฌ์ฉํ๊ธฐ ์ฝ๊ฒ create๋ผ๋ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ๊ณตํด์ฃผ๊ณ , ๊ธฐํ ํ์ํ ๋ฉ์๋๋ฅผ ์ ์ฑ๊ฒจ์ฃผ๋๋ก ํ์. 2. ์ ์ฐจ (1) ์๋ธํด๋์ค์ ์์ฑ์๋ฅผ ํฉํฐ๋ฆฌ ํจ์๋ก ๋ฐ๊พผ๋ค. -> ์์ฑ์๋ฅผ ์ฌ์ฉํ๋ ์ธก์์ ๋ฐ์ดํฐ ํ๋๋ฅผ ์ด์ฉํด ์ด๋ค ์๋ธํด๋์ค๋ฅผ ์์ฑํ ์ง ๊ฒฐ์ ํ๋ค๋ฉด ๊ทธ ๊ฒฐ์ ๋ก์ง์ ์ํผํด๋์ค์ ํฉํฐ๋ฆฌ ๋ฉ์๋์ ๋ฃ๋๋ค. (2) ์๋ธํด๋์ค์ ํ์ ์ ๊ฒ์ฌํ๋ ์ฝ๋๊ฐ ์๋ค๋ฉด ๊ทธ ๊ฒ์ฌ ์ฝ๋์ ํจ์ ์ถ์ถํ๊ธฐ์ ..
[Node.js] (5) ์์ฒญ๊ณผ ์๋ต ์ฐ๊ฒฐํ๊ธฐ, ๋ฒํผ ๊ฐ๋ (๋ฆฌ๋๋ ์ , ์ ์ ์ ๋ ฅ๊ฐ ํ์ผ์์ฑ ํ ์ ์ฅ)
(1)~(4)๊น์ง๋ ์๋ฒ๋ฅผ ์คํ ์ ํ๋ ๋ฐฉ๋ฒ๊ณผ, ๋ค์ด์ค๋ ์์ฒญ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด์ ์์ฒญ ๊ฐ์ฒด๋ฅผ ๋ฐ๊ณ , ์๋ต์ ๋๋ ค์ค ์ ์๋ ์๋ต ๊ฐ์ฒด์ ๋ํ ํฌ์คํ ์ ์์ฑํ์๋ค. ํฐ๋ฏธ๋ ์๋ฒ ์ข ๋ฃ ctrl + c ์๋ฒ ์ฌ์์ node app.js 1. ์ค์ต์ฉ ์น์๋ฒ ์ฝ๋ ์์ฑ ์๋์ ๊ฐ์ด ์ ๋ ฅํด์ค๋ค. const url = req.url; url์ด ๋ญ์ง์ ๋ฐ๋ผ์ ๋ค๋ฅธ ๋ด์ฉ์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ด์ฃผ๋๋ก ํ์. if (url === '/') { const http = require('http'); const server = http.createServer((req, res) => { const url = req.url; if (url === '/') { res.write(''); res.write(''); res.write(..
[Node.js] (4) ์๋ต ์ ์ก
const http = require('http'); const hostname = '127.0.0.1'; const port = 3001; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/html'); res.write(''); res.write(''); res.write('Hello from my Node.js Server!'); res.write(''); res.end('Hello Node'); //์ด ์์ ๋ถํฐ๋ ๋ ์ด์ ์๋ฌด ๊ฒ๋ ์ ๋ ฅํด์๋ ์๋จ //์ด ๋ถ๋ถ์ ์ฐ๋ฆฌ๊ฐ ํด๋ผ์ด์ธํธ๋ก ๋ค์ ์ ์กํ๋ ๋ถ๋ถ์ผ๋ก, Node.js๊ฐ ํด๋ผ์ด์ธํธ๋ก ๋ค์ ์ ์กํ๊ธฐ ๋๋ฌธ re..
[๋ฆฌํฉํฐ๋ง 2ํ] 12.6 ํ์ ์ฝ๋๋ฅผ ์๋ธํด๋์ค๋ก ๋ฐ๊พธ๊ธฐ
0. ๋ฆฌํฉํ ๋ง ์ ์ ์ฒด ์ฝ๋ class Employee { #name; #type; constructor(name, type) { this.validateType(type); this.#name = name; this.#type = type; } validateType(arg) { if (!['engineer', 'manager', 'salesperson'].includes(arg)) { throw new Error(`${arg}๋ผ๋ ์ง์ ์ ํ์ ์์ต๋๋ค.`); } } get type() { return this.#type; } toString() { return `${this.#name} (${this.#type})`; } } const mandoo = new Employee('๊ธฐํํ๋๋ง๋', 'eng..
[๋ฆฌํฉํฐ๋ง 2ํ] 11.13 ์์ธ๋ฅผ ์ฌ์ ํ์ธ์ผ๋ก ๋ฐ๊พธ๊ธฐ
0. ์ธ์ ์ฐ๋ฉด ์ข์๊น? ์์ธ๋ (๋ ์ด์ ์ข์ง ์์ ์ ๋๊น์ง) ๊ณผ์ฉ๋๊ณค ํ๋ค. ์์ธ๋ '๋ป๋ฐ์ ์ค๋ฅ'๋ผ๋, ๋ง ๊ทธ๋๋ก ์์ธ์ ์ผ๋ก ๋์ํ ๋๋ง ์ฐ์ฌ์ผ ํ๋ค. ํจ์ ์ํ์ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ ์กฐ๊ฑด์ ํจ์ ํธ์ถ ์ ์ ๊ฒ์ฌํ ์ ์๋ค๋ฉด, ์์ธ๋ฅผ ๋์ง๋ ๋์ ํธ์ถํ๋ ๊ณณ์์ ์กฐ๊ฑด์ ๊ฒ์ฌํ๋๋ก ํด์ผ ํ๋ค. 1. ์ ์ฐจ (1) ํฉํฐ๋ฆฌ ํจ์๋ฅผ ๋ง๋ ๋ค. ํฉํฐ๋ฆฌ ํจ์์ ๋ณธ๋ฌธ์์๋ ์๋์ ์์ฑ์๋ฅผ ํธ์ถํ๋ค. (2) ์์ฑ์๋ฅผ ํธ์ถํ๋ ์ฝ๋๋ฅผ ํฉํฐ๋ฆฌ ํจ์ ํธ์ถ๋ก ๋ฐ๊พผ๋ค. 2. ์์ ์ฝ๋ (1) ๋ฆฌํฉํฐ๋ง ์ ํด๋น ์ฝ๋์ ๋ฌธ์ ์ : ์ ๋ฌ๋ฐ์ ์ธ๋ฑ์ค๋ฅผ ํตํด์ ๋ฐฐ์ด์ ํน์ ํ ๊ฐ์ ๋ฐํํ๋ ๊ฒ์ธ๋ฐ, ์ธ๋ฑ์ค๋ฅผ ์ ๋ฌ๋ฐ์ ๋, ์ธ๋ฑ์ค๊ฐ 0๋ณด๋ค ์๊ฑฐ๋ ๋๋ ์ธ๋ฑ์ค๊ฐ ์ฃผ์ด์ง ๋ฐฐ์ด์ ์ฌ์ด์ฆ๋ณด๋ค ๋์ด๊ฐ๋๊ฑด ์คํจ ์ผ์ด์ค๋ก ์ถฉ๋ถํ ์์(expected..