๐Ÿš€
Incheol's TECH BLOG
  • Intro
  • Question & Answer
    • JAVA
      • JVM
      • String, StringBuffer, StringBuilder
      • JDK 17์ผ ์‚ฌ์šฉํ•œ ์ด์œ (feat. JDK 8 ์ดํ›„ ํ›‘์–ด๋ณด๊ธฐ)
      • ์Šคํƒ ์˜ค๋ฒ„ ํ”Œ๋กœ์šฐ(SOF)
      • ๋ธ”๋Ÿญํ‚น | ๋…ผ๋ธ”๋Ÿญํ‚น | ๋™๊ธฐ | ๋น„๋™๊ธฐ
      • ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๋ฅผ ์ด์šฉํ•œ ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ฆˆ ๊ฐœ์„ 
      • heap dump ๋ถ„์„ํ•˜๊ธฐ (feat. OOM)
      • G1 GC vs Z GC
      • JIT COMPILER
      • ENUM
      • STATIC
      • Thread(์“ฐ๋ ˆ๋“œ)
      • hashCode()์™€ equals()
      • JDK 8 ํŠน์ง•
      • break ์™€ continue ์‚ฌ์šฉ
      • STREAM
      • Optional
      • ๋žŒ๋‹ค์™€ ํด๋กœ์ €
      • Exception(์˜ˆ์™ธ)
      • Garbage Collector
      • Collection
      • Call by Value & Call by Reference
      • ์ œ๋„ค๋ฆญ(Generic)
    • SPRING
      • Spring ํŠน์ง•
      • N+1 ๋ฌธ์ œ
      • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์–ด๋””๊นŒ์ง€ ์•Œ์•„๋ณด๊ณ  ์˜ค์…จ์–ด์š”?
      • แ„แ…ฆแ„‰แ…ณแ„แ…ณ แ„แ…ฉแ„ƒแ…ณ แ„‰แ…ฅแ†ผแ„‚แ…ณแ†ผ แ„€แ…ขแ„‰แ…ฅแ†ซแ„€แ…ต
      • RestTemplate ์‚ฌ์šฉ์‹œ ์ฃผ์˜์‚ฌํ•ญ
      • ๋™์‹œ์„ฑ ํ•ด๊ฒฐํ•˜๊ธฐ(feat. TMI ์ฃผ์˜)
      • redisson trylock ๋‚ด๋ถ€๋กœ์ง ์‚ดํŽด๋ณด๊ธฐ
      • DB ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ์‹œํ‚ค๊ธฐ(feat. Routing Datasource)
      • OSIV
      • @Valid ๋™์ž‘ ์›๋ฆฌ
      • mybatis @Builder ์ฃผ์˜์‚ฌํ•ญ
      • ์Šคํ”„๋ง ํด๋ผ์šฐ๋“œ ์ปจํ”ผ๊ทธ ๊ฐฑ์‹  ๋˜์ง€ ์•Š๋Š” ์ด์Šˆ(feat. ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ)
      • ImageIO.read ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
      • ์นดํ”„์นด transaction ์ฒ˜๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?
      • Spring Boot ํŠน์ง•
      • Spring 5 ํŠน์ง•
      • JPA vs MyBatis
      • Filter์™€ Interceptor
      • ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ(Persistence Context)
      • @Transactional
      • @Controlleradvice, @ExceptionHandler
      • Spring Security
      • Dispatcher Servlet
      • @EnableWebMvc
      • Stereo Type(์Šคํ…Œ๋ ˆ์˜ค ํƒ€์ž…)
      • AOP
      • JPA Repository ๊ทœ์น™
    • DATABASE
      • Database Index
      • SQL vs NoSQL
      • DB ๊ต์ฐฉ์ƒํƒœ
      • Isolation level
      • [MySQL] ์ด๋ชจ์ง€ ์ €์žฅ์€ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ข‹์„๊นŒ?
      • SQL Hint
      • JOIN
    • INFRA
      • CLOUD COMPUTING
      • GIT
      • DOCKER
      • ์นดํ”„์นด ์ฐ๋จนํ•˜๊ธฐ 1๋ถ€
      • ์นดํ”„์นด ์ฐ๋จนํ•˜๊ธฐ 2๋ถ€ (feat. ํ”„๋กœ๋“€์„œ)
      • ์นดํ”„์นด ์ฐ๋จนํ•˜๊ธฐ 3๋ถ€ (feat. ์ปจ์Šˆ๋จธ)
      • JENKINS
      • POSTMAN
      • DNS ๋™์ž‘ ์›๋ฆฌ
      • ALB, NLB,ELB ์ฐจ์ด๋Š”?
      • ์นดํ”„์นด ํŒŒํ‹ฐ์…˜ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜์ž
      • DEVOPS
      • JWT
      • OSI 7 Layer
      • MSA
      • ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ์„œ๋น„์Šค ๋“ฑ๋ก/ํ•ด์ œ ํ•˜๋Š”๊ฑธ๊นŒ?
      • แ„‘แ…ตแ†ซแ„‘แ…ฉแ„‹แ…ตแ†ซแ„แ…ณ แ„‰แ…กแ„‹แ…ญแ†ผแ„‰แ…ต แ„Œแ…ฎแ„‹แ…ดแ„‰แ…กแ„’แ…กแ†ผ!! (feat แ„…แ…ฉแ„€แ…ณ แ„‘แ…กแ„‹แ…ตแ†ฏ ์‚ฌ์ด์ฆˆ)
      • AWS EC2 แ„ƒแ…ฉแ„†แ…ฆแ„‹แ…ตแ†ซ แ„‰แ…ฅแ†ฏแ„Œแ…ฅแ†ผ (with ALB)
      • ALBแ„‹แ…ฆ SSL แ„‰แ…ฅแ†ฏแ„Œแ…ฅแ†ผแ„’แ…กแ„€แ…ต(feat. ACM)
      • แ„…แ…กแ†ทแ„ƒแ…กแ„…แ…ณแ†ฏ แ„’แ…ชแ†ฏแ„‹แ…ญแ†ผแ„’แ…กแ†ซ แ„แ…ณแ†ฏแ„…แ…กแ„‹แ…ฎแ„ƒแ…ณ แ„‹แ…ชแ„Žแ…ต แ„‹แ…กแ†ฏแ„…แ…ตแ†ท แ„‡แ…กแ†ฎแ„€แ…ต
      • AWS Personalize ์ ์šฉ ํ›„๊ธฐโ€ฆ ๐Ÿ˜ฐ
      • CloudFront๋ฅผ ํ™œ์šฉํ•œ S3 ์„ฑ๋Šฅ ๋ฐ ๋น„์šฉ ๊ฐœ์„ 
    • ARCHITECTURE
      • ๊ฐ์ฒด์ง€ํ–ฅ๊ณผ ์ ˆ์ฐจ์ง€ํ–ฅ
      • ์ƒ์†๋ณด๋‹จ ํ•ฉ์„ฑ
      • SOLID ์›์น™
      • ์บก์Аํ™”
      • DDD(Domain Driven Design)
    • COMPUTER SCIENCE
      • ๋ฎคํ…์Šค์™€ ์„ธ๋งˆํฌ์–ด
      • Context Switch
      • REST API
      • HTTP HEADER
      • HTTP METHOD
      • HTTP STATUS
    • CULTURE
      • AGILE(Feat. ์Šคํฌ๋Ÿผ)
      • ์šฐ๋ฆฌ๋Š” ์„ฑ์žฅ ํ• ์ˆ˜ ์žˆ์„๊นŒ? (w. ํ•จ๊ป˜ ์ž๋ผ๊ธฐ)
      • Expert Beginner
    • SEMINAR
      • 2022 INFCON ํ›„๊ธฐ
        • [104ํ˜ธ] ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ ๋งŒ์„ธ! - ๊ธฐ์ˆ ๋งŒํผ ์ค‘์š”ํ–ˆ๋˜ ์ œํ’ˆ๊ณผ ํŒ€ ์„ฑ์žฅ๊ธฐ
        • [102ํ˜ธ] ํŒ€์„ ๋„˜์–ด์„œ ์ „์‚ฌ์  ํ˜‘์—… ํ™˜๊ฒฝ ๊ตฌ์ถ•ํ•˜๊ธฐ
        • [103ํ˜ธ] ์ฝ”๋“œ ๋ฆฌ๋ทฐ์˜ ๋˜ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ๋ฒ•: Pull Requests vs. Stacked Changes
        • [105ํ˜ธ]ย ์‹ค์ „! ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์™€ ์„ค๊ณ„
        • [105ํ˜ธ] ์ง€๊ธˆ ๋‹น์žฅ DevOps๋ฅผ ํ•ด์•ผ ํ•˜๋Š” ์ด์œ 
        • [102ํ˜ธ] (๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ) ๊ฐœํŽธ์˜ ๊ธฐ์ˆ  - ๋ฐฐ๋‹ฌ ํ”Œ๋žซํผ์—์„œ ๊ฒช์€ N๋ฒˆ์˜ ๊ฐœํŽธ ๊ฒฝํ—˜๊ธฐ
        • [102ํ˜ธ] ์„œ๋ฒ„๋น„ 0์›, ํด๋ผ์šฐ๋“œ ํ ๋„์ž…์œผ๋กœ ํ•ด๋ƒˆ์Šต๋‹ˆ๋‹ค!
  • STUDY
    • ์˜ค๋ธŒ์ ํŠธ
      • 1์žฅ ๊ฐ์ฒด, ์„ค๊ณ„
      • 2์žฅ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • 3์žฅ ์—ญํ• , ์ฑ…์ž„, ํ˜‘๋ ฅ
      • 4์žฅ ์„ค๊ณ„ ํ’ˆ์งˆ๊ณผ ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„
      • 5์žฅ ์ฑ…์ž„ ํ• ๋‹นํ•˜๊ธฐ
      • 6์žฅ ๋ฉ”์‹œ์ง€์™€ ์ธํ„ฐํŽ˜์ด์Šค
      • 7์ง• ๊ฐ์ฒด ๋ถ„ํ•ด
      • 8์žฅ ์˜์กด์„ฑ ๊ด€๋ฆฌํ•˜๊ธฐ
      • 9์žฅ ์œ ์—ฐํ•œ ์„ค๊ณ„
      • 10์žฅ ์ƒ์†๊ณผ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ
      • 11์žฅ ํ•ฉ์„ฑ๊ณผ ์œ ์—ฐํ•œ ์„ค๊ณ„
      • 12์žฅ ๋‹คํ˜•์„ฑ
      • 13์žฅ ์„œ๋ธŒํด๋ž˜์‹ฑ๊ณผ ์„œ๋ธŒํƒ€์ดํ•‘
      • 14์žฅ ์ผ๊ด€์„ฑ ์žˆ๋Š” ํ˜‘๋ ฅ
      • 15์žฅ ๋””์ž์ธ ํŒจํ„ด๊ณผ ํ”„๋ ˆ์ž„์›Œํฌ
      • ๋งˆ๋ฌด๋ฆฌ
    • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด
      • 1์žฅ ํ˜‘๋ ฅํ•˜๋Š” ๊ฐ์ฒด๋“ค์˜ ๊ณต๋™์ฒด
      • 2์žฅ ์ด์ƒํ•œ ๋‚˜๋ผ์˜ ๊ฐ์ฒด
      • 3์žฅ ํƒ€์ž…๊ณผ ์ถ”์ƒํ™”
      • 4์žฅ ์—ญํ• , ์ฑ…์ž„, ํ˜‘๋ ฅ
    • JAVA ORM JPA
      • 1์žฅ JPA ์†Œ๊ฐœ
      • 2์žฅ JPA ์‹œ์ž‘
      • 3์žฅ ์˜์†์„ฑ ๊ด€๋ฆฌ
      • 4์žฅ ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘
      • 5์žฅ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ ๊ธฐ์ดˆ
      • 6์žฅ ๋‹ค์–‘ํ•œ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘
      • 7์žฅ ๊ณ ๊ธ‰ ๋งคํ•‘
      • 8์žฅ ํ”„๋ก์‹œ์™€ ์—ฐ๊ด€๊ด€๊ณ„ ๊ด€๋ฆฌ
      • 9์žฅ ๊ฐ’ ํƒ€์ž…
      • 10์žฅ ๊ฐ์ฒด์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด
      • 11์žฅ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ œ์ž‘
      • 12์žฅ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA
      • 13์žฅ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์˜์†์„ฑ ๊ด€๋ฆฌ
      • 14์žฅ ์ปฌ๋ ‰์…˜๊ณผ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ
      • 15์žฅ ๊ณ ๊ธ‰ ์ฃผ์ œ์™€ ์„ฑ๋Šฅ ์ตœ์ ํ™”
      • 16์žฅ ํŠธ๋žœ์žญ์…˜๊ณผ ๋ฝ, 2์ฐจ ์บ์‹œ
    • ํ† ๋น„์˜ ์Šคํ”„๋ง (3.1)
      • ์Šคํ”„๋ง์˜ ์ดํ•ด์™€ ์›๋ฆฌ
        • 1์žฅ ์˜ค๋ธŒ์ ํŠธ์™€ ์˜์กด๊ด€๊ณ„
        • 2์žฅ ํ…Œ์ŠคํŠธ
        • 3์žฅ ํ…œํ”Œ๋ฆฟ
        • 4์žฅ ์˜ˆ์™ธ
        • 5์žฅ ์„œ๋น„์Šค ์ถ”์ƒํ™”
        • 6์žฅ AOP
        • 8์žฅ ์Šคํ”„๋ง์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
      • ์Šคํ”„๋ง์˜ ๊ธฐ์ˆ ๊ณผ ์„ ํƒ
        • 5์žฅ AOP์™€ LTW
        • 6์žฅ ํ…Œ์ŠคํŠธ ์ปจํ…์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ
    • ํด๋ฆฐ์ฝ”๋“œ
      • 1์žฅ ๊นจ๋—ํ•œ ์ฝ”๋“œ
      • 2์žฅ ์˜๋ฏธ ์žˆ๋Š” ์ด๋ฆ„
      • 3์žฅ ํ•จ์ˆ˜
      • 4์žฅ ์ฃผ์„
      • 5์žฅ ํ˜•์‹ ๋งž์ถ”๊ธฐ
      • 6์žฅ ๊ฐ์ฒด์™€ ์ž๋ฃŒ ๊ตฌ์กฐ
      • 9์žฅ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
    • ์ž๋ฐ” ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…(with scouter)
      • CHAP 01. ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์‹œ์Šคํ…œ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋“ค
      • CHAP 02. scouter ์‚ดํŽด๋ณด๊ธฐ
      • CHAP 03. scouter ์„ค์ •ํ•˜๊ธฐ(์„œ๋ฒ„ ๋ฐ ์—์ด์ „ํŠธ)
      • CHAP 04. scouter ํด๋ผ์ด์–ธํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค
      • CHAP 05. scouter XLog
      • CHAP 06. scouter ์„œ๋ฒ„/์—์ด์ „ํŠธ ํ”Œ๋Ÿฌ๊ทธ์ธ
      • CHAP 07. scouter ์‚ฌ์šฉ ์‹œ ์œ ์šฉํ•œ ํŒ
      • CHAP 08. ์Šค๋ ˆ๋“œ ๋•Œ๋ฌธ์—(์Šค๋ ˆ๋“œ์—์„œ) ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋“ค
      • CHAP 09. ์Šค๋ ˆ๋“œ ๋‹จ๋ฉด ์ž˜๋ผ ๋†“๊ธฐ
      • CHAP 10. ์ž˜๋ผ ๋†“์€ ์Šค๋ ˆ๋“œ ๋‹จ๋ฉด ๋ถ„์„ํ•˜๊ธฐ
      • CHAP 11. ์Šค๋ ˆ๋“œ ๋ฌธ์ œ
      • CHAP 12. ๋ฉ”๋ชจ๋ฆฌ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋“ค
      • CHAP 13. ๋ฉ”๋ชจ๋ฆฌ ๋‹จ๋ฉด ์ž˜๋ผ ๋†“๊ธฐ
      • CHAP 14. ์ž˜๋ผ ๋†“์€ ๋ฉ”๋ชจ๋ฆฌ ๋‹จ๋ฉด ๋ถ„์„ํ•˜๊ธฐ
      • CHAP 15. ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ(Case Study)
      • CHAP 24. scouter๋กœ ๋ฆฌ์†Œ์Šค ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ธฐ
      • CHAP 25. ์žฅ์•  ์ง„๋‹จ์€ ์ด๋ ‡๊ฒŒ ํ•œ๋‹ค
      • ๋ถ€๋ก A. Fatal error log ๋ถ„์„
      • ๋ถ€๋ก B. ์ž๋ฐ” ์ธ์ŠคํŠธ๋Ÿญ์…˜
    • ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•˜๊ธฐ
      • CHAP 02. TDD ์‹œ์ž‘
      • CHAP 03. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ์ˆœ์„œ
      • CHAP 04. TDD/๊ธฐ๋Šฅ ๋ช…์„ธ/์„ค๊ณ„
      • CHAP 05. JUnit 5 ๊ธฐ์ดˆ
      • CHAP 06. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ๊ตฌ์„ฑ
      • CHAP 07. ๋Œ€์—ญ
      • CHAP 08. ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ์„ค๊ณ„
      • CHAP 09. ํ…Œ์ŠคํŠธ ๋ฒ”์œ„์™€ ์ข…๋ฅ˜
      • CHAP 10. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์™€ ์œ ์ง€๋ณด์ˆ˜
      • ๋ถ€๋ก A. Junit 5 ์ถ”๊ฐ€ ๋‚ด์šฉ
      • ๋ถ€๋ก C. Mockito ๊ธฐ์ดˆ ์‚ฌ์šฉ๋ฒ•
      • ๋ถ€๋ก D. AssertJ ์†Œ๊ฐœ
    • KOTLIN IN ACTION
      • 1์žฅ ์ฝ”ํ‹€๋ฆฐ์ด๋ž€ ๋ฌด์—‡์ด๋ฉฐ, ์™œ ํ•„์š”ํ•œ๊ฐ€?
      • 2์žฅ ์ฝ”ํ‹€๋ฆฐ ๊ธฐ์ดˆ
      • 3์žฅ ํ•จ์ˆ˜ ์ •์˜์™€ ํ˜ธ์ถœ
      • 4์žฅ ํด๋ž˜์Šค, ๊ฐ์ฒด, ์ธํ„ฐํŽ˜์ด์Šค
      • 5์žฅ ๋žŒ๋‹ค๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • 6์žฅ ์ฝ”ํ‹€๋ฆฐ ํƒ€์ž… ์‹œ์Šคํ…œ
      • 7์žฅ ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ๊ณผ ๊ธฐํƒ€ ๊ด€๋ก€
      • 8์žฅ ๊ณ ์ฐจ ํ•จ์ˆ˜: ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ฐ˜ํ™˜ ๊ฐ’์œผ๋กœ ๋žŒ๋‹ค ์‚ฌ์šฉ
      • 9์žฅ ์ œ๋„ค๋ฆญ์Šค
      • 10์žฅ ์• ๋…ธํ…Œ์ด์…˜๊ณผ ๋ฆฌํ”Œ๋ ‰์…˜
      • ๋ถ€๋ก A. ์ฝ”ํ‹€๋ฆฐ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ
      • ๋ถ€๋ก B. ์ฝ”ํ‹€๋ฆฐ ์ฝ”๋“œ ๋ฌธ์„œํ™”
      • ๋ถ€๋ก D. ์ฝ”ํ‹€๋ฆฐ 1.1๊ณผ 1.2, 1.3 ์†Œ๊ฐœ
    • KOTLIN ๊ณต์‹ ๋ ˆํผ๋Ÿฐ์Šค
      • BASIC
      • Classes and Objects
        • Classes and Inheritance
        • Properties and Fields
    • ์ฝ”ํ‹€๋ฆฐ ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • 1์žฅ Hello, Concurrent World!
      • 2์žฅ ์ฝ”๋ฃจํ‹ด ์ธ ์•ก์…˜
      • 3์žฅ ๋ผ์ดํ”„ ์‚ฌ์ดํด๊ณผ ์—๋Ÿฌ ํ•ธ๋“ค๋ง
      • 4์žฅ ์ผ์‹œ ์ค‘๋‹จ ํ•จ์ˆ˜์™€ ์ฝ”๋ฃจํ‹ด ์ปจํ…์ŠคํŠธ
      • 5์žฅ ์ดํ„ฐ๋ ˆ์ดํ„ฐ, ์‹œํ€€์Šค ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ๋“€์„œ
      • 7์žฅ ์Šค๋ ˆ๋“œ ํ•œ์ •, ์•กํ„ฐ ๊ทธ๋ฆฌ๊ณ  ๋ฎคํ…์Šค
    • EFFECTIVE JAVA 3/e
      • ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ํŒŒ๊ดด
        • ์•„์ดํ…œ1 ์ƒ์„ฑ์ž ๋Œ€์‹  ์ •์  ํŒฉํ„ฐ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ๊ณ ๋ คํ•˜๋ผ
        • ์•„์ดํ…œ2 ์ƒ์„ฑ์ž์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ฉด ๋นŒ๋”๋ฅผ ๊ณ ๋ คํ•˜๋ผ
        • ์•„์ดํ…œ3 private ์ƒ์„ฑ์ž๋‚˜ ์—ด๊ฑฐ ํƒ€์ž…์œผ๋กœ ์‹ฑ๊ธ€ํ„ด์ž„์„ ๋ณด์ฆํ•˜๋ผ
        • ์•„์ดํ…œ4 ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ๋ง‰์œผ๋ ค๊ฑฐ๋“  private ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ผ
        • ์•„์ดํ…œ5 ์ž์›์„ ์ง์ ‘ ๋ช…์‹œํ•˜์ง€ ๋ง๊ณ  ์˜์กด ๊ฐ์ฒด ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ผ
        • ์•„์ดํ…œ6 ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ”ผํ•˜๋ผ
        • ์•„์ดํ…œ7 ๋‹ค ์“ด ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํ•ด์ œํ•˜๋ผ
        • ์•„์ดํ…œ8 finalizer์™€ cleaner ์‚ฌ์šฉ์„ ํ”ผํ•˜๋ผ
        • ์•„์ดํ…œ9 try-finally๋ณด๋‹ค๋Š” try-with-resources๋ฅผ ์‚ฌ์šฉํ•˜๋ผ
      • ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ
        • ์•„์ดํ…œ10 equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ
        • ์•„์ดํ…œ11 equals๋ฅผ ์žฌ์ •์˜ ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ ํ•˜๋ผ
        • ์•„์ดํ…œ12 toString์„ ํ•ญ์ƒ ์žฌ์ •์˜ํ•˜๋ผ
        • ์•„์ดํ…œ13 clone ์žฌ์ •์˜๋Š” ์ฃผ์˜ํ•ด์„œ ์ง„ํ–‰ํ•ด๋ผ
        • ์•„์ดํ…œ14 Comparable์„ ๊ตฌํ˜„ํ• ์ง€ ๊ณ ๋ คํ•˜๋ผ
      • ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค
        • ์•„์ดํ…œ15 ํด๋ž˜์Šค์™€ ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ตœ์†Œํ™”ํ•˜๋ผ
        • ์•„์ดํ…œ16 public ํด๋ž˜์Šค์—์„œ๋Š” public ํ•„๋“œ๊ฐ€ ์•„๋‹Œ ์ ‘๊ทผ์ž ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ
        • ์•„์ดํ…œ17 ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์„ ์ตœ์†Œํ™”ํ•˜๋ผ
        • ์•„์ดํ…œ18 ์ƒ์†๋ณด๋‹ค๋Š” ์ปดํฌ์ง€์…˜์„ ์‚ฌ์šฉํ•˜๋ผ
        • ์•„์ดํ…œ19 ์ƒ์†์„ ๊ณ ๋ คํ•ด ์„ค๊ณ„ํ•˜๊ณ  ๋ฌธ์„œํ™”ํ•˜๋ผ. ๊ทธ๋Ÿฌ์ง€ ์•Š์•˜๋‹ค๋ฉด ์ƒ์†์„ ๊ธˆ์ง€ํ•˜๋ผ
        • ์•„์ดํ…œ20 ์ถ”์ƒ ํด๋ž˜์Šค๋ณด๋‹ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์šฐ์„ ํ•˜๋ผ
        • ์•„์ดํ…œ21 ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„ํ•˜๋Š” ์ชฝ์„ ์ƒ๊ฐํ•ด ์„ค๊ณ„ํ•˜๋ผ
        • ์•„์ดํ…œ22 ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์„ ์ •์˜ํ•˜๋Š” ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉํ•˜๋ผ
        • ์•„์ดํ…œ23 ํƒœ๊ทธ ๋‹ฌ๋ฆฐ ํด๋ž˜์Šค๋ณด๋‹ค๋Š” ํด๋ž˜์Šค ๊ณ„์ธต๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜๋ผ
        • ์•„์ดํ…œ24 ๋ฉค๋ฒ„ ํด๋ž˜์Šค๋Š” ๋˜๋„๋ก static์œผ๋กœ ๋งŒ๋“ค๋ผ
        • ์•„์ดํ…œ25 ํ†ฑ๋ ˆ๋ฒจ ํด๋ž˜์Šค๋Š” ํ•œ ํŒŒ์ผ์— ํ•˜๋‚˜๋งŒ ๋‹ด์œผ๋ผ
      • ์ œ๋„ค๋ฆญ
        • ์•„์ดํ…œ26 ๋กœ ํƒ€์ž…์€ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ
        • ์•„์ดํ…œ27 ๋น„๊ฒ€์‚ฌ ๊ฒฝ๊ณ ๋ฅผ ์ œ๊ฑฐํ•˜๋ผ
        • ์•„์ดํ…œ28 ๋ฐฐ์—ด๋ณด๋‹ค๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ
        • ์•„์ดํ…œ29 ์ด์™•์ด๋ฉด ์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ ๋งŒ๋“ค๋ผ
        • ์•„์ดํ…œ30 ์ด์™•์ด๋ฉด ์ œ๋„ค๋ฆญ ๋ฉ”์„œ๋“œ๋กœ ๋งŒ๋“ค๋ผ
        • ์•„์ดํ…œ31 ํ•œ์ •์  ์™€์ผ๋“œ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•ด API ์œ ์—ฐ์„ฑ์„ ๋†’์ด๋ผ
        • ์•„์ดํ…œ32 ์ œ๋„ค๋ฆญ๊ณผ ๊ฐ€๋ณ€์ธ์ˆ˜๋ฅผ ํ•จ๊ป˜ ์“ธ ๋•Œ๋Š” ์‹ ์ค‘ํ•˜๋ผ
        • ์•„์ดํ…œ33 ํƒ€์ž… ์•ˆ์ „ ์ด์ข… ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ณ ๋ คํ•˜๋ผ
      • ์—ด๊ฑฐ ํƒ€์ž…๊ณผ ์• ๋„ˆํ…Œ์ด์…˜
        • ์•„์ดํ…œ34 int ์ƒ์ˆ˜ ๋Œ€์‹  ์—ด๊ฑฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ผ
        • ์•„์ดํ…œ35 ordinal ๋ฉ”์„œ๋“œ ๋Œ€์‹  ์ธ์Šคํ„ด์Šค ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ
        • ์•„์ดํ…œ36 ๋น„ํŠธ ํ•„๋“œ ๋Œ€์‹  EnumSet์„ ์‚ฌ์šฉํ•˜๋ผ
        • ์•„์ดํ…œ37 ordinal ์ธ๋ฑ์‹ฑ ๋Œ€์‹  EnumMap์„ ์‚ฌ์šฉํ•˜๋ผ
        • ์•„์ดํ…œ38 ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์—ด๊ฑฐ ํƒ€์ž…์ด ํ•„์š”ํ•˜๋ฉด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ผ
        • ์•„์ดํ…œ 39 ๋ช…๋ช… ํŒจํ„ด๋ณด๋‹ค ์• ๋„ˆํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ผ
        • ์•„์ดํ…œ40 @Override ์• ๋„ˆํ…Œ์ด์…˜์„ ์ผ๊ด€๋˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ผ
        • ์•„์ดํ…œ41 ์ •์˜ํ•˜๋ ค๋Š” ๊ฒƒ์ด ํƒ€์ž…์ด๋ผ๋ฉด ๋งˆ์ปค ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ผ
      • ๋žŒ๋‹ค์™€ ์ŠคํŠธ๋ฆผ
        • ์•„์ดํ…œ46 ์ŠคํŠธ๋ฆผ์—๋Š” ๋ถ€์ž‘์šฉ ์—†๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ผ
        • ์•„์ดํ…œ47 ๋ฐ˜ํ™˜ ํƒ€์ž…์œผ๋กœ๋Š” ์ŠคํŠธ๋ฆผ๋ณด๋‹ค ์ปฌ๋ ‰์…˜์ด ๋‚ซ๋‹ค
        • ์•„์ดํ…œ48 ์ŠคํŠธ๋ฆผ ๋ณ‘๋ ฌํ™”๋Š” ์ฃผ์˜ํ•ด์„œ ์ ์šฉํ•˜๋ผ
      • ๋ฉ”์„œ๋“œ
        • ์•„์ดํ…œ49 ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์œ ํšจํ•œ์ง€ ๊ฒ€์‚ฌํ•˜๋ผ
        • ์•„์ดํ…œ50 ์ ์‹œ์— ๋ฐฉ์–ด์  ๋ณธ์‚ฌ๋ณธ์„ ๋งŒ๋“ค๋ผ
        • ์•„์ดํ…œ53 ๊ฐ€๋ณ€์ธ์ˆ˜๋Š” ์‹ ์ค‘ํžˆ ์‚ฌ์šฉํ•˜๋ผ
        • ์•„์ดํ…œ 54 null์ด ์•„๋‹Œ, ๋นˆ ์ปฌ๋ ‰์…˜์ด๋‚˜ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋ผ
        • ์•„์ดํ…œ56 ๊ณต๊ฐœ๋œ API ์š”์†Œ์—๋Š” ํ•ญ์ƒ ๋ฌธ์„œํ™” ์ฃผ์„์„ ์ž‘์„ฑํ•˜๋ผ
      • ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™
        • ์•„์ดํ…œ56 ๊ณต๊ฐœ๋œ API ์š”์†Œ์—๋Š” ํ•ญ์ƒ ๋ฌธ์„œํ™” ์ฃผ์„์„ ์ž‘์„ฑํ•˜๋ผ
        • ์•„์ดํ…œ57 ์ง€์—ญ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ผ
        • ์•„์ดํ…œ 60 ์ •ํ™•ํ•œ ๋‹ต์ด ํ•„์š”ํ•˜๋‹ค๋ฉด float์™€ double์€ ํ”ผํ•˜๋ผ
      • ์˜ˆ์™ธ
        • ์•„์ดํ…œ 73 ์ถ”์ƒํ™” ์ˆ˜์ค€์— ๋งž๋Š” ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋ผ
        • ์•„์ดํ…œ 74 ๋ฉ”์„œ๋“œ๊ฐ€ ๋˜์ง€๋Š” ๋ชจ๋“  ์˜ˆ์™ธ๋ฅผ ๋ฌธ์„œํ™”ํ•˜๋ผ
      • ๋™์‹œ์„ฑ
        • ์•„์ดํ…œ78 ๊ณต์œ  ์ค‘์ธ ๊ฐ€๋ณ€ ๋ฐ์ดํ„ฐ๋Š” ๋™๊ธฐํ™”ํ•ด ์‚ฌ์šฉํ•˜๋ผ
        • ์•„์ดํ…œ79 ๊ณผ๋„ํ•œ ๋™๊ธฐํ™”๋Š” ํ”ผํ•˜๋ผ
        • ์•„์ดํ…œ 80 ์Šค๋ ˆ๋“œ๋ณด๋‹ค๋Š” ์‹คํ–‰์ž, ํƒœ์Šคํฌ, ์ŠคํŠธ๋ฆผ์„ ์• ์šฉํ•˜๋ผ
      • ์ง๋ ฌํ™”
        • ์•„์ดํ…œ 87 ์ปค์Šคํ…€ ์ง๋ ฌํ™” ํ˜•ํƒœ๋ฅผ ๊ณ ๋ คํ•ด๋ณด๋ผ
    • Functional Programming in Java
      • Chap 01. ํ—ฌ๋กœ, ๋žŒ๋‹ค ํ‘œํ˜„์‹
      • Chap 02. ์ปฌ๋ ‰์…˜์˜ ์‚ฌ์šฉ
      • Chap 03. String, Comparator, ๊ทธ๋ฆฌ๊ณ  filter
      • Chap 04. ๋žŒ๋‹ค ํ‘œํ˜„์‹์„ ์ด์šฉํ•œ ์„ค๊ณ„
      • CHAP 05. ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•œ ์ž‘์—…
      • CHAP 06. ๋ ˆ์ด์ง€
      • CHAP 07. ์žฌ๊ท€ ํ˜ธ์ถœ ์ตœ์ ํ™”
      • CHAP 08. ๋žŒ๋‹ค ํ‘œํ˜„์‹์˜ ์กฐํ•ฉ
      • CHAP 09. ๋ชจ๋“  ๊ฒƒ์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด๋ณด์ž
      • ๋ถ€๋ก 1. ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ง‘ํ•ฉ
      • ๋ถ€๋ก 2. ์‹ ํƒ์Šค ์˜ค๋ฒ„๋ทฐ
    • ์ฝ”ํ‹€๋ฆฐ ์ฟก๋ถ
      • 2์žฅ ์ฝ”ํ‹€๋ฆฐ ๊ธฐ์ดˆ
      • 3์žฅ ์ฝ”ํ‹€๋ฆฐ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • 4์žฅ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • 5์žฅ ์ปฌ๋ ‰์…˜
      • 6์žฅ ์‹œํ€€์Šค
      • 7์žฅ ์˜์—ญ ํ•จ์ˆ˜
      • 9์žฅ ํ…Œ์ŠคํŠธ
      • 10์žฅ ์ž…๋ ฅ/์ถœ๋ ฅ
      • 11์žฅ ๊ทธ ๋ฐ–์˜ ์ฝ”ํ‹€๋ฆฐ ๊ธฐ๋Šฅ
    • DDD START!
      • 1์žฅ ๋„๋ฉ”์ธ ๋ชจ๋ธ ์‹œ์ž‘
      • 2์žฅ ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”
      • 3์žฅ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ
      • 4์žฅ ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ์™€ ๋ชจ๋ธ๊ตฌํ˜„(JPA ์ค‘์‹ฌ)
      • 5์žฅ ๋ฆฌํฌ์ง€ํ„ฐ๋ฆฌ์˜ ์กฐํšŒ ๊ธฐ๋Šฅ(JPA ์ค‘์‹ฌ)
      • 6์žฅ ์‘์šฉ ์„œ๋น„์Šค์™€ ํ‘œํ˜„ ์˜์—ญ
      • 7์žฅ ๋„๋ฉ”์ธ ์„œ๋น„์Šค
      • 8์žฅ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ
      • 9์žฅ ๋„๋ฉ”์ธ ๋ชจ๋ธ๊ณผ BOUNDED CONTEXT
      • 10์žฅ ์ด๋ฒคํŠธ
      • 11์žฅ CQRS
    • JAVA 8 IN ACTION
      • 2์žฅ ๋™์ž‘ ํŒŒ๋ผ๋ฏธํ„ฐํ™” ์ฝ”๋“œ ์ „๋‹ฌํ•˜๊ธฐ
      • 3์žฅ ๋žŒ๋‹ค ํ‘œํ˜„์‹
      • 4์žฅ ์ŠคํŠธ๋ฆผ ์†Œ๊ฐœ
      • 5์žฅ ์ŠคํŠธ๋ฆผ ํ™œ์šฉ
      • 6์žฅ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘
      • 7์žฅ ๋ณ‘๋ ฌ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ์„ฑ๋Šฅ
      • 8์žฅ ๋ฆฌํŒฉํ† ๋ง, ํ…Œ์ŠคํŒ…, ๋””๋ฒ„๊น…
      • 9์žฅ ๋””ํดํŠธ ๋ฉ”์„œ๋“œ
      • 10์žฅ null ๋Œ€์‹  Optional
      • 11์žฅ CompletableFuture: ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • 12์žฅ ์ƒˆ๋กœ์šด ๋‚ ์งœ์™€ ์‹œ๊ฐ„ API
      • 13์žฅ ํ•จ์ˆ˜ํ˜• ๊ด€์ ์œผ๋กœ ์ƒ๊ฐํ•˜๊ธฐ
      • 14์žฅ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•
    • ๊ฐ์ฒด์ง€ํ–ฅ๊ณผ ๋””์ž์ธํŒจํ„ด
      • ๊ฐ์ฒด ์ง€ํ–ฅ
      • ๋‹คํ˜•์„ฑ๊ณผ ์ถ”์ƒ ํƒ€์ž…
      • ์žฌ์‚ฌ์šฉ: ์ƒ์†๋ณด๋‹จ ์กฐ๋ฆฝ
      • ์„ค๊ณ„ ์›์น™: SOLID
      • DI์™€ ์„œ๋น„์Šค ๋กœ์ผ€์ดํ„ฐ
      • ์ฃผ์š” ๋””์ž์ธ ํŒจํ„ด
        • ์ „๋žตํŒจํ„ด
        • ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ ํŒจํ„ด
        • ์ƒํƒœ ํŒจํ„ด
        • ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด
        • ํ”„๋ก์‹œ ํŒจํ„ด
        • ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด
        • ์˜ต์ €๋ฒ„ ํŒจํ„ด
        • ํŒŒ์‚ฌ๋“œ ํŒจํ„ด
        • ์ถ”์ƒ ํŒฉํ† ๋ฆฌ ํŒจํ„ด
        • ์ปดํฌ์ง€ํŠธ ํŒจํ„ด
    • NODE.JS
      • 1ํšŒ์ฐจ
      • 2ํšŒ์ฐจ
      • 3ํšŒ์ฐจ
      • 4ํšŒ์ฐจ
      • 6ํšŒ์ฐจ
      • 7ํšŒ์ฐจ
      • 8ํšŒ์ฐจ
      • 9ํšŒ์ฐจ
      • 10ํšŒ์ฐจ
      • 11ํšŒ์ฐจ
      • 12ํšŒ์ฐจ
      • mongoose
      • AWS๋ž€?
    • SRPING IN ACTION (5th)
      • Chap1. ์Šคํ”„๋ง ์‹œ์ž‘ํ•˜๊ธฐ
      • Chap 2. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœํ•˜๊ธฐ
      • Chap 3. ๋ฐ์ดํ„ฐ๋กœ ์ž‘์—…ํ•˜๊ธฐ
      • Chap 4. ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ
      • Chap 5. ๊ตฌ์„ฑ ์†์„ฑ ์‚ฌ์šฉํ•˜๊ธฐ
      • Chap 6. REST ์„œ๋น„์Šค ์ƒ์„ฑํ•˜๊ธฐ
      • Chap 7. REST ์„œ๋น„์Šค ์‚ฌ์šฉํ•˜๊ธฐ
      • CHAP 8 ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ์ „์†กํ•˜๊ธฐ
      • Chap 9. ์Šคํ”„๋ง ํ†ตํ•ฉํ•˜๊ธฐ
      • CHAP 10. ๋ฆฌ์•กํ„ฐ ๊ฐœ์š”
      • CHAP 13. ์„œ๋น„์Šค ํƒ๊ตฌํ•˜๊ธฐ
      • CHAP 15. ์‹คํŒจ์™€ ์ง€์—ฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ
      • CHAP 16. ์Šคํ”„๋ง ๋ถ€ํŠธ ์•ก์ถ”์—์ดํ„ฐ ์‚ฌ์šฉํ•˜๊ธฐ
    • ์Šคํ”„๋ง๋ถ€ํŠธ ์ฝ”๋”ฉ ๊ณต์ž‘์†Œ
      • ์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ ์™œ ์‚ฌ์šฉ ํ•ด์•ผ ํ• ๊นŒ?
      • ์ฒซ ๋ฒˆ์งธ ์Šคํ”„๋ง ๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœํ•˜๊ธฐ
      • ๊ตฌ์„ฑ์„ ์‚ฌ์šฉ์žํ™” ํ•˜๊ธฐ
      • ์Šคํ”„๋ง๋ถ€ํŠธ ํ…Œ์ŠคํŠธํ•˜๊ธฐ
      • ์•ก์ถ”์—์ดํ„ฐ๋กœ ๋‚ด๋ถ€ ๋“ค์—ฌ๋‹ค๋ณด๊ธฐ
    • ANGULAR 4
      • CHAPTER 1. A gentle introduction to ECMASCRIPT 6
      • CHAPTER 2. Diving into TypeScript
      • CHAPTER 3. The wonderful land of Web Components
      • CHAPTER 4. From zero to something
      • CHAPTER 5. The templating syntax
      • CHAPTER 6. Dependency injection
      • CHAPTER 7. Pipes
      • CHAPTER 8. Reactive Programming
      • CHAPTER 9. Building components and directives
      • CHAPTER 10. Styling components and encapsulation
      • CHAPTER 11. Services
      • CHAPTER 12. Testing your app
      • CHAPTER 13. Forms
      • CHAPTER 14. Send and receive data with Http
      • CHAPTER 15. Router
      • CHAPTER 16. Zones and the Angular magic
      • CHAPTER 17. This is the end
    • HTTP ์™„๋ฒฝ ๊ฐ€์ด๋“œ
      • ๊ฒŒ์ดํŠธ์›จ์ด vs ํ”„๋ก์‹œ
      • HTTP Header
      • REST API
      • HTTP Method ์ข…๋ฅ˜
        • HTTP Status Code
      • HTTP 2.x
  • REFERENCE
    • TECH BLOGS
      • ์–ด์ธ๋ฐ๋ธŒ๋ธ”๋กœ๊ทธ
      • NAVER D2
      • ์šฐ์•„ํ•œ ํ˜•์ œ๋“ค
      • ์นด์นด์˜ค
      • LINE
      • ์Šคํฌ์นด
      • ํ‹ฐ๋ชฌ
      • NHN
      • ๋งˆ์ผ“์ปฌ๋ฆฌ
      • ์ฟ ํŒก
      • ๋ ˆ์ง„
      • ๋ฐ์ผ๋ฆฌ ํ˜ธํ…”
      • ์ง€๊ทธ์žฌ๊ทธ
      • ์Šคํƒ€์ผ์‰์–ด
      • ๊ตฌ๊ธ€
      • ์•ผ๋†€์ž
    • ALGORITHM
      • ์ƒํ™œ์ฝ”๋”ฉ
      • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
      • ๋ฐฑ์ค€
      • ์•Œ๊ณ ์ŠคํŒŸ
      • ์ฝ”๋”œ๋ฆฌํ‹ฐ
      • ๊ตฌ๋ฆ„
      • ๋ฆฟ์ฝ”๋“œ
