๐ช Programming
[React] ๋ฆฌ์กํธ ๋์์ฑ ๋ ๋๋ง(Concurrent) ํบ์๋ณด๊ธฐ
[React] ๋ฆฌ์กํธ ๋์์ฑ ๋ ๋๋ง(Concurrent) ํบ์๋ณด๊ธฐ
2024.05.20์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ UI๋ ์ฌ๋ฌ ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ํผ ์
๋ ฅ ํ๋๋ ์ํธ ์์ฉ์ ์ฆ๊ฐ์ ์ผ๋ก ์๋ตํ์ง๋ง, ๋ง์ ์์ ํํฐ๋ง ๋ชฉ๋ก ๊ฐ์ ๋ถ๋ถ์ ์๋ตํ๋๋ฐ ์ค๋ ์๊ฐ์ด ์์๋ ์ ์๋ค. React๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๊ธฐ์ ์ธ ๋ฐฉ์์ผ๋ก ๋ ๋๋งํ๋๋ฐ, UI์ ๋๋ฆฐ ์์
(ํํฐ๋ง ๋ชฉ๋ก ๋ฑ)์ด ๋ค๋ฅธ ๋น ๋ฅธ ์์
(์
๋ ฅ ํผ ๋ฑ)์ ์ฐจ๋จํ์ฌ ์๋ต์ด ๋๋ ค์ง๋ ํ์์ด ๋ฐ์ํ๋ค. ๐ก Render-blocking: Concurrent ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์์ ๋ React๋ ์ปดํฌ๋ํธ๋ฅผ ๋๊ธฐ์ ์ผ๋ก ๋ ๋๋ง ํ๋ฉฐ, ๋ ๋๋ง์ ์์ํ๋ฉด ์์ธ๊ฐ ์๋ ์ด์ ๋ ๋๋ง์ ์ค๋จํ ์ ์๋ค. ์ฆ, ๋ ๋๋ง์ด ๋๋์ผ๋ง ๋ค๋ฅธ ์์
์ ์ํํ ์ ์๋ค. React 18 ๋ฒ์ ์ ๊ณต๊ฐํ Concurrent ๊ธฐ๋ฅ์ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ๋ฐ๋๋ค. Concu..
[Express] req.query vs req.params
[Express] req.query vs req.params
2024.05.19Path Parameter : /books/888 (888 ๋ถ๋ถ์ด ํ๋ผ๋ฏธํฐ)Query Parameter : /search?sort=price (sort=price ๋ถ๋ถ์ด ์ฟผ๋ฆฌ) ์ฟผ๋ฆฌ ์คํธ๋ง(Query String)์ /search?sort=price ์ฃผ์์์ ? ๋ฌผ์ํ ์ดํ์ ๋์ค๋ ์ ์ฒด ๋ฌธ์์ด์ ์๋ฏธํ๊ณ , ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ(Query Parameter)๋ ์ฟผ๋ฆฌ ์คํธ๋ง ๋ด์ key=value ์์ ์๋ฏธํ๋ค. req.params// ์์ฒญ URL : /books/888router.get('/books/:id', (req, res, next) => { console.log(req.params); // { id: '888' }}); req.query// URL-encoded ๋ฐ์ดํฐ ํ์ฑ์ ์ฃผ๋ก ํผ ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ ..
[JS] ํจ์ํ / ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ฎ์ ๊ผด
[JS] ํจ์ํ / ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ฎ์ ๊ผด
2024.05.19์ปค๋งํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์ ์์ฃผ ์ฌ์ฉํ๋ ์ปค๋ง ํจ์๋ n๊ฐ์ ์ธ์๋ฅผ ๋ฐ๋ ๋์ n๊ฐ์ ํจ์๋ฅผ ๋ง๋ค์ด์ ํ๋์ ์ธ์๋ง ๋ฐ๋๋ก ๋ง๋๋ ํจํด์ด๋ค. ์ปค๋ง์ ์ฌ์ฉํ๋ฉด ๋ณต์กํ ํจ์๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค๊ณ , ์ฌ์ฌ์ฉํ ์ ์๋ ํจ์๋ก ๋ถ๋ฆฌํ ์ ์๋ค. ๋ํ, ์ง์ฐ ํ๊ฐ(ํ์ํ ๋๊น์ง ๊ณ์ฐ/ํ๊ฐ๋ฅผ ๋ฏธ๋ฃจ๋ ์ ๋ต)๋ฅผ ํตํด ์ ์ฐํ ์์
์ ์ํํ ์ ์๋ค.// ์ผ๋ฐ ํจ์const adder = (x, y) => x + y;adder(100, 50); // 150// ์ปค๋ง ํจ์const adder = (x) => (y) => x + y;const add100 = adder(100);add100(50); // 150 ๊ฐ์ฒด ์งํฅ / ์ผ๋ฐ ํจ์ / ํจ์ํ ๋น๊ต๐ก ๊ฐ์ฒด ์งํฅ / ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๊ฐ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์์์ ์ธ ์ปจํ
์คํธ ๊ฐ๋๋ค...
[TS] TypeScript ํ์
์คํฌ๋ฆฝํธ Infer ํค์๋ ํ์ฉํ๊ธฐ
[TS] TypeScript ํ์ ์คํฌ๋ฆฝํธ Infer ํค์๋ ํ์ฉํ๊ธฐ
2024.05.19ํ์
์คํฌ๋ฆฝํธ infer๋ ํ์
์ ์ถ๋ก ํ๋๋ฐ ์ฌ์ฉํ๋ ํค์๋๋ค. ๋ฐฐ์ด ์์ ํ์
, ํจ์ ํ๋ผ๋ฏธํฐ ํ์
, ํจ์ ๋ฐํ ํ์
๋ฑ ํน์ ๋ฌธ๋งฅ์ ํ์
์ถ์ถ์ด ํ์ํ ๋ infer๋ฅผ ํ์ฉํ ์ ์๋ค.๊ธฐ๋ณธ ๋ฌธ๋ฒ : T extends infer U ? U : T — U๊ฐ ์ถ๋ก ๊ฐ๋ฅํ ํ์
์ด๋ฉด U ๋ฆฌํด, ์๋๋ฉด T ๋ฆฌํด infer๋ ํ์
๊ตฌํ ์์ญ(ํ ๋น ์ฐ์ฐ์ ์ฐ์ธก)์ ์กฐ๊ฑด๋ถ ํ์
(extends ์ )์์๋ง ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, TS ์์ง์ด ํ์
์ ์ถ๋ก ํ๊ณ ๋ณ์(์ ๋ค๋ฆญ ํ์
)์ ํ ๋นํ๋ค. ํ ๋น๋ ๋ณ์๋ ์กฐ๊ฑด๋ถ ํ์
์ true ๋ถ๊ธฐ์์๋ง ์ฌ์ฉํ ์ ์๋ค.// Error! 'infer' declarations are only permitted in the 'extends' clause of a conditional type.(t..
[JS] JavaScript ์๋ฐ์คํฌ๋ฆฝํธ Map ๋ ์ ์ฌ์ฉํ๊ธฐ
[JS] JavaScript ์๋ฐ์คํฌ๋ฆฝํธ Map ๋ ์ ์ฌ์ฉํ๊ธฐ
2024.05.19Map์ key, value๋ก ์ด๋ฃจ์ด์ง ์์๊ฐ ์๋ ์ปฌ๋ ์
์ด๋ค. ์ฝ์
์์๋ฅผ ๊ธฐ์ตํ๋ฉฐ key/value ์ถ๊ฐ/์ ๊ฑฐ๊ฐ ๋น๋ฒํ ๋ ๊ฐ์ฒด๋ณด๋ค ๋ ์ข์ ์ฑ๋ฅ์ ๊ฐ์ง๋ค MDN - Map ํ์ด์ง๋ฅผ ๋ณด๋ฉด ์๋์ ๊ฐ์ด ์ ํ์๋ค.Map: ํค-๊ฐ ์์ ๋น๋ฒํ ์ถ๊ฐ ๋ฐ ์ ๊ฑฐ์ ๊ด๋ จ๋ ์ํฉ์์๋ ์ฑ๋ฅ์ด ์ข ๋ ์ข์ต๋๋ค.Object: ํค-๊ฐ ์์ ๋น๋ฒํ ์ถ๊ฐ ๋ฐ ์ ๊ฑฐ์ ์ต์ ํ๋์ง ์์์ต๋๋ค. ์ค์ ๋ก ๋๋ค ์ซ์ 10,000๊ฐ๋ก ๊ตฌ์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐ/์ญ์ ํ ๋ Map์ 901 ops/s, ๊ฐ์ฒด๋ 183 ops/s๋ก ์ธก์ ๋๋ค. ์ฆ, 1์ด ๋์ Map์ 901๋ฒ์ ์์
์ ์ฒ๋ฆฌํ๊ณ , ๊ฐ์ฒด๋ 183๋ฒ์ ์์
์ ์ฒ๋ฆฌํ๋ค. Map์ด ์ผ๋ฐ ๊ฐ์ฒด๋ณด๋ค ๊ฑฐ์ 4~5๋ฐฐ ๊ฐ๋ ๋น ๋ฅด๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋ฌผ๋ก ์ด ๋ฒค์น๋งํฌ๋ฅผ 100% ์ ๋ขฐํ ์ ์์ง๋ง key..
[CS] ๋๊ธฐ / ๋น๋๊ธฐ, ๋ธ๋กํน / ๋
ผ๋ธ๋กํน
[CS] ๋๊ธฐ / ๋น๋๊ธฐ, ๋ธ๋กํน / ๋ ผ๋ธ๋กํน
2024.05.18A ํจ์(ํธ์ถ์)๊ฐ B ํจ์(ํผํธ์ถ์)๋ฅผ ํธ์ถํ๋ ์ํฉ์ด๋ผ๊ณ ๊ฐ์ โถ ๋๊ธฐ/๋น๋๊ธฐ: ํธ์ถ์(A)๊ฐ ํผํธ์ถ์(B)์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋์ง ์ฌ๋ถ๋๊ธฐ: ํผํธ์ถ์์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ ๋ค์ ์์
์ํ → ํธ์ถ์/ํผํธ์ถ์ ์์ฐจ์ ์ํA๋ B ์์
์ด ๋๋ ๋๊น์ง ๋ค๋ฅธ ์์
์ ์ํํ์ง ์๊ณ B์ ๋ฐํ๊ฐ์ ๊ธฐ๋ค๋ฆผ ๋น๋๊ธฐ: ํผํธ์ถ์์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์์
์ํ → ํธ์ถ์/ํผํธ์ถ์ ๋์ ์ํB๊ฐ ์์
์ ์๋ฃํ๋ฉด ์ฝ๋ฐฑ ํจ์ ํธ์ถ (ํน์ ํ๋ก๋ฏธ์ค ํ์ฉ) โท ๋ธ๋กํน/๋
ผ๋ธ๋กํน: ํธ์ถ์(A)๊ฐ ํผํธ์ถ์(B)์๊ฒ ์ ์ด๊ถ ์ ๋ฌ ์ฌ๋ถ๋ธ๋กํน: ํผํธ์ถ์์๊ฒ ์ ์ด๊ถ ์ ๋ฌ → ํผํธ์ถ์๊ฐ ์์
์ ์๋ฃํ ๋๊น์ง ๋๊ธฐA๊ฐ B๋ฅผ ํธ์ถํ์ฌ ์ ์ด๊ถ ์ ๋ฌ ํ, B์ ์์
์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆผ ๋
ผ๋ธ๋กํน: ํผํธ์ถ์์๊ฒ ์ ์ด๊ถ ์ ๋ฌ ์ํจ → ํธ์ถ์๋ ..
[JS] ์ ๊ท์์ ๊ทธ๋ฃนํ(Grouping) / ์บก์ฒํ(Capturing) ํ์ฉํ๊ธฐ
[JS] ์ ๊ท์์ ๊ทธ๋ฃนํ(Grouping) / ์บก์ฒํ(Capturing) ํ์ฉํ๊ธฐ
2024.05.18๊ทธ๋ฃนํ / ์บก์ฒํ๊ทธ๋ฃนํ Grouping์ ๊ท์์์ ๊ทธ๋ฃนํ๋ ํน์ ๋ฌธ์๋ค์ ๋จ์ผ ํํ์(Single Entity)์ผ๋ก ๊ตฌ๋ถํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ๊ทธ๋ฃนํ๋ ๋ณดํต ์บก์ฒ๋ง๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฏ๋ก ์ด ๋์ ํจ๊ป ์์๋๋ ๊ฒ์ด ์ข๋ค. ์๋ ์์์์ ์ฌ์ฉํ + ์๋์๋ 1๋ฒ ์ด์ ๋ฐ๋ณตํ๋ ๋ฌธ์์ด์ ์ฐพ๋๋ค. ๋ฐ๋ผ์ ab(b 1๋ฒ ์ผ์น), abb(b 2๋ฒ ์ผ์น) ๋ฑ์ ๋ชจ๋ ์ผ์นํ๋ค๊ณ ํ๋จํ๋ค.const str = 'aabbbababaabb';str.match(/ab+/g); // ['abbb', 'ab', 'ab', 'abb'] ํน์ ๋ฌธ์ ๊ทธ๋ฃน์ ๋ฐ๋ณต ์ฌ๋ถ๋ฅผ ํ๋จํ๋ ค๋ฉด ์๊ดํธ()๋ฅผ ์ฌ์ฉํด ๊ทธ๋ฃนํํ๋ฉด ๋๋ค. ๊ทธ๋ฃนํํ๋ฉด ๊ดํธ ์ ๋ฌธ์๋ฅผ ํ๋์ ๋จ์ผ ํํ์์ผ๋ก ์ ์ํ๋ค. ์๋ ์์์์ (ab)๋ก ๋ฌถ์์ผ๋ฏ๋ก ab๊ฐ 1๋ฒ ์ด์ ๋ฐ๋ณต๋๋ ..
[React] ๋์์ ํจ๊ณผ Algebraic Effect
[React] ๋์์ ํจ๊ณผ Algebraic Effect
2024.05.18TL;DR์ ์๋ถ์ ํจ๊ณผ๋ฅผ ์ถ์ํํ๋ ๋ฐฉ์ ์ค ํ๋๋ถ์ ํจ๊ณผ๋ฅผ ๋ฐ์์ํค๋ ์ฐ์ฐ(Effect)๊ณผ ๊ทธ ์ฐ์ฐ์ ์ฒ๋ฆฌํ๋ ํธ๋ค๋ฌ(Effect Handler)๋ก ๊ตฌ์ฑ์ฝ๋ ๊ด๋ฆฌ ๋ฐฉ์์ฝ๋ ์กฐ๊ฐ์ ๊ฐ์ธ๋ ๋งฅ๋ฝ(context)์ผ๋ก ์ฑ
์ ๋ถ๋ฆฌํน์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ธ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์๊ฒ ์ญํ ์์React์์ ๋์์ ํจ๊ณผ — Suspense, ErrorBoundary๋ก๋ฉ UI, ์๋ฌ ํ์ ์ญํ ์ ํน์ ์ปดํฌ๋ํธ๋ก ๊ฐ์ธ๋ ํํ๋ก ๋ถ๋ฆฌ์์ ์ปดํฌ๋ํธ์์ ๋ฐ์ํ ๋ถ์ ํจ๊ณผ๋ฅผ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์บ์นํ๊ณ ์ฒ๋ฆฌ๋์์ ํจ๊ณผ์ ์ฅ์ ์์ํ์ง ์์ ๋์์ ๋ํ ์ฑ
์ ๋ถ๋ฆฌ์ ์ธ์ (declarative) ์ฝ๋ ์์ฑ ๊ฐ๋ฅWhat๊ณผ How๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ฝ๋ ๊ฐ๋
์ฑ๊ณผ ์ ์ง๋ณด์์ฑ ํฅ์ ๋์์ ํจ๊ณผ๋?๋์์ ํจ๊ณผ๋ ๋ถ์ ํจ๊ณผ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ์ ์ค ํ๋๋ก, ๋ถ์ ํจ๊ณผ๋ฅผ ..
[Git] 1Password์ ์ ์ฅํ SSH ํค๋ก Git ์ปค๋ฐ ์๋ช
ํ๊ธฐ
[Git] 1Password์ ์ ์ฅํ SSH ํค๋ก Git ์ปค๋ฐ ์๋ช ํ๊ธฐ
2024.05.18Git 2.34 ์ดํ ๋ฒ์ ๋ถํฐ SSH ํค๋ฅผ ์ด์ฉํ ์ปค๋ฐ / ํ๊ทธ ์๋ช
์ ์ง์ํ๋ค. 1Password SSH ํตํฉ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด GPG ํค ์์ด 1Password ์ฑ์์ Git ์ปค๋ฐ ์๋ช
์ ์๋์ผ๋ก ๊ตฌ์ฑํ ์๋ ์๋ค. ์ปค๋ฐ์ ์๋ช
ํ๋ฉด GitHub ๊ณ์ ์ ์ฐ๊ฒฐ๋ SSH ๊ณต๊ฐํค๋ก ์ค์ ์ฌ์ฉ์๊ฐ ๋ณ๊ฒฝํ ๋ด์ฉ์ธ์ง ๊ฒ์ฆ ํ ์ ์๋ค. ๊ทธ๋ผ ๋ค๋ฅธ ์ฌ๋์ ์๋ช
ํ์ง ์์ ์ปค๋ฐ์ ๋ฐฉ์งํ ์ ์๋ค.GPG(Gnu Privacy Guard)๋ GNU ํ๋ก์ ํธ์์ ๊ฐ๋ฐํ ์คํ์์ค ์ํธํ ์ํํธ์จ์ด๋ค. ๊ณต๊ฐํค ์ํธํ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉฐ, ์ํธํ, ์๋ช
, ์ธ์ฆ ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์๊ตฌ ์ฌํญ1Password ๋ฒ์ 8์ด์์ ๋ฐ์คํฌํฑ ์ฑGit 2.34 ํน์ ์ดํ ๋ฒ์ 1Password SSH Agent ํ์ฑ (์ฐธ๊ณ ํฌ์คํ
)1Pas..
[CS] ์ค๋ฒํค๋ / ํ๋ก์ธ์ค / ์ค๋ ๋
[CS] ์ค๋ฒํค๋ / ํ๋ก์ธ์ค / ์ค๋ ๋
2024.05.18์ค๋ฒํค๋์ค๋ฒํค๋๋ ํน์ ์์
์ ์ํํ๊ธฐ ์ํด ๊ฐ์ ํน์ ์ถ๊ฐ์ ์ผ๋ก ํ์ํ ์์
์ด๋ ๋น์ฉ์ ์๋ฏธํ๋ค. ์ฌ๊ธฐ์ ๋น์ฉ์ ์ปดํจํฐ์ ์ฒ๋ฆฌ ์๊ฐ, ๋ฉ๋ชจ๋ฆฌ ๋ฑ์ ๋งํ๋ค. ์๋ฅผ ๋ค์ด ์ฒ๋ฆฌ์๊ฐ 10์ด๊ฐ ํ์ํ A ๊ธฐ๋ฅ์ ์์ ์ฑ์ ์ํ ๋ถ๊ฐ๊ธฐ๋ฅ B๋ฅผ ์ถ๊ฐํ ๊ฒฐ๊ณผ ์ด 15์ด๊ฐ ์์๋๋ค๋ฉด, ์ค๋ฒํค๋๋ 5์ด๊ฐ ๋๋ค. ์ค๋ฒํค๋๋ ํ์ค ์ธ๊ณ์์ ๋งํธ์ ์ฅ๋ณด๋ฌ ๊ฐ๋ ๊ฒ์ ๋น์ ํ๋ฉด ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋ค. 10๋ง ์์ด์น ๋ฌผ๊ฑด์ ๊ตฌ๋งคํ๊ธฐ(๋ฉ์ธ ์์
A) ์ํด ๋งํธ๊น์ง ๊ฐ๋ ์ผ(๋ถ๊ฐ ์์
B)์ ์ฅ๋ณด๊ธฐ์์ ํฐ ๋ถ๋ถ์ ์ฐจ์งํ์ง ์๋๋ค. ํ์ง๋ง ๊ป ํ๋๋ง ์ฌ๊ธฐ ์ํด(์์
A) ๋งํธ๊น์ง ๊ฐ๋ค๋ฉด, ๋งํธ๊น์ง ์ด๋ํ๋ ์ผ(๋ถ๊ฐ ์์
B)์ ์ฅ๋ณด๊ธฐ์์ ์๋์ ์ผ๋ก ํฐ ๋ถ๋ถ์ ์ฐจ์งํ๋ค. ์ด๋ ๊ป์ ์ฌ๊ธฐ ์ํด ๋งํธ๊น์ง ๊ฐ๋ ๊ฑด ์ค๋ฒํค๋๊ฐ ๋๋ฌด ํฌ๋ค๊ณ ๋ง..
[JS] ๋ฌธ์ฅ, ๋จ์ด, ์์๋ณ๋ก ๋ฌธ์์ด ๋ถ๋ฆฌํ๊ธฐ
[JS] ๋ฌธ์ฅ, ๋จ์ด, ์์๋ณ๋ก ๋ฌธ์์ด ๋ถ๋ฆฌํ๊ธฐ
2024.05.17split() ๋ฉ์๋์ ๋ฌธ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฌธ์์ด์ ๋ถ๋ฆฌํ ๋ ์ผ๋ฐ์ ์ผ๋ก split() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค. ํ์ง๋ง ์๋์ฒ๋ผ ๊ตฌ๋ถ์๋ ๊ฒฐ๊ณผ ๋ฐฐ์ด์์ ์ ์ธ๋๊ณ ๋ถํ์ํ ๊ณต๋ฐฑ์ด ์ถ๊ฐ๋๋ค. ์ฆ, language-sensitive ํ์ง ์๋ ๋จ์ ์ด ์๋ค. language-sensitive๋ ๋ฌธ๋งฅ์ ๋ง๋ ํํ๊ณผ ์ฉ์ด ์ฌ์ฉ์ ์๋ฏธํ๋ค. ํ๊ตญ์ด๋ก๋ ์ธ์ด ๊ฐ์์ฑ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค. 'Hello! How are you?'.split(/[.!?]/);// ['Hello', ' How are you', ''] ๐ก ์ ๊ท์ ๊ด๋ จ ์ฐธ๊ณ ํํ์์ ํ๋์ ๋จ์๋ก ์ทจ๊ธํ๋ ํฌํ ๊ดํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ตฌ๋ถ์๋ ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ํฌํจํ ์ ์๋ค[] ๋ฌธ์ ๊ทธ๋ฃน์ ๋๊ดํธ ๋ด๋ถ ๋ฌธ์์ด ์ค ํ๋๋ผ๋ ์ผ์นํ๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํ๋ค Intl ์๋ฐ์คํฌ๋ฆฝํธ API๋ฅผ ํ์ฉํ..
[TS] ํ์
์คํฌ๋ฆฝํธ์ ๊ณต๋ณ์ฑ / ๋ฐ๊ณต๋ณ์ฑ / ์ด๋ณ์ฑ
[TS] ํ์ ์คํฌ๋ฆฝํธ์ ๊ณต๋ณ์ฑ / ๋ฐ๊ณต๋ณ์ฑ / ์ด๋ณ์ฑ
2024.05.17TL;DR ์๊ฒฉ ๋ชจ๋๋น์๊ฒฉ ๋ชจ๋ํจ์ ๋ฆฌํด ํ์
๊ณต๋ณ์ ๊ณต๋ณ์ ํจ์ ํ๋ผ๋ฏธํฐ ํ์
๋ฐ๊ณต๋ณ์ ์ด๋ณ์ ๊ทธ ์ธ๊ณต๋ณ์ ๊ณต๋ณ์ ๊ณต๋ณ์ฑ : ์ํผ ํ์
(๋์ ํ์
)์ด ์๋ธ ํ์
(์ข์ ํ์
)์ ์ปค๋ฒํ๋ ๊ด๊ณ์๋ธ ํ์
์ ์ํผ ํ์
์ ๋์
ํ ์ ์์ e.g. superType = subTypeํ์
์คํฌ๋ฆฝํธ ๊ธฐ๋ณธ ๋์๋ฐ๊ณต๋ณ์ฑ : ์๋ธ ํ์
(์ข์ ํ์
)์ด ์ํผ ํ์
(๋์ ํ์
)์ ์ปค๋ฒํ๋ ๊ด๊ณ์ํผ ํ์
์ ์๋ธ ํ์
์ ๋์
ํ ์ ์์ e.g. subType = superTypeํจ์ ํ๋ผ๋ฏธํฐ ๋์์ด๋ณ์ฑ : ๊ณต๋ณ์ฑ๊ณผ ๋ฐ๊ณต๋ณ์ฑ์ ๋ชจ๋ ํฌํจํ๋ ๊ด๊ณ์ํผ ํ์
๊ณผ ์๋ธ ํ์
์ ๋ชจ๋ ๋์
ํ ์ ์์strictFunctionTypes ์ต์
์ ๊ป์ ๋ ํจ์ ํ๋ผ๋ฏธํฐ ๋์ ๊ณต๋ณ์ฑ | Covariance๊ณต๋ณ์ฑ : A๊ฐ B์ ์๋ธ ํ์
์ด๋ฉด, T๋ T์ ์๋ธ ํ์
์..