Open bada308 opened 10 months ago
ํ์ ์คํฌ๋ฆฝํธ์ ํ์ ์ ๊ฐ์ ์งํฉ์ผ๋ก ์๊ฐํ ์ ์์
๊ตฌ์กฐ์ ์๋ธํ์ดํ์ด๋ ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ์์ฑ์ ๋ฐํ์ผ๋ก ํ์ ์ ๊ตฌ๋ถํ๋ ๊ฒ์ด๋ค.
์ด๋ฆ์ด ๋ค๋ฅธ ๊ฐ์ฒด๋ผ๋ ๊ฐ์ง ์์ฑ์ด ๋์ผํ๋ค๋ฉด ์๋ก ํธํ ๊ฐ๋ฅ
์๋ก ๋ค๋ฅธ ๋ ํ์ ๊ฐ์ ํธํ์ฑ์ ์ค๋ก์ง ํ์ ๋ด๋ถ์ ๊ตฌ์กฐ์ ์ํด ๊ฒฐ์ ๋จ
๊ตฌ์กฐ์ ์๋ธํ์ดํ์ ๋ช ๋ชฉ์ ํ์ดํ๊ณผ ๋์กฐ๋๋ ํ์ดํ ๋ฐฉ์์. ๋ช ๋ชฉ์ ํ์ดํ์ ์ด๋ฆ์ผ๋ก ํ์ ๊ตฌ๋ถ, ๊ตฌ์กฐ๊ฐ ๊ฐ๋๋ผ๋ ์ด๋ฆ์ด ๋ค๋ฅด๋ฉด ๋ค๋ฅธ ํ์
๋ช ๋ชฉ์ ํ์ดํ์ ๊ตฌ์กฐ์ ํ์ดํ์ ๋นํด ์กฐ๊ธ ๋ ์์ ํจ. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ํ์ ์คํฌ๋ฆฝํธ๊ฐ ๊ตฌ์กฐ์ ํ์ดํ์ ์ฑํํ ์ด์ ๋ TS๊ฐ JS๋ฅผ ๋ชจ๋ธ๋งํ ์ธ์ด์ด๊ธฐ ๋๋ฌธ
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ ํ์ดํ ์ด๋ค ํ์ ์ ๋ถํฉํ๋ ๋ณ์์ ๋ฉ์๋๋ฅผ ๊ฐ์ง ๊ฒฝ์ฐ ํด๋น ํ์ ์ ์ํ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ
๋ ํ์ดํ vs ๊ตฌ์กฐ์ ํ์ดํ
๊ฐ๊ณผ ํ์ ๊ณต๊ฐ์ ๋์์ ์กด์ฌํ๋ ์ฌ๋ณผ
JS์ ํด๋์ค๋ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ๋์ฑ ์ฝ๊ฒ ์์ฑํ๊ธฐ ์ํ ๋ฌธ๋ฒ ๊ธฐ๋ฅ์ผ๋ก ์ค์ ๋์์ ํจ์์ ๊ฐ์ ๋์์ ํ์ ์ผ๋ก๋ ์ฌ์ฉ โ ํ์ ์คํฌ๋ฆฝํธ ์ฝ๋์์ ํด๋์ค๋ ๊ฐ๊ณผ ํ์ ๊ณต๊ฐ ๋ชจ๋์ ํฌํจ๋ ์ ์์
![[Pasted image 20231231233632.png]]
ํ์ ์คํฌ๋ฆฝํธ์์ ํด๋์ค๋ ํ์ ์ ๋ํ ์ด์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ง๋ง ๋ฐํ์์์ ๊ฐ์ฒด๋ก ๋ณํ๋์ด ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ผ๋ก ์ฌ์ฉ๋จ
enum ์ญ์ ๋ฐํ์์ ๊ฐ์ฒด๋ก ๋ณํ
![[Pasted image 20231231233822.png]]
TS์์ ์ด๋ค ์ฌ๋ณผ์ด ๊ฐ์ผ๋ก ์ฌ์ฉ๋๋ค๋ ๊ฒ์ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํด์ JS ํ์ผ๋ก ๋ณํํด๋ ์ฌ์ ํ JS ํ์ผ์ ํด๋น ์ ๋ณด๊ฐ ๋จ์์์์ ์๋ฏธ
๋ฐ๋ฉด, ํ์ ์ผ๋ก๋ง ์ฌ์ฉ๋๋ ์์๋ ์ปดํ์ผ ์ดํ์ JS ํ์ผ์์ ํด๋น ์ ๋ณด๊ฐ ์ฌ๋ผ์ง
type๊ณผ interface ์ค ์ด๋ค ๊ฑธ ์จ์ผ ํ ๊น?
type
interface
type์ interface ์ค ์ด๋ค ํค์๋๋ฅผ ๋ ์์ฃผ ์ฌ์ฉํ๋์ง์ ๊ด๋ จ๋ ์ฃผ์ ์ ์ฐํ ์ด์ผ๊ธฐ๊ฐ ์์์ต๋๋ค.
์ ๋ ํ๋ก์ ํธ์์ ๋๋ถ๋ถ์ ๊ฐ์ฒด์ ํ์ ์ ์ ์ํ ๋๋ interface๋ฅผ ์ฌ์ฉํ๊ณ , interface ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ ์ ๋์จ ํ์ ๋ฑ์๋ type์ ์ฌ์ฉํ์ต๋๋ค.
ํ์ง๋ง, ์ด๋ ๊ฒ ์ฌ์ฉํ ๋ฐ ํน๋ณํ ์ด์ ๋ ๊ธฐ์ค์ ์ค์ ํด๋์ง ์๊ณ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ type๊ณผ interface์ ๋ํด ๋ ์์๋ณด๊ณ ์ ์ฃผ์ ๋ฅผ ์ ์ ํ์ต๋๋ค.
type์ ์์ ํ์ ์ ์ ์ํ ์ ์์ interface๋ ์์ ํ์ ์ ์ ๋ถ๊ฐ๋ฅ
์ ๋์จ ํ์ ์ type๋ง ์ฌ์ฉ ๊ฐ๋ฅ
ํํ ํ์ ์ type๋ง ์ฌ์ฉ ๊ฐ๋ฅ
interface์ type ๋ชจ๋ ๊ฐ์ฒด ํ์ ์ด๋ ํจ์ ํ์ ์ ์ธ ๊ฐ๋ฅ
interface์ ๊ฒฝ์ฐ ๊ฐ์ interface ์ฌ๋ฌ๋ฒ ์ ์ธ ๊ฐ๋ฅํ๊ณ ์๋์ผ๋ก ๋ณํฉ๋จ
type์ ๋ณํฉ๋์ง ์๊ณ ํ์ ์ ์ด๋ฆ์ด ์ ์ผํด์ผ ํ๋ค.
type์ &(intersection)์ ์ฌ์ฉ
&
interface๋ ์์(inheritance)๋ฅผ ์ฌ์ฉ
extends
๋งคํ๋ ๊ฐ์ฒด ํ์ ์ type์ผ๋ก๋ง ์ ์๋ ์ ์๊ณ , in ํค์๋์ keyof ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
in
keyof
ํ์ ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ
์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ
์ฑ์น๋
์ค์ฑ๋
๋์๋
๐ ์ ๋ฆฌ
2.2 ํ์ ์คํฌ๋ฆฝํธ์ ํ์ ์์คํ
๊ตฌ์กฐ์ ํ์ดํ
ํ์ ์คํฌ๋ฆฝํธ์ ํ์ ์ ๊ฐ์ ์งํฉ์ผ๋ก ์๊ฐํ ์ ์์
๊ตฌ์กฐ์ ์๋ธํ์ดํ์ด๋ ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ณ ์๋ ์์ฑ์ ๋ฐํ์ผ๋ก ํ์ ์ ๊ตฌ๋ถํ๋ ๊ฒ์ด๋ค.
์ด๋ฆ์ด ๋ค๋ฅธ ๊ฐ์ฒด๋ผ๋ ๊ฐ์ง ์์ฑ์ด ๋์ผํ๋ค๋ฉด ์๋ก ํธํ ๊ฐ๋ฅ
์๋ก ๋ค๋ฅธ ๋ ํ์ ๊ฐ์ ํธํ์ฑ์ ์ค๋ก์ง ํ์ ๋ด๋ถ์ ๊ตฌ์กฐ์ ์ํด ๊ฒฐ์ ๋จ
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ฎ์ ํ์ ์คํฌ๋ฆฝํธ
๊ตฌ์กฐ์ ์๋ธํ์ดํ์ ๋ช ๋ชฉ์ ํ์ดํ๊ณผ ๋์กฐ๋๋ ํ์ดํ ๋ฐฉ์์. ๋ช ๋ชฉ์ ํ์ดํ์ ์ด๋ฆ์ผ๋ก ํ์ ๊ตฌ๋ถ, ๊ตฌ์กฐ๊ฐ ๊ฐ๋๋ผ๋ ์ด๋ฆ์ด ๋ค๋ฅด๋ฉด ๋ค๋ฅธ ํ์
๋ช ๋ชฉ์ ํ์ดํ์ ๊ตฌ์กฐ์ ํ์ดํ์ ๋นํด ์กฐ๊ธ ๋ ์์ ํจ. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ํ์ ์คํฌ๋ฆฝํธ๊ฐ ๊ตฌ์กฐ์ ํ์ดํ์ ์ฑํํ ์ด์ ๋ TS๊ฐ JS๋ฅผ ๋ชจ๋ธ๋งํ ์ธ์ด์ด๊ธฐ ๋๋ฌธ
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ ํ์ดํ ์ด๋ค ํ์ ์ ๋ถํฉํ๋ ๋ณ์์ ๋ฉ์๋๋ฅผ ๊ฐ์ง ๊ฒฝ์ฐ ํด๋น ํ์ ์ ์ํ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ
๋ ํ์ดํ vs ๊ตฌ์กฐ์ ํ์ดํ
๊ฐ๊ณผ ํ์ ๊ณต๊ฐ์ ๋์์ ์กด์ฌํ๋ ์ฌ๋ณผ
JS์ ํด๋์ค๋ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ๋์ฑ ์ฝ๊ฒ ์์ฑํ๊ธฐ ์ํ ๋ฌธ๋ฒ ๊ธฐ๋ฅ์ผ๋ก ์ค์ ๋์์ ํจ์์ ๊ฐ์ ๋์์ ํ์ ์ผ๋ก๋ ์ฌ์ฉ โ ํ์ ์คํฌ๋ฆฝํธ ์ฝ๋์์ ํด๋์ค๋ ๊ฐ๊ณผ ํ์ ๊ณต๊ฐ ๋ชจ๋์ ํฌํจ๋ ์ ์์
![[Pasted image 20231231233632.png]]
ํ์ ์คํฌ๋ฆฝํธ์์ ํด๋์ค๋ ํ์ ์ ๋ํ ์ด์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ง๋ง ๋ฐํ์์์ ๊ฐ์ฒด๋ก ๋ณํ๋์ด ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ผ๋ก ์ฌ์ฉ๋จ
enum ์ญ์ ๋ฐํ์์ ๊ฐ์ฒด๋ก ๋ณํ
![[Pasted image 20231231233822.png]]
TS์์ ์ด๋ค ์ฌ๋ณผ์ด ๊ฐ์ผ๋ก ์ฌ์ฉ๋๋ค๋ ๊ฒ์ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํด์ JS ํ์ผ๋ก ๋ณํํด๋ ์ฌ์ ํ JS ํ์ผ์ ํด๋น ์ ๋ณด๊ฐ ๋จ์์์์ ์๋ฏธ
๋ฐ๋ฉด, ํ์ ์ผ๋ก๋ง ์ฌ์ฉ๋๋ ์์๋ ์ปดํ์ผ ์ดํ์ JS ํ์ผ์์ ํด๋น ์ ๋ณด๊ฐ ์ฌ๋ผ์ง
๐ถ ๋๋๊ณ ์ถ์ ์ด์ผ๊ธฐ
type vs interface
type
๊ณผinterface
์ค ์ด๋ค ๊ฑธ ์จ์ผ ํ ๊น?type
์interface
์ค ์ด๋ค ํค์๋๋ฅผ ๋ ์์ฃผ ์ฌ์ฉํ๋์ง์ ๊ด๋ จ๋ ์ฃผ์ ์ ์ฐํ ์ด์ผ๊ธฐ๊ฐ ์์์ต๋๋ค.์ ๋ ํ๋ก์ ํธ์์ ๋๋ถ๋ถ์ ๊ฐ์ฒด์ ํ์ ์ ์ ์ํ ๋๋
interface
๋ฅผ ์ฌ์ฉํ๊ณ ,interface
์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ ์ ๋์จ ํ์ ๋ฑ์๋type
์ ์ฌ์ฉํ์ต๋๋ค.ํ์ง๋ง, ์ด๋ ๊ฒ ์ฌ์ฉํ ๋ฐ ํน๋ณํ ์ด์ ๋ ๊ธฐ์ค์ ์ค์ ํด๋์ง ์๊ณ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์
type
๊ณผinterface
์ ๋ํด ๋ ์์๋ณด๊ณ ์ ์ฃผ์ ๋ฅผ ์ ์ ํ์ต๋๋ค.์์ ํ์
type
์ ์์ ํ์ ์ ์ ์ํ ์ ์์interface
๋ ์์ ํ์ ์ ์ ๋ถ๊ฐ๋ฅ์ ๋์จ ํ์
์ ๋์จ ํ์ ์
type
๋ง ์ฌ์ฉ ๊ฐ๋ฅํํ ํ์
ํํ ํ์ ์
type
๋ง ์ฌ์ฉ ๊ฐ๋ฅ๊ฐ์ฒด/ํจ์ ํ์
interface
์type
๋ชจ๋ ๊ฐ์ฒด ํ์ ์ด๋ ํจ์ ํ์ ์ ์ธ ๊ฐ๋ฅinterface
์ ๊ฒฝ์ฐ ๊ฐ์interface
์ฌ๋ฌ๋ฒ ์ ์ธ ๊ฐ๋ฅํ๊ณ ์๋์ผ๋ก ๋ณํฉ๋จtype
์ ๋ณํฉ๋์ง ์๊ณ ํ์ ์ ์ด๋ฆ์ด ์ ์ผํด์ผ ํ๋ค.type
์&
(intersection)์ ์ฌ์ฉtype
์&
๋ฅผ ์ฌ์ฉํ์ฌ ๊ต์ฐจ๋ฅผ ๊ตฌํํจinterface
๋ ์์(inheritance)๋ฅผ ์ฌ์ฉinterface
๋extends
๋ฅผ ์ฌ์ฉํด ์์์ ๊ตฌํํจ๋งคํ๋ ๊ฐ์ฒด ํ์
๋งคํ๋ ๊ฐ์ฒด ํ์ ์
type
์ผ๋ก๋ง ์ ์๋ ์ ์๊ณ ,in
ํค์๋์keyof
ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.์ ๋ฆฌ
type
์interface
์ ๊ฑฐ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ปค๋ฒํจinterface
๋ ํ์ฅ ๊ฐ๋ฅํ๊ณ ,type
์ ๊ทธ๋ ์ง ์๋ค.ํ์ ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ
์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