Powered by GitBook
On this page
  • Transpilers
  • Let
  • Constants
  • Creating Objects
  • css ์ค‘์ฒฉ
  • Destructuring assignment
  • Default parameters and values
  • Rest Operator
  • Classes
  • Reference URL

Was this helpful?

  1. STUDY
  2. ANGULAR 4

CHAPTER 1. A gentle introduction to ECMASCRIPT 6

Transpilers

ES6๋Š” ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์— ๋„๋‹ฌํ•ด์™”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ ธ์—์„œ ์™„์ „ํžˆ ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ , ๋ช‡๋ช‡ ๋ธŒ๋ผ์šฐ์ ธ๋“ค์€ ์ด๋Ÿฐ ํŠธ๋ Œ๋“œ์— ๋’ค์ณ์งˆ ๊ฒƒ์ด๋‹ค. (๋งŒ์•ฝ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๊ฐ€ ์—ฃ์ง€์—์„œ๋„ ์ž˜ ๋™์ž‘ํ•œ๋‹ค ํ•˜๋”๋ผ๋„). ๋งŒ์•ฝ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ ธ์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ธ๊ฐ€? ๋ผ๋Š” ์ƒ๊ฐ์„ ํ• ์ง€๋„ ๋ชจ๋ฅธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์ด ํ•˜๋Š” ์ƒ๊ฐ์ด ๋งž๋‹ค. ๋•Œ๋ฌธ์— ์˜ค๋ž˜๋œ ๋ธŒ๋ผ์šฐ์ ธ๋Š” ๋ฌด์‹œํ•˜๋Š” ์•ฑ ๋“ค์ด ๋งŽ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ES 6๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” JS ๊ฐœ๋ฐœ์ž๋“ค์€ ES6 ์•ฑ์œผ๋กœ ๋งŒ๋“ค๊ธฐ๋ฅผ ์›ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ๊ทธ์— ๋Œ€ํ•œ ํ•ด๋‹ต์„ ๋ฐœ๊ฒฌํ•˜์˜€๋‹ค. : a transpiler.

