[TypeScript] Interface์ Class์ ์ฐจ์ด์
๐ ๊ธฐ๋ณธ ์ ์
์ธํฐํ์ด์ค
- ์ธํฐํ์ด์ค๋ ES6๊ฐ ์ง์ํ์ง ์๋ ํ์ ์คํฌ๋ฆฝํธ๋ง์ ํน์ง์ ๋๋ค.
- ์ธํฐํ์ด์ค๋ ํ์ ์ด๋ฉฐ ์ปดํ์ผ ํ์ ์ฌ๋ผ์ง๋๋ค.
- ์ถ์ ํด๋์ค๋ ์ ์ธ๊ณผ ๊ตฌํ์ด ๋ชจ๋ ์กด์ฌํ์ง๋ง ์ธํฐํ์ด์ค๋ ์ ์ธ๋ง ์กด์ฌํ๋ฉฐ, ๋ฉค๋ฒ ๋ณ์์ ๋ฉค๋ฒ ๋ฉ์๋๋ฅผ ์ ์ธํ ์ ์์ง๋ง ์ ๊ทผ ์ ํ์๋ ์ค์ ํ ์ ์์ต๋๋ค.
- ํด๋์ค์ ๋ฌ๋ฆฌ ์ธํฐํ์ด์ค๋ TypeScript์ ์ปจํ ์คํธ ๋ด์์๋ง ์กด์ฌํ๋ ๊ฐ์ ๊ตฌ์กฐ์ ๋๋ค.
- TypeScript ์ปดํ์ผ๋ฌ๋ ํ์ ์ฒดํฌ ๋ชฉ์ ์ผ๋ก๋ง ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฝ๋๊ฐ JavaScript ์ธ์ด๋ก ํธ๋์ค ํ์ผ๋๋ฉด ์ธํฐํ์ด์ค์์ ์ ๊ฑฐ๋ฉ๋๋ค.
ํด๋์ค
- ํด๋์ค๋ ES6์์ JavaScript ์ํ๊ณ์ ๊ณต์์ ์ผ๋ก ๋์ ๋์์ต๋๋ค.
- ํด๋์ค๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ๊ทธ ์์ฒด์ ๋๋ค.
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ปค๋ค๋ ๋ฌธ์ ๋ฅผ ํด๋์ค๋ผ๋ ๋จ์๋ก ๋๋๊ณ ํด๋์ค ๊ฐ์ ๊ด๊ณ๋ฅผ ์ถ๊ฐํ๋ฉด์ ์ฝ๋ ์ค๋ณต์ ์ต์ํํ๋ ๊ฐ๋ฐ ๋ฐฉ์์ ๋๋ค. ํด๋์ค ๊ฐ์ ๊ด๊ณ๋ ์์์ด๋ ํฌํจ ๊ด๊ณ๋ฅผ ๊ณ ๋ คํด ์ถ๊ฐํฉ๋๋ค.
๐ ์ฌ์ฉ ์ฉ๋
์ธํฐํ์ด์ค
- ์ปค์คํ ํ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ธํฐํ์ด์ค์๋ ํ์ ํญ๋ชฉ์ผ๋ก ์ฌ์ฉํ ํ๋กํผํฐ๋ฅผ ์ ์ธํด์, ํจ์์ ์ ๋ฌํ๋ ์ธ์์ ํ์์ ๊ณ ์ ํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ๋ ์ธํฐํ์ด์ค๋ฅผ ์ธ์๋ก ๋ฐ๋ ํจ์๊ฐ ์คํ๋ ๋ TypeScript ์ปดํ์ผ๋ฌ๊ฐ ์ธ์์ ์ ํจ์ฑ์ ๋จผ์ ๊ฒ์ฌํฉ๋๋ค.
- ์ถ์ ํด๋์ค๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋ฉ์๋์ ํํ๋ง ์ ์ธํด์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๊ณ , ์ดํ์ ํด๋์ค๋ฅผ ์ ์ํ ๋ implements ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด์ ์ด ์ธํฐํ์ด์ค๋ฅผ ์ง์ ํ๋ฉด, ์ด ํด๋์ค๋ ์ถ์ํจ์๋ก ์ ์ธ๋ ๋ฉ์๋์ ๋ชธ์ฒด๋ฅผ ๋ฐ์๋ค์ฌ์ผ ํฉ๋๋ค.
ํด๋์ค
- ๊ฐ์ฒด ํฉํ ๋ฆฌ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ํด๋์ค๋ ๊ฐ์ฒด์ ๋ชจ์๊ณผ ๋์์ ๋ํ ์ฒญ์ฌ์ง์ ์ ์ํ ๋ค์ ํด๋์ค ์์ฑ์ ์ด๊ธฐํํ๊ณ method๋ฅผ ์ ์ํฉ๋๋ค. ๋ฐ๋ผ์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ๋ ์คํ ๊ฐ๋ฅํ ํจ์์ ์ ์๋ property๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ์ป์ต๋๋ค.
โ ์ถ์ ํด๋์ค๋?
์ถ์ ํด๋์ค๋ ๊ตฌ์ฒด ํด๋์ค๊ฐ ๊ฐ์ ธ์ผ ํ๋ ์์ฑ๊ณผ ํจ์๋ฅผ ์ค์ ํ๋ ํด๋์ค์ ๋๋ค. ๊ตฌ์ฒด ํด๋์ค์ ์ค๊ณ์ ํน์ ๋๋ฉด์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ถ์ ํด๋์ค๋ ๊ตฌ์ฒด ํด๋์ค์ ๋๋ฉด ํน์ ์ค๊ณ์์ด๋ฏ๋ก ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋ง์ฝ, ์ถ์ ํด๋์ค์ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ TypeScript๋ Cannot create an instance of an abstract class.๋ผ๋ ์ค๋ฅ๋ฅผ ํ์ํฉ๋๋ค.
โ TypeScript์ ์ถ์ ํด๋์ค
ํ์ ์คํฌ๋ฆฝํธ(TypeScript)์์ ์ถ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ฉ๋๋ ํ์ ํด๋์ค(=๊ตฌ์ฒด ํด๋์ค)์์ ๊ณตํต ๋์์ ์ฐพ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ถ์ ํด๋์ค๋ ๊ฐ์ฒด ์ธ์คํด์คํํ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์๋ค๋ ์ ์ ํ์ ์ฌ์ฉํฉ๋๋ค.
๐จ๐ปโ๏ธ ๊ฒฐ๋ก
- newํค์๋๋ฅผ ์ฐ์ง ์๊ณ ์์์ ๊ตฌํ๋ง ํ ๊ฒ์ด๋ผ๋ฉด Interface๋ฅผ ์ฌ์ฉํด๋ ๋ฌด๋ฐฉํฉ๋๋ค.
- ํจ์๋ ํด๋์ค๋ ํ ๋น๋๋ ๋ฌธ๋ฒ์ด ๋ฐ๋ก ์๊ธฐ ๋๋ฌธ์ ๋ณดํต ๊ฐ์ฒด์์ Interface๋ฅผ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
์ฐธ๊ณ
์์ธํ ๋ด์ฉ๊ณผ ์์๋ค์ ๋ณด๊ณ ์ถ๋ค๋ฉด ์๋์ ๋งํฌ๋ค๋ก ์ด๋ํด์ ์ฝ์ด์ฃผ์ธ์. ์๋์ ๊ธ๋ค์ ์ฐธ๊ณ ํ์ฌ ์์ฑํ์ต๋๋ค.
[์งค๋ง๊ธ] Interface์ Class์ ์ฐจ์ด์
์๋ ํ์ธ์. ๊น์ฉ์ฑ์ ๋๋ค. ์ ๊ฐ ์ง๋ ํฌ์คํ TypeScript๊ฐ๋ก 5ํธ์์ Class์ ๋ํด ์ค๋ช ๋๋ ธ๋๋ฐ์. ์ ์ ๊ฒฝ์ฐ Interface์ Class๊ฐ ๋ง์ด ํท๊ฐ๋ ธ์์ด์. ์ฌ๋ฌ๋ถ๋ค๋ ๊ทธ๋ฐ๊ฐ์? ๊ทธ๋์ ์ด๋ฒ ํฌ์คํ ์์๋
velog.io
TypeScript ํด๋์ค์ ์ธํฐํ์ด์ค
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP, Object-Oriented Programming)์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ ์ฝ๋ ์ค๋ณต์ ํ๊ธฐ์ ์ผ๋ก ์ค์ผ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ปค๋ค๋ ๋ฌธ์ ๋ฅผ ํด๋์ค๋ผ๋ ๋จ์๋ก ๋๋๊ณ
velog.io
[TypeScript]์ถ์ ํด๋์ค(Abstract Class)
์ถ์ํ(Abstraction) ์ถ์ํ๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP:Object-Oriented Programming)์ ํต์ฌ ์์ด์ด๋์ด ์ค ํ๋์ ๋๋ค. ๋ณต์ก์ฑ์ ์ต์ํํ๊ณ ๊ณ ๊ธ ์ํคํ ์ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋๋ฐ ๋์์ด ๋๋ ๊ธฐ์ ์ด๋ฉฐ, ํ
developer-talk.tistory.com