๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ
![๋๋ฆฌ์์ ์ต๋ช
๋ฉ์๋(1)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQvzNZ%2FbtrSwaQhxTv%2FBe3b0YmZ3h05766mFOxig1%2Fimg.png)
๋๋ฆฌ์์ ์ต๋ช ๋ฉ์๋(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://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFWjac%2FbtrSf34NHSt%2F9IBLSqaEqxNriGW5b5RUX1%2Fimg.png)
[๋ฆฌํฉํฐ๋ง 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 ์๋ธํด๋์ค ์ ๊ฑฐํ๊ธฐ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTEYwA%2FbtrR2TnSkag%2FjZCtVwMnYmB9F39amqU2gk%2Fimg.png)
[๋ฆฌํฉํฐ๋ง 2ํ] 12.7 ์๋ธํด๋์ค ์ ๊ฑฐํ๊ธฐ
1. ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น ๋์ด์ ์ฐ์ด์ง ์๋ ์๋ธํด๋์ค์ ๋ง์ฃผํ๋ ํ๋ก๊ทธ๋๋จธ๋ ๊ฐ์น ์๋ ๊ฒ์ ์ดํดํ๋๋ผ ์๋์ง๋ฅผ ๋ญ๋นํ ๊ฒ์ด๋ค. ์ด๋ฐ ์ ๋๊น์ง ๋๋ฉด ์๋ธํด๋์ค๋ฅผ ์ํผํด๋์ค์ ํ๋๋ก ๋์ฒดํด ์ ๊ฑฐํ๋ ๊ฒ ์ต์ ์ด๋ค. ๋ถํ์ํ ์๋ธ ํด๋์ค๋ฅผ ์ ๊ฑฐํ๊ณ , ๋์ ์ ์ธ๋ถ์์ ์ ํ ์ ํ์์๋ ๋ด๋ถ๋ก์ง๋ค์ ์ ์บก์ํํด๋๊ณ , ์ธ๋ถ์์ ์ฌ์ฉํ๊ธฐ ์ฝ๊ฒ create๋ผ๋ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ ๊ณตํด์ฃผ๊ณ , ๊ธฐํ ํ์ํ ๋ฉ์๋๋ฅผ ์ ์ฑ๊ฒจ์ฃผ๋๋ก ํ์. 2. ์ ์ฐจ (1) ์๋ธํด๋์ค์ ์์ฑ์๋ฅผ ํฉํฐ๋ฆฌ ํจ์๋ก ๋ฐ๊พผ๋ค. -> ์์ฑ์๋ฅผ ์ฌ์ฉํ๋ ์ธก์์ ๋ฐ์ดํฐ ํ๋๋ฅผ ์ด์ฉํด ์ด๋ค ์๋ธํด๋์ค๋ฅผ ์์ฑํ ์ง ๊ฒฐ์ ํ๋ค๋ฉด ๊ทธ ๊ฒฐ์ ๋ก์ง์ ์ํผํด๋์ค์ ํฉํฐ๋ฆฌ ๋ฉ์๋์ ๋ฃ๋๋ค. (2) ์๋ธํด๋์ค์ ํ์ ์ ๊ฒ์ฌํ๋ ์ฝ๋๊ฐ ์๋ค๋ฉด ๊ทธ ๊ฒ์ฌ ์ฝ๋์ ํจ์ ์ถ์ถํ๊ธฐ์ ..
![[Node.js] (5) ์์ฒญ๊ณผ ์๋ต ์ฐ๊ฒฐํ๊ธฐ, ๋ฒํผ ๊ฐ๋
(๋ฆฌ๋๋ ์
, ์ ์ ์
๋ ฅ๊ฐ ํ์ผ์์ฑ ํ ์ ์ฅ)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnTrOS%2FbtrS1JxpIEi%2FIBKoEd00O1Thqy8y8ahjM0%2Fimg.png)
[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) ์๋ต ์ ์ก](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbttedn%2FbtrRXFR3cZd%2FZTn3nDlWwiZo2o9xkBDja1%2Fimg.png)
[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 ํ์
์ฝ๋๋ฅผ ์๋ธํด๋์ค๋ก ๋ฐ๊พธ๊ธฐ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvh51N%2FbtrRZM4lzC9%2FK8HEWhqtNYIOJc21sxKEMk%2Fimg.png)
[๋ฆฌํฉํฐ๋ง 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 ์์ธ๋ฅผ ์ฌ์ ํ์ธ์ผ๋ก ๋ฐ๊พธ๊ธฐ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAKRYQ%2FbtrRX1NhZww%2FxsijDfgZuMzXM5aUwrdbLK%2Fimg.png)
[๋ฆฌํฉํฐ๋ง 2ํ] 11.13 ์์ธ๋ฅผ ์ฌ์ ํ์ธ์ผ๋ก ๋ฐ๊พธ๊ธฐ
0. ์ธ์ ์ฐ๋ฉด ์ข์๊น? ์์ธ๋ (๋ ์ด์ ์ข์ง ์์ ์ ๋๊น์ง) ๊ณผ์ฉ๋๊ณค ํ๋ค. ์์ธ๋ '๋ป๋ฐ์ ์ค๋ฅ'๋ผ๋, ๋ง ๊ทธ๋๋ก ์์ธ์ ์ผ๋ก ๋์ํ ๋๋ง ์ฐ์ฌ์ผ ํ๋ค. ํจ์ ์ํ์ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ ์กฐ๊ฑด์ ํจ์ ํธ์ถ ์ ์ ๊ฒ์ฌํ ์ ์๋ค๋ฉด, ์์ธ๋ฅผ ๋์ง๋ ๋์ ํธ์ถํ๋ ๊ณณ์์ ์กฐ๊ฑด์ ๊ฒ์ฌํ๋๋ก ํด์ผ ํ๋ค. 1. ์ ์ฐจ (1) ํฉํฐ๋ฆฌ ํจ์๋ฅผ ๋ง๋ ๋ค. ํฉํฐ๋ฆฌ ํจ์์ ๋ณธ๋ฌธ์์๋ ์๋์ ์์ฑ์๋ฅผ ํธ์ถํ๋ค. (2) ์์ฑ์๋ฅผ ํธ์ถํ๋ ์ฝ๋๋ฅผ ํฉํฐ๋ฆฌ ํจ์ ํธ์ถ๋ก ๋ฐ๊พผ๋ค. 2. ์์ ์ฝ๋ (1) ๋ฆฌํฉํฐ๋ง ์ ํด๋น ์ฝ๋์ ๋ฌธ์ ์ : ์ ๋ฌ๋ฐ์ ์ธ๋ฑ์ค๋ฅผ ํตํด์ ๋ฐฐ์ด์ ํน์ ํ ๊ฐ์ ๋ฐํํ๋ ๊ฒ์ธ๋ฐ, ์ธ๋ฑ์ค๋ฅผ ์ ๋ฌ๋ฐ์ ๋, ์ธ๋ฑ์ค๊ฐ 0๋ณด๋ค ์๊ฑฐ๋ ๋๋ ์ธ๋ฑ์ค๊ฐ ์ฃผ์ด์ง ๋ฐฐ์ด์ ์ฌ์ด์ฆ๋ณด๋ค ๋์ด๊ฐ๋๊ฑด ์คํจ ์ผ์ด์ค๋ก ์ถฉ๋ถํ ์์(expected..
![[Node.js] (3) ์์ฒญ ๊ฐ์ฒด](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0fJb1%2FbtrRTtREJaO%2FXCekVKP4ibI869WVtEqZJk%2Fimg.png)
[Node.js] (3) ์์ฒญ ๊ฐ์ฒด
const http = require('http'); const hostname = '127.0.0.1'; const port = 1080; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); console.log(req); res.end('Hello World'); }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); }); console.log(req); ์์ฒญ ๊ฐ์ฒด ํค๋๋ ๋ฉํ๋ฐ์ดํฐ ์ฆ, ์์ฒญ ๋ฐ ์๋ต์ ์ถ๊ฐ๋ ๋ฉํ ..
[Node.js] (2) Node์ ๋ผ์ดํ์ฌ์ดํด ๋ฐ ์ด๋ฒคํธ ๋ฃจํ
const http = require('http'); const server = http.createServer((req, res) => { console.log(req); }); server.listen(3000); ์ ์ฝ๋๋ก ์์ฑํ ์๋ฒ๋ ์ ๋๋ก ๊ธฐ๋ฅํ์ง ์๋๋ค. ์๋ฅผ ๋ค์ด, ์์ง ์๋ต์ ๋ฐํํ์ง ์๋๋ค. Node.js๊ฐ ๊ด๋ฆฌํ๋ ์ด๋ฒคํธ ๋ฃจํ ์์ ์ด ๋จ์ ์๋ ํ ๊ณ์ํด์ ์๋ํ๋ ๋ฃจํ ํ๋ก์ธ์ค๋ก, ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ์๋ํ ๊ณ์ ์๋ํ๋ค. ๋ฑ๋ก ํ ์ ๊ฑฐํ์ง ์์๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋(createServer์ ๊ณ์๋๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋)๋ ์๋ฒ๊ฐ ๊ณ์ ์ด์๋๊ธฐ ์ํด ์ ๊ฑฐํ์ง ์์์ผ ํ๋ค. ์ฝ์ด ๋ ธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด ์ด๋ฒคํธ ๋ฃจํ์ ์ํด ๊ด๋ฆฌ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ ๋๋ ๋ฐ์ดํฐ ์์ฒญ์ ๋ฃ์ผ๋ผ๋ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ ..
[๋ฆฌํฉํฐ๋ง 2ํ] 11.12 ์ค๋ฅ ์ฝ๋๋ฅผ ์์ธ๋ก ๋ฐ๊พธ๊ธฐ
0. ์ธ์ ์ฐ๋ฉด ์ข์๊น? ์์ธ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ ๊ณตํ๋ ๋ ๋ฆฝ์ ์ธ ์ค๋ฅ ์ฒ๋ฆฌ ๋ฉ์ปค๋์ฆ์ด๋ค. ์ค๋ฅ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ์์ธ๋ฅผ ๋์ง๋ค. ๊ทธ๋ฌ๋ฉด ์ ์ ํ ์์ธ ํธ๋ค๋ฌ๋ฅผ ์ฐพ์ ๋๊น์ง ์ฝ์คํ์ ํ๊ณ ์๋ก ์ ํ๋๋ค. (ํธ๋ค๋ฌ๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด ๋ณดํต์ ๋จ์ ๊ธฐ๋ณธ ๋์์ด ์ํ๋๋ค.) ์์ธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ฅ ์ฝ๋๋ฅผ ์ผ์ผ์ด ๊ฒ์ฌํ๊ฑฐ๋ ์ค๋ฅ๋ฅผ ์๋ณํด ์ฝ์คํ ์๋ก ๋์ง๋ ์ผ์ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ค. ์์ธ๋ ์ ํํ ์์ ๋ฐ์ ๋์์ผ ๋๋ง ์ฐ์ฌ์ผ ํ๋ค. ๋ฌ๋ฆฌ ๋งํ๋ฉด ํ๋ก๊ทธ๋จ์ ์ ์ ๋์ ๋ฒ์ฃผ์ ๋ค์ง ์๋ ์ค๋ฅ๋ฅผ ๋ํ๋ผ ๋๋ง ์ฐ์ฌ์ผ ํ๋ค. (* ์์๋ฅผ ๋์ง๋ ์ฝ๋๋ฅผ ํ๋ก๊ทธ๋จ ์ข ๋ฃ ์ฝ๋๋ก ๋ฐ๊ฟ๋ ํ๋ก๊ทธ๋จ์ด ์ฌ์ ํ ์ ์ ๋์ํ ์ง๋ฅผ ๋ฐ์ ธ๋ณด์. ์ ์ ๋์ํ์ง ์์ ๊ฒ ๊ฐ๋ค๋ฉด ์์ธ๋ฅผ ์ฌ์ฉํ์ง ๋ง๋ผ๋ ์ ํธ์ด๋ค. ์์ธ ๋์ ์ค๋ฅ๋ฅผ ๊ฒ์ถํ์ฌ ํ๋ก๊ทธ๋จ์ ์ ์..