Tanspiler๋Š” ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ ธ์—์„œ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ES6์ฝ”๋“œ๋ฅผ ์ทจํ•ฉํ•˜์—ฌ ES5 ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค. ๊ทธ๊ฒƒ์€ ์‹ฌ์ง€์–ด ๋ธŒ๋ผ์šฐ์ ธ์—์„œ ES6 ์†Œ์Šค๋ฅผ ์ง์ ‘์ ์œผ๋กœ ๋””๋ฒ„๊ทธ๋ฅผ ํ—ˆ์šฉํ•ด์ฃผ๋Š” ์†Œ์Šค๋งต ํŒŒ์ผ๋„ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค. ์ด ์‹œ์ ์—์„œ, ES6 ์ฝ”๋“œ๋ฅผ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๋‘ ๊ฐ€์ง€ ๋Œ€์•ˆ์ด ์žˆ๋‹ค.

  • Traceur, a Google project

  • Babeljs, ์ Š์€ ๊ฐœ๋ฐœ์ž๋กœ(๊ธ€์„ ์ž‘์„ฑํ•  ๋‹น์‹œ์— 17์„ธ ์˜€์Œ)๋ถ€ํ„ฐ ์‹œ์ž‘๋œ ํ”„๋กœ์ ํŠธ๋กœ ๋‹ค์–‘ํ•œ ์š”์†Œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

