- 1. 7์ฅ ํด๋์ค์ ์ธํฐํ์ด์ค ๋ชฉ์ฐจ
- 1.1. ๐183p. ํ์ ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ง์
- 1.2. ๐p187. ๊ธฐ์กดJs(prototype) vs class ๋น๊ต
- 1.3. ๐p188. ์์(extends), ํฌํจ(2) ๊ด๊ณ
- 1.4. ๐p192. ์ ๊ทผ ์ ํ์
- 1.5. ๐p195. ์ถ์ฝ ์ฝ๋ฉ๊ธฐ๋ฒ
- 1.6. ๐p195. ์ ๊ทผ ์ ํ์ ์ ์ธ > ํด๋์ค ๋งค๊ฐ๋ณ์๊ฐ ๋จ
- 1.7. ๐p197. get/set ์ฝ๋ฉ์คํ์ผ
- 1.8. ๐p197. ๋ถ๋ชจ ํด๋์ค ๋ฉค๋ฒ ๋ณ์ ์ด์ฉ
- 1.9. ๐p199. ๊ธฐ๋ณธ ์ ๊ทผ ์ ํ์
- 1.10. ๐p202. ์ถ์ ํด๋์ค๋ฅผ ์ด์ฉํ ๊ณตํต ๊ธฐ๋ฅ ์ ์
- 1.11. ๐ p205. Interface ๋ค์ค ์์
- 1.12. ๐p212. ํด๋์ค๋ฅผ ๋ฐฐ์ด ์์๋ก ๋ณด๊ณ ๋ฐฐ์ด ํ์ ์ ์ธ
- 1.13. ๐p215. ์ธํฐํ์ด์ค์ ํจ์ ํ์ ์ ์
- 1.14. ๐p216. ์ค๋ฒ๋ผ์ด๋ฉ
- 1.15. ๐p219. ์ค๋ฒ๋ก๋ฉ
- 1.16. ๐p222. ์ธํฐํ์ด์ค๋ฅผ ํด๋์ค์์ ๊ตฌํํ์ฌ ์ค๋ฒ๋ก๋ฉ
- 1.17. ๐p224. ๋คํ์ฑ
- 1.18. ๐p236. getter/setter ์ฌ์ฉ ์ด์
- 1.19. ๐p240. static
- 1.20. ๐p242. ์ฑ๊ธํค ํจํด
- 1.21. ๐p247. readonly vs const
- 1.22. ๐p250. readonly ์ ๊ฑฐ๋๋ ๊ฒฝ์ฐ
๐ Quick Start Typescript ์ ์ฝ๊ณ , ๊ฐ๋จํ ๋ชฐ๋๋ ๋ถ๋ถ์ด๋ ์ค์ํ๋ค๊ณ ์๊ฐ๋๋ ๋ถ๋ถ์ ์์ฑ
๋ถ๋์ด ๋ง์, ์ด๋ฏธ ์๋ ๋ด์ฉ์ด๋ ์์ฃผ ์ฌ์ฉํ๋ ๋ถ๋ถ์ ์๋ตํจ
7์ฅ ํด๋์ค์ ์ธํฐํ์ด์ค ๋ชฉ์ฐจ
๐183p. ํ์ ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ง์
๊ฐ์ฒด์งํฅ์ ๋ชฉ์ ์ ์ฝ๋ ์ค๋ณต์ ์ต์ํ
ES6์์ class
ํค์๋๊ฐ ์ถ๊ฐ๋๋ฉด์ ๋ถ์กฑํ ์ ์ด ์กด์ฌ
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์์ | Js(ES6) | Ts |
---|---|---|
ํด๋์ค | class | class |
์ธํฐํ์ด์ค | โ ์ง์์ํจ | interface |
์ธํฐํ์ด์ค ๊ตฌํ | โ ์ง์์ํจ | implements |
์์ | extends | extends |
์์ฑ์ | constructor(){} | constructor(){} |
์ ๊ทผ ์ ํ์ | โ ์ง์์ํจ | private, public, protected |
final ์ ํ์ | โ ์ง์์ํจ | readonly(Ts 2.0๋ถํฐ) |
static ํค์๋ | static | static |
super ํค์๋ | super | super |
์ ํ์์ ๊ฒฝ์ฐ, ์ค์ Js๋ก ๋ณํ๋ฌ์ ๊ฒฝ์ฐ, ์ฌ๋ผ์ง๋ ๋ถ๋ถ์ผ๋ก ๊ฐ๋ฐ์์์๋ง ์ ํ์ ์๋ฏธ๊ฐ ์๋ ๊ฒ์ด ์์ฝ๋ค
๐p187. ๊ธฐ์กดJs(prototype) vs class ๋น๊ต
1 | // ๊ธฐ์กด Js Prototype ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ |
๋ชจ๋ ํจํด์ ํด๋ก์ ๋ฅผ ์ด์ฉํด ๋น๊ณต๊ฐ๋ ๋ด๋ถ ๋ฉ์๋๋ฅผ ์บก์ํํ์ฌ, ์ ์ญ๊ณต๊ฐ์ ๋๋ฝํ์ง ์๋ ์ฅ์ ์กด์ฌ
1 | // class ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ |
๐p188. ์์(extends), ํฌํจ(2) ๊ด๊ณ
์์ ์๋ต
ํฌํจ ๊ด๊ณ
- ํฉ์ฑ(composition) - ๊ฐํ๊ด๊ณ
- ์งํฉ(aggregation) - ์ฝํ๊ด๊ณ
ํฉ์ฑ
1 | class Engine{} |
์งํฉ
1 | class Engine{} |
์ ์ฝ๋(ํฉ์ฑ)๊ณผ์ ์ฐจ์ด์ ์ ์งํฉ์ car
๊ฐ์ฒด๊ฐ ์ ๊ฑฐ๋๋๋ผ๋,engine
๊ฐ์ฒด๋ ์ธ๋ถ์์ ์ ์ธ๋์๊ธฐ ๋๋ฌธ์ ์ ๊ฑฐ๋์ง์์ (์๋ช
์ฃผ๊ธฐ๋ฅผ ํจ๊ปํ์ง ์๊ธฐ๋๋ฌธ์ ์ฝํ๊ด๊ณ)
์ค๋ฌด์์๋ ์ด๋์ ์ฃผ๋ก ์ฌ์ฉ๋ ๊น?
๐p192. ์ ๊ทผ ์ ํ์
์ ๊ทผ ์ ํ์ | ํน์ง | ์์ ์ฌ๋ถ | ์ธ๋ถ ๊ฐ์ฒด ์ ๊ทผ |
---|---|---|---|
public | ์ธ๋ถ ๋๋ ์์ํด๋์ค์์ ์ ๊ทผ ๊ฐ๋ฅ | O | O |
protected | ์์ ํด๋์ค์์ ์ ๊ทผ ๊ฐ๋ฅ | O | X |
private | ํด๋น ํด๋์ค์์๋ง ์ ๊ทผ ๊ฐ๋ฅ | X | X |
๐p195. ์ถ์ฝ ์ฝ๋ฉ๊ธฐ๋ฒ
์ฑํฐ์ ์๊ด์์ง๋ง, ๊ด๋ จ ์๋ ๋ณ์ ๋ฌถ์ด์ ์ ์ธํ๊ธฐ ์ข์๋ณด์ฌ์ ๊ธฐ๋ก
1 | let [cWidth, cLength, cHeight] = [1, 2, 3]; |
๐p195. ์ ๊ทผ ์ ํ์ ์ ์ธ > ํด๋์ค ๋งค๊ฐ๋ณ์๊ฐ ๋จ
1 | class Cube { |
๐p197. get/set ์ฝ๋ฉ์คํ์ผ
๋งค๊ฐ๋ณ์/getter/setter ํ๊บผ๋ฒ์ ๋ชจ์์ ๊ด๋ฆฌ
1 | class PC { |
๐p197. ๋ถ๋ชจ ํด๋์ค ๋ฉค๋ฒ ๋ณ์ ์ด์ฉ
super()
ํค์๋์ this
์ฌ์ฉ
super
๋ ๋ถ๋ชจ ํด๋์ค์ ๊ณต๊ฐ ๋ฉค๋ฒ(public
)์๋ง ์ ๊ทผ ๊ฐ๋ฅ
this
๋ ๋ถ๋ชจ์๊ฒ ์์๋ฐ์ ๋ฉค๋ฒ์ ํ์ฌ ํด๋์ค ๋ชจ๋ ์ ๊ทผ ๊ฐ๋ฅ
๐p199. ๊ธฐ๋ณธ ์ ๊ทผ ์ ํ์
์๋ชป ์๊ณ ์๋ ์ฌํญ
constructor ๋งค๊ฐ๋ณ์์์ ์ ๊ทผ ์ ํ์๋ฅผ ์ค์ ์ํ ์, default๊ฐ public
์ผ์ค ์์๋๋ฐ private
์
์ ๊ทผ ์ ํ์๋ฅผ ์๋ตํ ๊ฒฝ์ฐ, ์์ฑ์ ์ธ๋ถ์์ ๋งค๊ฐ๋ณ์์ ์ ๊ทผํ ์ ์์!
๐p202. ์ถ์ ํด๋์ค๋ฅผ ์ด์ฉํ ๊ณตํต ๊ธฐ๋ฅ ์ ์
์ธ์ ์ฌ์ฉ๋ ๊น? ์ค๋ฌด์์ ์์ฃผ ์ฌ์ฉ๋๋ ์ผ์ด์ค๊ฐ ๊ถ๊ธ
๊ตฌํ ๋ฉ์๋๋ ์ค์ ๊ตฌํ ๋ด์ฉ์ ํฌํจ
์ถ์ ๋ฉ์๋๋ ์ ์ธ๋ง๋ ๋ฉ์๋, ๊ทธ๋ฌ๋ฏ๋ก ์์ ํด๋์ค์์ ์ถ์ ๋ฉ์๋๋ฅผ ๋ฐ์ ๋ณ๋ ๊ตฌํํด์ผํจ
! ์ถ์ ๋ฉ์๋๋ ์ถ์ ๋ฉค๋ฒ ๋ณ์๋ ์์ ํด๋์ค์์ ์ฌ์ฉ(overriding
)ํ ์ ์๊ฒ public
์ผ๋ก ์ ์ธํด์ผํจ
์ถ์ ํด๋์ค์ ๊ธฐ๋ฐ์ ๋ ๊ตฌํ ๋ฐฉ์์ ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด์ผ๋ก ๋ง์ด ์๋ ค์ง
1 | abstract class AbstractBird { |
๐ p205. Interface ๋ค์ค ์์
๋ชฐ๋๋ ๋ถ๋ถ
์์ ์ธํฐํ์ด์ค๋ ์ฌ๋ฌ ๋ถ๋ชจ ์ธํฐํ์ด์ค๋ฅผ ๋ค์ค ์์ ๊ฐ๋ฅ
1 | interface Car { speed: number } |
! ๋ง์ฝ ๋ค์ค ์์ ๋ฐ์ ๋, ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ์์๋ฐ์ผ๋ฉด ์ฌ์ ์ํด์ผํจ
1 | interface Dog { |
๐p212. ํด๋์ค๋ฅผ ๋ฐฐ์ด ์์๋ก ๋ณด๊ณ ๋ฐฐ์ด ํ์ ์ ์ธ
๋ชฐ๋๋ ๋ถ๋ถ
ํด๋์ค ์์ฒด๋ฅผ ํ์ ์ ์ธ ๋ถ๋ถ์ ๋ฃ์ ์ ์์
1 | class Person { |
๐p215. ์ธํฐํ์ด์ค์ ํจ์ ํ์ ์ ์
์ต๋ช
ํจ์์ ๋ํ ํจ์ ํ์
์ ์ ()
๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ ํ ์ ์์
! ๋งค๊ฐ ๋ณ์ ์ด๋ฆ๊ณผ ํ์ ์ด ์ผ์นํ์ง ์๋๋ผ๋ ์๊ด์ด ์์ (??? ์ด์ ๊ฐ ๋ญ๊น)
1 | interface IFormat { |
๐p216. ์ค๋ฒ๋ผ์ด๋ฉ
์ค๋ฒ๋ผ์ด๋ฉ = ๋ถ๋ชจ์์ ์์๋ฐ์, ์์ ํด๋์ค์์ ์๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ
๋ ๊ฐ์ง ์กฐ๊ฑด ํ์
์กฐ๊ฑด1: ๋ถ๋ชจํด๋์ค์ ๋งค๊ฐ๋ณ์ ํ์ ์ด ๊ฐ๊ฑฐ๋ ์์ ํ์ ์ด์ฌ์ผํจ
์กฐ๊ฑด2: ๋ถ๋ชจํด๋์ค์ ๋งค๊ฐ๋ณ์ ๊ฐ์๊ฐ ๊ฐ๊ฑฐ๋ ๋ง์์ผ ํจ
๐p219. ์ค๋ฒ๋ก๋ฉ
์ค๋ฒ๋ก๋ฉ = ๋ฉ์๋์ ์ด๋ฆ์ ๊ฐ์ง๋ง ๋งค๊ฐ๋ณ์์ ํ์ ๊ณผ ๊ฐ์๊ฐ ๋ค๋ฅด๊ฒ ์ ์ํ๋ ๋ฐฉ๋ฒ
1 | // ์ ์ ์์์ ํ์ ์ผ๋ก ์ ์ธ |
๐p222. ์ธํฐํ์ด์ค๋ฅผ ํด๋์ค์์ ๊ตฌํํ์ฌ ์ค๋ฒ๋ก๋ฉ
1 | interface IPoint { |
! ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ๋ฉด ์ ์ธ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌํ๊ณ ๊ตฌํ๋ถ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์
์ด ์ ์์ ๋ก์ง๊ณผ ๊ตฌ์กฐ๊ฐ ์์ฌ ์๋ ํด๋์ค๋ฅผ ์์ํด ์ค๋ฒ๋ก๋ฉํ๋ ๊ฒ๋ณด๋ค
๊ตฌ์กฐ๋ง์ ๊ฐ์ง๊ณ ์๋ ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ๋ณต์ก๊ณ ๋ฎ์ต๋๋ค.
๐p224. ๋คํ์ฑ
์ข ๋ฅ
- ํด๋์ค์ ๋คํ์ฑ
- ์ธํฐํ์ด์ค์ ๋คํ์ฑ
- ๋งค๊ฐ๋ณ์์ ๋คํ์ฑ
ํด๋์ค์ ๋คํ์ฑ
1 | class Planet { |
๋ถ๋ชจ ํด๋์ค์ ํ์ ์ ์ง์ ๋ฐ์ ์ธ์คํด์ค๋ ์ค์ ๋์์ ๋ถ๋ชจ ํด๋์ค ๊ธฐ์ค์ผ๋ก ์คํ๋จ
๊ทธ๋์ ์์ ํด๋์ค ๋ฉค๋ฒ ๋ณ์(features
)์ ์ ๊ทผํ ์ ์์
๊ทธ๋ฌ๋, ๋ฉ์๋ ์์ฒด๋ ์์ ์ธ์คํด์ค์ ๊ฒ์ด ์คํ๋จ (๋ฐํ์ ๋คํ์ฑ(runtime polymorphism)), ex. duck typing
์ธํฐํ์ด์ค์ ๋คํ์ฑ
ํด๋์ค์ ๋ค๋ฅด์ง ์์ ์ฝ๋๋ง ์ ๊ณ ์๋ต
1 | interface IPerson { |
๋งค๊ฐ๋ณ์์ ๋คํ์ฑ (์ ๋์ธ ํ์ )
1 | display(data: string | number) {} |
๋ฌธ์ ์
ํ์ ๊ฐ๋๊ฐ ๋นก์
1 | class MonitorDisplay { |
type
ํค์๋์ ์ถ์ฝ์ ๊ฐ๋ฅํ์ง๋ง ๊ทผ๋ณธ์ ์ธ ํด๊ฒฐ์ฑ
์ ๋ ์ ์์(ํด๋์ค ํ์
์ถ๊ฐ์๋ง๋ค, ๋งค๋ฒ ์
๋ฐ์ดํธ ํ์)
1 | // ์ฌ๊ธด ๋ ์ ๊ธฐํ๊ฒ ๋๋ฌธ์๋ก ๋ช ๋ช ํ๋ค.. |
โ โ ๋งค๊ฐ๋ณ์์ ๋คํ์ฑ (์ธํฐํ์ด์ค)
1 | interface Monitor { |
if๋ฌธ ์์ด ์ฝ๋ฉ์ด ๊ฐ๋ฅํจ
๐p236. getter/setter ์ฌ์ฉ ์ด์
๊ตณ์ด this.name = 'anything'
์ฒ๋ผ ๋ฉค๋ฒ ๋ณ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ get/set
ํค์๋๋ฅผ ์ฌ์ฉํ๋ ์ด์
๊ฐ์ ์ค์ ํ๊ฑฐ๋ ์ฝ์ ๋, ๋ก์ง์ ์ถ๊ฐ ๊ฐ๋ฅ(= ์กฐ๊ฑด ์ถ๊ฐ ๊ฐ๋ฅ)
1 | get name(): string { |
ES5 ๋ณํ์
Object.defineProperty ์ฐธ๊ณ
1 | Object.defineProperty(Student.prototype, `name`, { |
๐p240. static
static
ํค์๋๋ ๊ฐ์ฒด ์์ฑ ์์ด ์ ๊ทผ ๊ฐ๋ฅํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ ํจ๊ณผ ์กด์ฌ
๊ฐ์ฒด ์์ฑ ์์ด ๋ฐ๋ก ์ ๊ทผ ๊ฐ๋ฅ
static
๋ฉค๋ฒ ๋ณ์๋ ์ธ์คํด์ค๊ฐ ๊ฐ ๊ณต์
1 | class Circle { |
๐p242. ์ฑ๊ธํค ํจํด
static
ํค์๋๋ฅผ ํ์ฉํ๋ฉด ์ ์ผํ ์ํ ์ ๋ณด ์ ์ฅ ๊ฐ๋ฅ
์ด๋ ๊ฒ ํ๊ธฐ์ํด์๋ ๊ฐ์ฒด ์์ฑ์ ๋ง๊ณ , ํด๋์ค ๋ณ์, ๋ฉ์๋ ๋ฑ ๋ชจ๋๋ฅผ static
์ผ๋ก ์ ์ธ
๋จ์ผ ์ํ ๊ด๋ฆฌ์๋ ์ข์ง๋ง, ์ธ์คํด์ค ์์ฑ์ ๋ถ๊ฐ๋ฅ
์์ฑ๋ฒ
- ๋ถ์ง๋ฐํ ์ด๊ธฐํ (eager initalization) - ํด๋์ค ์ ์ธ์ ์ด๊ธฐํ
- ๊ฒ์ผ๋ฅธ ์ด๊ธฐํ (lazy initalization) - ๋ฉ์๋ ํธ์ถ์ ์ด๊ธฐํ
Eager Initalization
1 | class EagerLogger { |
Lazy Initalization
1 | class LazyLogger { |
๐p247. readonly vs const
const
๊ฐ ์ฌ์ฉ๋๋ ๊ณณ์readonly
๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋ค๊ณ ์ดํดํ๋ฉด ํธํ ๊ฒ ๊ฐ๋ค
ํน์ฑ | const | readonly |
---|---|---|
์์ ์ ์ธ | ๊ฐ๋ฅ | ๊ฐ๋ฅ |
์ด๊ธฐํ ๊ฐ์ ์ฑ | ํ์ | ์ ํ |
๊ฐ ์ฌํ ๋น | ๋ถ๊ฐ๋ฅ | ๊ฐ๋ฅ(?) |
์ ์ธ ๊ฐ๋ฅ ๋์ | ๋ณ์ | ๋ฉค๋ฒ ๋ณ์ ๊ฐ์ฒด ๋ฆฌํฐ๋ด ์ํ์ |
์ ์ธ ๋ถ๊ฐ๋ฅ ๋์ | ๋ฉค๋ฒ ๋ณ์ ๊ฐ์ฒด ๋ฆฌํฐ๋ด ์ํ์ |
๋ณ์ |
์ฌ์ฉ ์ฉ๋ | ์์ | ์ฝ๊ธฐ ์ ์ฉ ์์ฑ |
์ปดํ์ผ ์ ์ธ ์ ์ง | ์ ์ง | ์ฌ๋ผ์ง |
์ง์ ํ์ค | ES6 | TS 2.0 |
๐p250. readonly ์ ๊ฑฐ๋๋ ๊ฒฝ์ฐ
type
์์ผ๋ฆฌ์ด์ฑ์ ์ฌ๋ผ์ง
1 | let emotion: { readonly name: string } = { name: `sad` }; |