- 1. 10์ฅ ํ์
์ ์ธ๊ณผ ๋ณ๊ฒฝ, ํ์
ํธํ
- 1.1. ๐342p. ํ์ ์บ์คํ ๊ณผ ํ์ ๋ณํ์ ์ฐจ์ด
- 1.2. ๐343p. ํ์ ์บ์คํ (type casting)๊ณผ ํ์ ์ด์ค์ (type assertion) ์ฐจ์ด
- 1.3. ๐344p. ํ์ ์ด์ ์ ์ ์ธ ๋ฐฉ๋ฒ
- 1.4. ๐346p. ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ง๋ค์ ํ์
๊ฒ์ฌ ๋ฐฉ์๊ณผ ํ์
์คํฌ๋ฆฝํธ์ ํ์ดํ ๋ฐฉ์
- 1.4.1. ํ์ ์คํฌ๋ฆฝํธ์ 4๊ฐ์ง ํ์ ์ง์ ๋ฐฉ์
- 1.4.2. ๋ ํ์ดํ
- 1.4.3. ๊ตฌ์กฐ ํ์ดํ
- 1.4.4. ๊ตฌ์กฐ ์๋ธํ์ดํ
- 1.4.4.1. ๊ตฌ์กฐ ์๋ธํ์ดํ์ ์กฐ๊ฑด
- 1.4.4.2. 1. ํ์ ์ด ์์ง๋ง ๊ตฌ์กฐ๊ฐ ์ผ๋ถ ๊ฐ์ ๋ณ์ ๊ฐ์ ๊ตฌ์กฐ ์๋ธํ์ดํ
- 1.4.4.3. 2. ๋งค๊ฐ๋ณ์ ๊ฐ์๊ฐ ๋ค๋ฅธ ํจ์ ํ์ ๊ฐ์ ๊ตฌ์กฐ ์๋ธํ์ดํ
- 1.4.4.4. 3. ๊ตฌ์กฐ๊ฐ ์ผ๋ถ ๊ฐ์ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค ๊ฐ์ ๊ตฌ์กฐ ์๋ธํ์ดํ
- 1.4.5. ๋ช ๋ชฉ ํ์ดํ
๐ Quick Start Typescript ์ ์ฝ๊ณ , ๊ฐ๋จํ ๋ชฐ๋๋ ๋ถ๋ถ์ด๋ ์ค์ํ๋ค๊ณ ์๊ฐ๋๋ ๋ถ๋ถ์ ์์ฑ
10์ฅ ํ์ ์ ์ธ๊ณผ ๋ณ๊ฒฝ, ํ์ ํธํ
๐342p. ํ์ ์บ์คํ ๊ณผ ํ์ ๋ณํ์ ์ฐจ์ด
๋ช ์์ ์ธ ๊ฒ์ ์ฐจ์ด
ํ์ ์บ์คํ (type casting): ๋ช ์์ ์ผ๋ก ์ ์ธํ ์บ์คํ ์ฝ๋์ ์ํ ํ์ ๋ณ๊ฒฝ
ํ์ ๋ณํ(type conversion): JS ์ธํฐํ๋ฆฌํฐ์ ์ํ ํ์ ๋ณ๊ฒฝ
1 | // Type casting |
๐343p. ํ์ ์บ์คํ (type casting)๊ณผ ํ์ ์ด์ค์ (type assertion) ์ฐจ์ด
์ปดํ์ผ ์ดํ์ ์ ์ง ์ฌ๋ถ
ํ์ ์บ์คํ ์ ๊ฒฝ์ฐ: ์ปดํ์ผ ์ดํ, ์ฝ๋ ์ ์ง
ํ์ ์ด์ค์ ์ ๊ฒฝ์ฐ: ์ปดํ์ผ ๊ณผ์ ๊น์ง๋ง ์ ํจ, ์ปดํ์ผ ์ดํ ์ ๊ฑฐ
๐344p. ํ์ ์ด์ ์ ์ ์ธ ๋ฐฉ๋ฒ
1 | // ๋ฐฉ๋ฒ 1 |
๋ฐฉ๋ฒ1 (๊บพ์ ๋ฐฉ์)์ ๊ฒฝ์ฐ๋ JSX ๋ฌธ๋ฒ๊ณผ ์ ์ฌํด ์ถฉ๋ ์ํ์ด ์กด์ฌํ์ฌ, as
๋ฅผ ์ฐ๋ ๊ฒ์ ๊ถ์ฅ
๐346p. ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ง๋ค์ ํ์ ๊ฒ์ฌ ๋ฐฉ์๊ณผ ํ์ ์คํฌ๋ฆฝํธ์ ํ์ดํ ๋ฐฉ์
- ๋์ ํ์ ๊ฒ์ฌ(dynamic type checking): Javascript์ duck typing - ๋ฐํ์ ์์
- ์ ์ ํ์ ๊ฒ์ฌ(static type chcking): C++, Java - ์ปดํ์ผ ์์
ํ์ ์คํฌ๋ฆฝํธ์ ๊ฒฝ์ฐ๋ ๋๊ฐ ๋ชจ๋ ์ง์
ํ์ ์คํฌ๋ฆฝํธ์ 4๊ฐ์ง ํ์ ์ง์ ๋ฐฉ์
์๋์ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ด๋ฆ์ ๋ชฐ๋ผ๋ ๊ฐ๋ฐํ๋ฉด์ ์์ฐ์ค๋ฝ๊ฒ ์ฌ์ฉํด์ผํ๋ค.
- ๋ ํ์ดํ(Duck typing)
- ๊ตฌ์กฐ ํ์ดํ(structural typing)
- ๊ตฌ์กฐ ์๋ธํ์ดํ(structural subtyping)
- ๋ช ๋ชฉ ํ์ดํ(nominal typing)
๋ ํ์ดํ
1 | interface DuckGoose { |
์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์์ ๋์ ์ผ๋ก ํ์ดํ์ด ์ด๋ค์ง๋ ํ์ ์ง์ ๋ฐฉ์
๊ฐ์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๋ณผ ์ ์์, ์ ์ธ๋์ง ์์ ๋ฉ์๋์ ๊ฒฝ์ฐ ์๋ฌ ๋ฐ์
๊ตฌ์กฐ ํ์ดํ
1. ๊ตฌ์กฐ๊ฐ ๊ฐ์ ํด๋์ค์ ๊ฒฝ์ฐ
1 | class Animal { |
ํ์ ์คํฌ๋ฆฝํธ ์ปดํ์ผ ์๊ฐ์ ํ์ ํธํ์ด ๊ฐ๋ฅํ์ง๋ฅผ ๊ฒ์ฌ
ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์๊ฐ ๊ฐ์ผ๋ฏ๋ก ์๋ก ํ์ ํธํ์ด ๊ฐ๋ฅ
์์ฑ์ ๋งค๊ฐ๋ณ์๋ ์๊ด์์, ์ ๊ทผ ์ ํ์๊ฐ ์ค์ ๋์์ง ์๊ธฐ ๋๋ฌธ์ ์์ฑ์ ๋ด๋ถ์์๋ง ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ
(์์ฑ์ ๋งค๊ฐ๋ณ์ ๊ธฐ๋ณธ๊ฐ private
)
2. ์์ ๊ด๊ณ๋ฅผ ๊ณ ๋ คํ ๊ตฌ์กฐ๊ฐ ๊ฐ์ ํด๋์ค์ ๊ฒฝ์ฐ
1 | class Person { |
admin๊ณผ MemberCard๋ ์๋ฌด๋ฐ ๊ด๊ณ๊ฐ ์์ง๋ง, ์์ ํ ๋์ผํ์ง๋ ์์ง๋ง ๊ฐ์ ๊ตฌ์กฐ์ ๋ฉค๋ฒ ๋ณ์๋ฅผ ์์ ํ๊ณ ์์ผ๋ ํ์ ํธํ์ด ๊ฐ๋ฅ
3. ๊ตฌ์กฐ๊ฐ ๊ฐ์ ํด๋์ค์ ์ธํฐํ์ด์ค ๊ฐ์ ๊ตฌ์กฐ ํ์ดํ
ํด๋์ค์ ์ธํฐํ์ด์ค์ ๊ตฌ์กฐ ๊ฐ์ผ๋ฉด ํ์ ํธํ์ด ๊ฐ๋ฅ
1 | interface Person { |
๊ตฌ์กฐ ์๋ธํ์ดํ
ํ์ ๊ตฌ์กฐ๊ฐ ๊ฐ์์ผ์ง๋ง ํ์ ํธํ์ด ์ด๋ค์ง์ง๋ง, ๊ตฌ์กฐ ์๋ธํ์ดํ์ ๊ตฌ์กฐ๊ฐ ๋ถ๋ถ์ ์ผ๋ก ๊ฐ๋๋ผ๋ ํ์ ํธํ์ ์ง์
๊ตฌ์กฐ ์๋ธํ์ดํ์ ์กฐ๊ฑด
ํ์ ํ์ ์ด ์์ ํ์ ์ผ๋ก๋ง ํธํ
1 | // ์์ ํ์ |
1. ํ์ ์ด ์์ง๋ง ๊ตฌ์กฐ๊ฐ ์ผ๋ถ ๊ฐ์ ๋ณ์ ๊ฐ์ ๊ตฌ์กฐ ์๋ธํ์ดํ
1 | let infoUpper = { |
2. ๋งค๊ฐ๋ณ์ ๊ฐ์๊ฐ ๋ค๋ฅธ ํจ์ ํ์ ๊ฐ์ ๊ตฌ์กฐ ์๋ธํ์ดํ
1 | let funcUpper = (a: string) => a; |
3. ๊ตฌ์กฐ๊ฐ ์ผ๋ถ ๊ฐ์ ๊ฐ์ฒด์ ์ธํฐํ์ด์ค ๊ฐ์ ๊ตฌ์กฐ ์๋ธํ์ดํ
1 | interface GroupUpper { |
๋ช ๋ชฉ ํ์ดํ
๋ช ์์ ์ผ๋ก ์ง์ ๋ ํ์ ๊ฐ์๋ง ํ์ ์ด ํธํ
1 | enum EastAsia1 { |