๊ฐ๊ฐ์€ ์žฅ์ ๊ณผ ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Babeljs๋Š” Traceur์— ๋น„ํ•ด ๊ฐ€๋…์„ฑ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Traceur๋Š” ๊ตฌ๊ธ€ ํ”„๋กœ์ ํŠธ๋กœ์จ Angular์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์˜€์„ ๊ฒฝ์šฐ์— ๋”์šฑ ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•˜๋‹ค. Angular 2 ์†Œ์Šค์ฝ”๋“œ๋Š” TypeScript๋กœ ๋ฐ”๋€Œ๊ธฐ ์ด์ „์—๋Š” Traceur์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด์ ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์˜€๋‹ค.

TypeScript๋Š” Microsoft์—์„œ ๊ฐœ๋ฐœ๋œ ์˜คํ”ˆ ์†Œ์Šค ์–ธ์–ด์ด๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ™•์žฅ๋œ ๊ธฐ๋Šฅ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ๊ณง ๊ทธ ์„ธ๋ถ€์ ์œผ๋กœ ํŒŒ์•…ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค. ์†”์งํžˆ Babel์€ Traceur๋ณด๋‹ค ๋”์šฑ ์žฅ์ ์ด ๋งŽ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” Babel์„ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ์ถฉ๊ณ ํ•œ๋‹ค. Babel์€ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€์œผ๋กœ ๋น ๋ฅด๊ฒŒ ํ™•์‚ฐ ๋˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋งŒ์•ฝ ๋„ˆ๊ฐ€ ES6๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด, ๋˜๋Š” ๋„ˆ์˜ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜๊ธธ ์›ํ•œ๋‹ค๋ฉด, transpilers๋ฅผ ์‚ดํŽด๋ณด๊ณ  ๋นŒ๋“œ ๊ณผ์ •์ค‘์— ํ•˜๋‚˜๋กœ ์ถ”๊ฐ€ํ•˜๋„๋ก ํ•ด๋ผ.

์ด๊ฒƒ์€ ๋„ˆ์˜ ES6 ์†Œ์Šค ํŒŒ์ผ์„ ๋™์ผํ•œ ES5์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด์ค„๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์€ ๋งค์šฐ ์ž˜ ๋™์ž‘ํ•˜์ง€๋งŒ ์ƒˆ๋กœ์šด ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋Šฅ๋“ค์€ ES5๋กœ ๋ณ€ํ™˜ํ•˜๋Š”๊ฒŒ ์–ด๋ ต๊ฑฐ๋‚˜ ๋ถˆ๊ฐ€๋Šฅํ• ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ํ˜„์žฌ ๊ด€์ ์—์„œ๋Š” ์•„๋ฌด ๊ฑฑ์ •์—†์ด ์‚ฌ์šฉํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์šฐ๋ฆฌ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์•ˆ์—์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋Ÿฐ ์ƒˆ๋กœ์šด ๊ฒƒ๋“ค์„ ์‚ดํŽด๋ณด๋„๋ก ํ•ด๋ผ.

Let

๋งŒ์•ฝ ๋‹น์‹ ์ด JS๋ฅผ ์‚ฌ์šฉํ•ด๋ณธ์ ์ด ์žˆ๋‹ค๋ฉด, var ์„ ์–ธ์€ ์†์ž„์ˆ˜๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋‹ค. ๋‹ค์–‘ํ•œ ๋งŽ์€ ์–ธ์–ด์—์„œ, ๋ณ€์ˆ˜๋Š” ์„ ์–ธํ•˜๋Š” ๊ณณ์—์„œ ์ •์˜๋˜์–ด์ง„๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ JS ์ปจ์…‰์—์„œ๋Š” ๋‹น์‹ ์ด ๋‚˜์ค‘์— ํ˜ธ์ถœ์„ ํ•˜์˜€๋”๋ผ๋„ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ ํ•จ์ˆ˜์˜ ์ตœ ์ƒ์œ„์—์„œ ์„ ์–ธ๋˜๋Š” โ€œhoisting(๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ)โ€์œผ๋กœ ๋ถˆ๋ฆฌ์–ด์ง„๋‹ค. ๋งŒ์•ฝ ๋‹น์‹ ์ด if ์˜์—ญ์•ˆ์—์„œ name์„ ํ˜ธ์ถœํ•˜์˜€๋‹ค.

function getPonyFullName(pony) {
    if(pony.isChampion){
        var name = 'Champion ' + pony.name;
    }
    return pony.name;
}

์ด๊ฒƒ์€ ํ•จ์ˆ˜์˜ ์ƒ์œ„์— ์„ ์–ธํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค.

function getPonyFullName(pony) {
    var name;
    if(pony.isChampion){
        name = 'Champion ' + pony.name;
        return name;
    }
    // name is still accessible here
    return pony.name;
}

ES6๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ์— ๋Œ€ํ•ด์„œ ๋‹น์‹ ์ด ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” โ€œletโ€ ์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋‹ค

function getPonyFullName(pony) {
    if(pony.isChampion){
        let name = 'Champion ' + pony.name;
        return name;
    }
    // name is still accessible here
    return pony.name;
}

name ๋ณ€์ˆ˜๋Š” ์ง€๊ธˆ์€ ์ž์‹ ์˜ ์˜์—ญ์•ˆ์—์„œ ์ œํ•œ๋˜์–ด ์žˆ๋‹ค. Let์€ ์ง€์†์ ์ธ ์‚ฌ์šฉํ•˜๋Š” ์˜์—ญ์•ˆ์—์„œ var๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ์†Œ๊ฐœ๋˜์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋„ˆ๋Š” ์˜ค๋ž˜๋œ var ๋‹จ์–ด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  let์„ ๋Œ€์ฒดํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋” ์ข‹์€ ๊ฒƒ์€ ๋งŒ์•ฝ ๋„ˆ๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋„ˆ์˜ ์ฝ”๋“œ์—์„œ ์ž˜๋ชป๋œ ์–ด๋– ํ•œ ์ ์„ ์ง€์ ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

Constants

์ƒˆ๋กœ์šด ํ‚ค์›Œ๋“œ & ๋ณ€์ˆ˜๋“ค์— ๋Œ€ํ•œ ์ฃผ์ œ๋กœ์จ, ๋˜ ํ•˜๋‚˜์˜ ํฅ๋ฏธ๋กœ์šด ๊ฒƒ์ด ์žˆ๋‹ค. ES6๋Š” constants๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์œ„ํ•ด const๋ฅผ ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋‹ค. ๋‹น์‹ ์ด const๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ๋œ๋‹ค๋ฉด, ๊ทธ๊ฒƒ์€ ์ดˆ๊ธฐํ™”๋˜์–ด์งˆ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์€ ํ›„์— ์–ด๋– ํ•œ ๊ฐ’๋„ ํ• ๋‹นํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ด๋‹ค.

const poniesInRace = 6;
poniesInRace = 7;

Let์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ๋‹ค๋ฉด, constants๋Š” ๋ธ”๋ก ๋‹จ๊ณ„์—์„œ ์˜ค์ง ์ •์˜๋˜์–ด ์งˆ๊ฒƒ์ด๊ณ  ์ƒ์œ„์—์„œ ์„ ์–ธ๋˜์–ด ์žˆ์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ๋‹น์‹ ์ด ๋†€๋ž„๋งŒํ•œ ์‚ฌ์†Œํ•œ ํ•œ๊ฐ€์ง€๋Š” ๋‹น์‹ ์€ object์™€ ํ•จ๊ป˜ constants๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๊ณ , ์ถ”ํ›„์—๋Š” object๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

const PONY = {};
PONY.color = 'blue'; //works

๊ทธ๋Ÿฌ๋‚˜ ๋‹น์‹ ์€ ๋‹ค๋ฅธ object๋ฅผ ํ• ๋‹นํ•  ์ˆ˜๋Š” ์—†๋‹ค.

const PONY = {};
PONY = {color = 'blue'}; //SyntaxError

๋ฐฐ์—ด๋“ค๋„ ๊ฐ™์€ ์ด์œ ์ด๋‹ค.

const PONIES = [];
PONIES.push({color : 'blue'}); //works

PONIES = []; //SyntaxError

Creating Objects

์ƒˆ๋กœ์šด ํ‚ค์›Œ๋“œ๋Š” ์•„๋‹ˆ์ง€๋งŒ ES6์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ์žˆ๋‹ค๋ฉด ๋‹น์‹ ์˜ ์‹œ์„ ์„ ์‚ฌ๋กœ์žก์„ ๊ฒƒ์ด๋‹ค. ์ง€๊ธˆ์€ ๋‹น์‹ ์ด ๋ณ€์ˆ˜๋กœ์จ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜์–ด์งˆ ๋งŒํผ Object ์š”์†Œ๋ฅผ ์ƒ์„ฑ ํ•˜๊ธฐ๋ฅผ ์›ํ•  ๊ฒฝ์šฐ์— object๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฐ€๋ฒผ์šด ์š”์•ฝ ์ •๋ฆฌ์ด๋‹ค.

function createPony() {
    const name = 'Rainbow Dash';
    const color = 'blue';
    return { name: name, color: color };
}

๋”์šฑ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

function createPony() {
    const name = 'Rainbow Dash';
    const color = 'blue';
    return { name, color };
}

css ์ค‘์ฒฉ

  • ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ์™€ ๊ฐ™์ด ๊ทœ์น™ ์„ธํŠธ ๋‚ด๋ถ€์— ๋‹ค์‹œ ์„ ์–ธ๋˜๋Š” ๊ตฌ์กฐ์—์„œ๋Š” 1๋ ˆ๋ฒจ ์”ฉ ์ถ”๊ฐ€ํ•˜์—ฌ ๋“ค์—ฌ์“ฐ๊ธฐ ํ•ฉ๋‹ˆ๋‹ค.

@media screen and (min-width: 750px) {
    html, body { font-size: 19px; }
    .measure {
        margin: 5rem;
        padding: 0 3rem;
    }
}

Destructuring assignment

์ด๊ฒƒ์€ object๋‚˜ ๋ฐฐ์—ด๋“ค๋กœ๋ถ€ํ„ฐ ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์š”์•ฝ ์ •๋ฆฌ์ด๋‹ค.

In ES5:

function httpOptions = { timeout: 2000, isCache: true };
// later
var httpTimeout = httpOptions.timeout;
var httpCache = httpOptions.isCache;

Now, in ES6, you can do:

const httpOptions = { timeout: 2000, isCache: true };
// later
const{ timeout: httpTimeout, isCache: httpCache} = httpOptions;

๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์€ Object ๋‚ด๋ถ€์˜ ์š”์†Œ๋ฅผ ํ‚ค ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์—๋‚˜ ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ•  ๊ฒฝ์šฐ์— ์•ฝ๊ฐ„์˜ ๋ถˆ์•ˆ๊ฐ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹น์‹ ์ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•œ ์š”์†Œ๋ฅผ ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•˜๊ธธ ์›ํ•  ๊ฒฝ์šฐ์— ์ด๊ฒƒ์€ ๊ต‰์žฅํ•˜๋‹ค.

const httpOptions = { timeout: 2000, isCache: true };
// later
const{ timeout, isCache} = httpOptions;
// you now have a variable named 'timeout'
// and one named 'isCache' with correct values

๊ต‰์žฅํ•œ ๊ฒƒ์€ ๋‚ด๋ถ€์˜ object๋ฅผ ํฌํ•จํ•œ ๊ฒƒ๋„ ๋˜ํ•œ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

const httpOptions = { timeout: 2000, isCache: true };
// later
const{ timeout, isCache} = httpOptions;
// you now have a variable named 'chortTimeout' with value 1000
// and a variable named 'mediumTimeout' with value 2000

๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ๋ฐฐ์—ด๋“ค๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ฌผ๋ก  ๋ฐฐ์—ด ์•ˆ์— ๋ฐฐ์—ด ๋˜ํ•œ object์•ˆ์— ๋ฐฐ์—ด์ด ์žˆ๋Š” ๊ฒƒ ๋“ฑ๋“ฑ ๋„ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ํ•œ๊ฐ€์ง€ ํฅ๋ฏธ๋กœ์šด ๊ฒƒ์€ ๋ณ€์ˆ˜๋“ค์„ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. race์•ˆ์— ์œ„์น˜์™€ pony๋ฅผ ๋Œ๋ ค์ฃผ๋Š” randomPonyInRace ํ•จ์ˆ˜๋ฅผ ์ƒ์ƒํ•ด๋ณด์•„๋ผ.

function randomPonyInRace(){
    const pony = { name: 'Rainbow Dash' };
    const position = 2;
    // ...
    return { pony, position };
}

const { position, pony } = randomPonyInRace();

๋ณ€์ˆ˜์˜ ์œ„์น˜์— ํ•ด๋‹นํ•˜๋Š” ํ•จ์ˆ˜์˜ ์˜ํ•ด ๋Œ๋ ค๋ฐ›๋Š” ์œ„์น˜๋ฅผ ํ• ๋‹นํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์€ ์ƒˆ๋กญ๊ฒŒ ์‚ฌ๋ผ์ง„ ๊ธฐ๋Šฅ์ด๋‹ค. ๋งŒ์•ฝ ๋„ˆ๊ฐ€ ์œ„์น˜์— ๋Œ€ํ•ด ์ƒ๊ด€ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋„ˆ๋Š” ์ž‘์„ฑํ• ์ˆ˜ ์žˆ๋‹ค.

function randomPonyInRace(){
    const pony = { name: 'Rainbow Dash' };
    const position = 2;
    // ...
    return { pony, position };
}

const { pony } = randomPonyInRace();

๊ทธ๋ฆฌ๊ณ  ๋„ˆ๋Š” ์˜ค์ง pony๋ฅผ ๊ฐ€์งˆ ๊ฒƒ์ด๋‹ค.

Default parameters and values

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์•„๋ฌด๋ ‡๊ฒŒ๋‚˜ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์—ฌ๋„ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค :

  • ๋งŒ์•ฝ ๋‹น์‹ ์ด ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐœ์ˆ˜๋ณด๋‹ค ๋” ๋งŽ์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„˜๊ธด๋‹ค๋ฉด, ๋‚˜๋จธ์ง€ ํŒŒ๋ผ๋ฏธํ„ฐ ๋“ค์€ ๋ฌด์‹œ๋˜์–ด ์งˆ ๊ฒƒ์ด๋‹ค. ( ๋‹น์‹ ์€ ํŠน๋ณ„ํ•œ ๋ณ€์ˆ˜๋“ค๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. )

  • ๋งŒ์•ฝ ๋‹น์‹ ์ด ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐœ์ˆ˜๋ณด๋‹ค ๋” ์ ์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„˜๊ธด๋‹ค๋ฉด, ๋ถ€์กฑํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์€ undefined๋กœ ํ• ๋‹น๋  ๊ฒƒ์ด๋‹ค.

    ๋‘ ๋ฒˆ์งธ ๊ฒฝ์šฐ๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ๊ฐ€์žฅ ๊ด€๋ จ ์žˆ๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์„ ํƒ์ ์ผ ๊ฒฝ์šฐ์— ์šฐ๋ฆฌ๋Š” ์ฃผ๋กœ ์ ์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์„ ๋„˜๊ธด๋‹ค.

function getPonies(size, page){
    size = size || 10;
    page = page || 1;
    // ...
    server.get(size, page);
}

์„ ํƒ์ ์ธ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์€ ์ฃผ๋กœ ๊ธฐ๋ณธ ๊ฐ’๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. OR ๊ธฐํ˜ธ๋Š” ๋งŒ์•ฝ ์™ผ์ชฝ์˜ ๋ณ€์ˆ˜๊ฐ€ undefined์ผ ๊ฒฝ์šฐ์— ๊ธฐํ˜ธ์˜ ์˜ค๋ฅธ์ชฝ ๋ณ€์ˆ˜๋ฅผ ๋„˜๊ธธ ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ๊ณต๊ธ‰๋˜์ง€ ์•Š๋Š” ๋‹ค๋ฉด ํ•ด๋‹น ๊ฒฝ์šฐ์—๋Š” 0,false,โ€โ€์ด ๋  ๊ฒƒ์ด๋‹ค. ์ด ์†์ž„์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ getPoines ํ•จ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ˜ธ์ถœ๋  ๊ฒƒ์ด๋‹ค.

getPonies(20, 2);
getPonies(); // same as getPonies(10, 1);
getPonies(15); // same as getPonies(15, 1);

์ด๊ฒƒ์€ ์ •ํ™•ํ•˜๊ฒŒ ๋™์ž‘ํ•˜๊ฒ ์ง€๋งŒ ํ•จ์ˆ˜ body๋ฅผ ์ฝ์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ๊ธฐ๋ณธ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์„ ํƒ์ ์ธ ๋ณ€์ˆ˜๋“ค์€ ๋ช…๋ฐฑํ•˜์ง€๋Š” ์•Š์„ ๊ฒƒ์ด๋‹ค. ES6๋Š” ๊ธฐ๋ณธ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋” ์œ ์šฉํ•œ ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•œ๋‹ค.

function getPonies(size = 10, page = 1){
    // ...
    server.get(size, page);
}

๋งŒ์•ฝ ์™„๋ฒฝํžˆ ์ •์˜๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด size ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” 10์ด ๋  ๊ฒƒ์ด๊ณ  Page parameter๋Š” 1์ด ๋  ๊ฒƒ์ด๋‹ค.

  • NOTE : ์ž‘์€ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ๋งŒ์•ฝ 0 ๋˜๋Š” โ€œโ€ ๊ฐ’์ด ์œ ์š”ํ•œ ๊ฐ’๋“ค์ด๋ผ๋ฉด ์ด๊ฒƒ์€ ํ•˜๋‚˜์˜ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ size = size || 10 ์œผ๋กœ ์ž‘์„ฑ๋˜์–ด ์ง€์—ˆ๋“ฏ์ด ๋ณ€๊ฒฝ๋  ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์€ size = size === undefined ? 10 : size; ๋กœ ์ •์˜๋œ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

    ๊ธฐ๋ณธ ๊ฐ’์€ ํ•จ์ˆ˜ ์‹คํ–‰์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

๋˜๋Š” ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋“ค, ์ „์—ญ ๋ณ€์ˆ˜๋“ค, ๋˜๋Š” ํ•จ์ˆ˜์˜ ๋‹ค๋ฅธ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค

function getPonies(size = defaultSize(), page = size - 1){
    // if page is not provided, it will be set to the value
    // of the size parameter minus one.
    // ...
    server.get(size, page);
}

๋งŒ์•ฝ ๋‹น์‹ ์ด ์˜ค๋ฅธ์ชฝ ํŒŒ๋ผ๋ฏธํ„ฐ์— ์ ‘๊ทผ ํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด, ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ํ•ญ์ƒ undefined ์ผ๊ฒƒ์ด๋‹ค.

function getPonies(size = page, page = 1){
    // size will always be undefined, as the page parameter is on its right
    server.get(size, page);
}

ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•œ ์›๋ฆฌ๋Š” ๋ณ€์ˆ˜๋“ค์— ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ๊ฐ์†Œ๋œ ํ• ๋‹น์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด

const { timeout = 1000 } = httpOptions;
// you now have a variable named 'timeout'
// with the value of 'httpOptions.timeout' if it exists
// or 1000 if not

Rest Operator

ES6๋Š” ํ•จ์ˆ˜๋‚ด์—์„œ ๋ณ€์ˆ˜ ์„ ์–ธํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฐฉ์‹์„ ์†Œ๊ฐœํ•œ๋‹ค. ์ด์ „ ๋ถ€๋ถ„์—์„œ๋„ ์–ธ๊ธ‰ํ•˜์˜€๋“ฏ์ด, ๋‹น์‹ ์€ ํ•จ์ˆ˜์— ๊ทธ ์™ธ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„˜๊ธธ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŠน๋ณ„ํ•œ ๋ณ€์ˆ˜๋“ค์„ ์‚ฌ์šฉํ•œ ๊ฒƒ๋“ค์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

function addPonies(ponies){
    for (var i=0; i<arguments.length; i++){
        poniesInRace.push(arguments[i]);
    }
}

addPonies('Rainbow Dash', 'Pinkie Pie');

๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๊ฐ€ ๋‚˜์˜์ง€๋„ ์•Š๊ณ  ๋ช…๋ฐฑํ•˜์ง€๋„ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๋™์˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. Poines ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ ˆ๋Œ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ๋ช‡๋ช‡์˜ ponies๋ฅผ ๋„˜๊ฒจ์•ผ ํ• ์ง€ ์•Œ๊ณ  ์žˆ๋Š”๊ฐ€? ES6๋Š” โ€ฆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์šฐ๋ฆฌ์—๊ฒŒ ๋” ๋‚˜์€ ๋ฌธ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

function addPonies(...ponies){
    for (let pony of ponies){
        poniesInRace.push(pony);
    }
}

Poines๋Š” ์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ๋ฐ˜๋ณตํ• ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด์ด๋‹ค. For โ€ฆ of ๊ตฌ์กฐ๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋˜์–ด์ ธ์žˆ๋‹ค. ES6์—์„œ ์ƒˆ๋กœ์šด ํŠน์ง•์œผ๋กœ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. ์ด๊ฒƒ์€ ์ง‘ํ•ฉ ๋ณ€์ˆ˜๋“ค์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ๋„ ํ—ˆ์šฉํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  for โ€ฆ in์œผ๋กœ์จ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์šฐ๋ฆฌ์˜ ์ฝ”๋“œ๊ฐ€ ๋” ์•„๋ฆ„๋‹ต๊ณ  ๋ช…ํ™•ํ•˜๋Š”๊ฒƒ์— ๋™์˜ ํ•˜๋Š”๊ฐ€? ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์ž๋Š” ๊ฐ์†Œํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ• ๋•Œ๋„ ๋™์ž‘ํ•œ๋‹ค.

const [winner, ...losers] = poniesInRace;
// assuming 'poniesInRace' is an array containing serveral ponies
// 'winner' will have the first pony,
// and 'losers' will be an array of the others cones

๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์ž๋Š” ํ™•์‚ฐ ์—ฐ์‚ฌ์ž์™€ ํ˜ผ๋™๋˜์ง€ ์•Š๋Š”๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์—๊ฒŒ ๊ต‰์žฅํžˆ ๋น„์Šทํ•œ ์ฝ”๋“œ๋ฅผ ๋ณด์—ฌ์ค„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ™•์‚ฐ ์—ฐ์‚ฐ์ž๋Š” ์ • ๋ฐ˜๋Œ€์ด๋‹ค. ์ด๊ฒƒ์€ ๋ฐฐ์—ด์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ณ  ๊ฐ€์น˜์žˆ๋Š” ์˜๋ฏธ์žˆ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์•ˆ์—์„œ ๊ทธ๊ฒƒ์„ ํ™•์‚ฐํ•œ๋‹ค. ์ด์˜ˆ์ œ๋Š” ์ตœ์†Œ๊ฐ’, ์ตœ๋Œ€๊ฐ’ ๊ฐ™์€ ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉ๋ ์ˆ˜ ์žˆ๋‹ค. ๋„ˆ๋Š” ์•„๋งˆ๋„ ๋ฐฐ์—ด์„ ํ˜ธ์ถœํ•˜๊ธธ ์›ํ• ์ง€๋„ ๋ชจ๋ฅธ๋‹ค.

const ponyPrices = [12,3,4];
const minPrice = Math.min(...ponyPrices);

Classes

๊ฐ€์žฅ ์ƒ์ง•์ ์ธ ํŠน์ง•์ค‘์— ํ•˜๋‚˜์ด๋ฉฐ ์šฐ๋ฆฌ๋Š” Angular app์„ ์ž‘์„ฑํ•  ๊ฒฝ์šฐ์— ๋Œ€๋‹จํžˆ ์ž์ฃผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค. ES6๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— Classes๋ฅผ ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋‹ค. ๋‹น์‹ ์€ ์‰ฝ๊ฒŒ class์™€ ์ƒ์†์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹น์‹ ์€ ํ”„๋กœํ† ํƒ€์ž… ์ƒ์†์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์ดˆ๋ณด์ž์—๊ฒ ์‰ฝ์ง€ ์•Š์€ ์ž‘์—…์ด๋‹ค.

class Pony {
    constructor(color){
        this.color = color;
    }

    toString(){
        return '${this.color} pony';
        // set that? It is another cool feature of ES6, called template literals
        // we'll talk about these quickly!
    }
}

const bluePony = new Pony('blue');
console.log(bluePony.toString()); // blue pony

Class ์„ ์–ธ์€ ํ•จ์ˆ˜ ์„ ์–ธ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋Œ์–ด๋‹น๊น€์ด ์•„๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹น์‹ ์€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ด์ „์— ์„ ์–ธํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ๋‹น์‹ ์€ ํŠน๋ณ„ํ•œ constructor ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•ด์•ผํ• ์ง€ ๋ชจ๋ฅธ๋‹ค. ๊ทธ๊ฒƒ์€ ์ƒˆ๋กœ์šด pony๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์‹คํ–‰๋˜์–ด์ง„๋‹ค. Pony๋Š” color๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์šฐ๋ฆฌ๋Š” color๊ฐ€ โ€œblueโ€๋กœ ๊ตฌ์„ฑ๋œ color ๋ฅผ ๊ฐ€์ง„ pony ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ ๋‹ค. ํ•ด๋‹น ํด๋ž˜์Šค๋Š” ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  toString()์œผ๋กœ ๋˜์–ด ์žˆ๋‹ค.

class Pony {
    static defaultSpeed() {
        return 10;
    }
}

์ •์ ์ธ ํ•จ์ˆ˜๋Š” ํด๋ž˜์Šค์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉ๋ ์ˆ˜ ์žˆ๋‹ค.

const speed = Pony.defaultSpeed();

๋งŒ์•ฝ ๋‹น์‹ ์ด ์—ฐ์‚ฐ์ž๋กœ ๋ณ€์ˆ˜๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธธ ์›ํ•œ๋‹ค๋ฉด Class๋Š” getter / setter๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

Class Pony {
    get color() {
        console.log('get color');
        return this._color;
    }

    set color(newColor) {
        console.log('set color ${newColor}');
        this._color = newColor;
    }
}
const pone = new Pony();
pony.color = 'red';
// set color red
console.log(pony.color);
// get color
// red

๋ฌผ๋ก , ๋‹น์‹ ์ด ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๋‹น์‹ ์€ ES6์—์„œ ์ƒ์†์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

class Animal {
    speed(){
        return 10;
    }
}
class Pony extends Animal {

}
const pony = new Pony();
console.log(pony.speed()); // 10, as Pony overrides the parent method

Animal์€ ๊ธฐ๋ณธ ํด๋ž˜์Šค์ด๊ณ , Pony๋Š” ํŒŒ์ƒ๋œ ํด๋ž˜์Šค์ด๋‹ค. ๋ณด์‹œ๋‹ค์‹œํ”ผ, ํŒŒ์ƒ๋œ ํด๋ž˜์Šค๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค์˜ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹ค์‹œ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

class Animal {
    speed(){
        return 10;
    }
}
class Pony extends Animal {
    speed(){
        return super.speed() + 10;
    }
}
const pony = new Pony();
console.log(pony.speed()); // 20, as Pony overrides the parent method

๋ณด์‹œ๋‹ค์‹œํ”ผ, super๋ผ๋Š” ํ‚ค์›Œ๋“œ๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•œ๋‹ค. Super ํ‚ค์›Œ๋“œ๋Š” ๊ธฐ๋ณธ ํด๋ž˜์Šค constructor ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์œผ๋กœ constructor์•ˆ์—์„œ ์‚ฌ์šฉ๋ ์ˆ˜์žˆ๋‹ค.

class Animal {
    constructor(speed) {
        this.speed = speed;
    }
}
class Pony extends Animal {
    constructor(speed, color){
        super(speed);
        this.color = color;
    }
}
const pny = new Pony(20, 'blue');
console.log(pony.speed); // 20

Reference URL

PreviousANGULAR 4NextCHAPTER 2. Diving into TypeScript

Last updated 5 years ago

Was this helpful?

Become a NINJA with Angular 2
Learn Angular 2
Angular 2 Component
An Introduction to Angular 2