2023. 12. 12. 01:15γκ°λ μ 리 μμ μ€/Kotlin
"μ΄ ν¬μ€ν μ μΏ ν‘ ννΈλμ€ νλμ μΌνμΌλ‘, μ΄μ λ°λ₯Έ μΌμ μ‘μ μμλ£λ₯Ό μ 곡λ°μ΅λλ€."
π Kotlin λ¬Έλ² μ΄ μ 리
π½ λ€μ΄κ°κΈ°
π¦ μκ°
μλ
νμΈμ?
Andloid(μλλ‘μ΄λ), Spring Boot(μ€νλ§ λΆνΈ)λ₯Ό μ΄μ©ν΄μ κ°λ°ν λ, Java(μλ°)λ₯Ό μ¬μ©ν μλ μμ§λ§, JetBrainsμμ λ§λ Kotlin(μ½νλ¦°)μ μ¬μ©ν΄μ κ°λ°μ ν μλ μμ΄μ.
μ λͺ
μ λμ½ κΈ°μ
λ€μ μ΄λ―Έ μ€νλ§ λΆνΈ λ±μ κ°λ°ν λ, μλ°κ° μλ μ½νλ¦°μΌλ‘ κ°λ°νκ³ μκ³ , μλλ‘μ΄λ μ§μκ³Ό μ€νλ§ λΆνΈ μ§μμ κ°λ°μλΌλ©΄ 곡λΆνλ©΄ μ’λ€κ³ μκ°μ΄ λμ΄ μ½νλ¦°μ 곡λΆν΄ λ³΄λ €κ³ ν΄μ.
μ΄λ² κΈμ μ½νλ¦°μ κΈ°λ³Έ λ¬Έλ²κ³Ό νΉμ§μ νμ
νκ³ , μ¬μ©ν μ μλλ‘ μ λ¦¬ν΄ λ³΄λλ‘ ν κ±°μμ.
μ°Έκ³ ν κ°μλ μλ κ°μμμ.
ν΄λΉ κ°μλ μλλ‘μ΄λ κΈ°μ€μΌλ‘ μ€λͺ
νλ κ°μμ΄μ§λ§, μ£Όλλ μ½νλ§(kotlin + spring boot)λ₯Ό μν κΈ°μ€μ μ‘κ³ μ§νν΄ λ³΄λ €κ³ ν΄μ.
λ°λΌμ κ°μμμλ IDEλ₯Ό μλλ‘μ΄λ μ€νλμ€λ₯Ό μ¬μ©νμ§λ§, μ£Όλλ InteliJ(μΈν
리μ μ΄)λ₯Ό μ΄μ©ν΄μ 곡λΆν΄ 보λλ‘ ν κ±°μμ.
μ°Έκ³ λ‘ μ½νλ¦°μ 곡λΆν λ, μλ°λ₯Ό μλ μνμμ λΉκ΅ν΄ κ°λ©΄μ 곡λΆνλ κ²μ΄ κ°μ₯ μ’μ λ°©λ²μ΄λΌκ³ μκ°ν΄μ.
μ½νλ¦°μ 곡λΆνμκ³ μ νλ€λ©΄ μλ°λ₯Ό κΌ κ³΅λΆν΄ μ£ΌμΈμ.
μ΄λ² κΈμ μλ°λ₯Ό μμ λ€λ κ°μ νμ μμ± λμμ΅λλ€.
π¦ Java, Kotlin, TypeScript μΈμ΄λ€μ νΉμ§
μ£Όλκ° μ½νλ¦°μ μ¬μ©ν μ μκ² λλ©΄ λνμ μΌλ‘ μλ°, μ½νλ¦°, TypeScriptλ₯Ό μ¬μ©ν μ μκ² λΌμ.
(JavaScriptλ ν μ€ μμ§λ§, λΉκ΅ λμμμ μ μΈ.) κ·Έλ λ€λ©΄ μ΄ μΈκ°μ§ μΈμ΄μ νΉμ§μ μ΄λ€ κ²λ€μ΄ μμκΉμ?
β μ°¨μ΄μ
π μΈμ΄ λ° μνκ³
1) μλ°
- μλ°λ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° μΈμ΄λ‘ JVM(Java Virtual Machine)μμ μ€ν.
- μν°νλΌμ΄μ¦ μ ν리μΌμ΄μ
λ° μλλ‘μ΄λ μ± κ°λ° λ± λ€μν λΆμΌμμ μ¬μ© κ°λ₯.
2) μ½νλ¦°
- JetBrainsμμ κ°λ°ν JVM λ° μλλ‘μ΄λμμ μ€νλλ 곡μμ μΈ μλλ‘μ΄λ μΈμ΄.
- μλ°μμ 100% μνΈ μ΄μ©μ±μ μ 곡νλ©΄μ λ κ°κ²°νκ³ , μμ ν λ¬Έλ² μ 곡.
3) TypeScript
- MS(Microsoft)μμ κ°λ°ν JavaScriptμ μμ μ§ν μΈμ΄λ‘, μ μ νμ
μ§μ.
- λκ·λͺ¨ μΉ μ ν리μΌμ΄μ
κ°λ°μ μ£Όλ‘ μ¬μ©λλ©°, JavaScript Runtimeμμ μ€ν.
β νμ μμ€ν
π μλ°
- μλ°λ μ μ νμ
μΈμ΄λ‘, μ»΄νμΌ νμμ νμ
νμΈ.
- λͺ
μμ μΌλ‘ νμ
μ μΈν΄μΌ ν¨. (λ¨, μλ° 10λΆν° λμ
λ 'λ‘컬 λ³μ νμ
μΆλ‘ 'μ΄λΌλ κΈ°λ₯μ μ‘΄μ¬. μ΄λ var ν€μλλ₯Ό μ¬μ©νμ¬ λ³μλ₯Ό μ μΈν λ μ»΄νμΌλ¬κ° μ°λ³μ ννμμ κΈ°λ°μΌλ‘ λ³μμ νμ
μ μΆλ‘ ν μ μκ² νλ κΈ°λ₯. μ΄λ₯Ό ν΅ν΄ μ½λμ κ°λ
μ±μ ν₯μμν€κ³ λ°λ³΅ μ½λλ₯Ό μ€μΌ μ μλ€.)
π μ½νλ¦°
- μ μ νμ
μΈμ΄μ΄λ©°, μλ°μ λ§μ°¬κ°μ§λ‘ μ»΄νμΌ νμμ νμ
νμΈ.
- νμ
μΆλ‘ μ ν΅ν΄ μ½λλ₯Ό κ°κ²°νκ² μμ±ν μ μλλ‘ μ§μ.
π νμ
μ€ν¬λ¦½νΈ
- μ μ νμ
μΈμ΄μ΄λ©°, JavaScriptμ μμ μ§ν©μ΄λ―λ‘ νμ
μ λͺ
μμ μΌλ‘ μ μΈνμ§ μμλ λλ νΉμ§.
- Optionalν μ μ νμ
μμ€ν
μ μ 곡νμ¬ νμ
μΆλ‘ κ°λ₯.
β λ¬Έλ² λ° νΉμ§
π μλ°
- μλΉν λͺ
μμ μ΄κ³ , λ¬Έμ₯μ λ§μ΄ μ μ΄μ€μΌ νλ μΈμ΄.
- Null μμ μ±μ 보μ₯νκΈ° μν μΆκ° λ
Έλ ₯ νμ.
- λͺ¨λ λ³μκ° Nullμ΄ λ μ μλ€.
- μλ°λ λͺ
μμ ν λ³ν μ¬μ©.
- μλ°λ Null λ³ν© μ°μ°μ ??λ₯Ό μ§μνμ§ μμ.
π μ½νλ¦°
- ννλ ₯μ΄ νꡬνκ³ , κ°κ²°ν λ¬Έλ² μ 곡.
- Null μμ μ±, νμ₯ ν¨μ, λ°μ΄ν° ν΄λμ€ λ±μ νΉμ§
- κΈ°λ³Έμ μΌλ‘ λ³μκ° Null κ°μ λ°μ μ μλμ§ μ¬λΆλ₯Ό λͺ
μμ μΌλ‘ μ§μ ν΄μΌ ν¨. ?(λ¬Όμν)λ₯Ό μ¬μ©νμ¬ λ³μκ° Nullμ λ°μ μ μμμ νμ.
- as ν€μλλ₯Ό ν΅ν νμ
κ°μ λ³ν μν κ°λ₯.
- Null λ³ν© μ°μ°μ ?: λ₯Ό μ¬μ©νμ¬ Null κ° λ체 κ°λ₯.
π νμ
μ€ν¬λ¦½νΈ
- JavaScriptμ νμ₯μΌλ‘, ES6+μ μλ‘μ΄ κΈ°λ₯κ³Ό μ μ νμ
μ¬μ© κ°λ₯.
- ν΄λμ€, μΈν°νμ΄μ€, μ λ€λ¦ λ±κ³Ό κ°μ κ°μ²΄μ§ν₯ λ° ν¨μν νλ‘κ·Έλλ° μ§μ.
- JavaScriptμμ νΈνμ± μ μ§λ₯Ό μν΄ κΈ°λ³Έμ μΌλ‘ λͺ¨λ λ³μκ° Nullμ΄ λ μ μμΌλ, λ³μλ₯Ό λͺ
μμ μΌλ‘ νμ
μ§μ νμ¬ Nullμ λ°μ μ μμμ νμν μλ μμ. μ½νλ¦°κ³Ό κ°μ΄ ?(λ¬Όμν)λ₯Ό μ¬μ©νμ¬ λ³μκ° Nullμ λ°μ μ μμμ νμνκ±°λ, λ³μ νμ
μ | null = nullκ³Ό κ°μ΄ μ μΈ.
- as νΉμ <Type> ꡬ문μ μ΄μ©νμ¬ νμ
κ°μ λ³ν μν κ°λ₯.
- Null λ³ν© μ°μ°μ ?? λ₯Ό μ¬μ©νμ¬ Null κ° λ체 κ°λ₯.
β λΉλκΈ° νλ‘κ·Έλλ°
π μλ°
- μλ°μμλ κΈ°λ³Έμ μΌλ‘ μ€λ λμ λ½μ μ¬μ©νμ¬ λΉλκΈ° νλ‘κ·Έλλ° μ§μ.
- μλ° 5λΆν°λ java.util.concurrent ν¨ν€μ§λ₯Ό ν΅ν΄ λμ± κ³ μ°¨μμ μΈ λΉλκΈ° κΈ°λ₯ μ¬μ© κ°λ₯.
π μ½νλ¦°
- μ½λ£¨ν΄μ ν΅ν΄ λΉλκΈ° μ½λ μμ±.
- μ½λ£¨ν΄μ λΉλκΈ° μ½λλ₯Ό κ°κ²°νκ² μμ±νκ³ , κ΄λ¦¬ν μ μλλ‘ ν΄μ£Όλ κΈ°λ₯.
π νμ
μ€ν¬λ¦½νΈ
- JavaScriptμ λΉλκΈ° ν¨ν΄μ νμ©νλ©°, Promiseμ async/awaitμ ν΅ν΄ λΉλκΈ° μ½λ μμ±.
β 곡ν΅μ
π μλ°μ μ½νλ¦°
- μλ°μ μ½νλ¦° λͺ¨λ JVMμμ μ€νλκΈ° λλ¬Έμ μλ°μ μ½νλ¦° μ½λ νΌμ© κ°λ₯.
β μνΈ μ΄μ©μ±
π μλ°μ μ½νλ¦°
- μ½νλ¦°μ 100% μλ°μ μνΈ μ΄μ©μ΄ κ°λ₯νλ©°, μλ° μ½λλ₯Ό μ½νλ¦°μΌλ‘ λ³ννκ±°λ, μ½νλ¦° μ½λλ₯Ό μλ°λ‘ λ³ν κ°λ₯.
π νμ
μ€ν¬λ¦½νΈ
- TypeScriptλ JavaScriptμ μλ²½ν μνΈ μ΄μ©μ΄ κ°λ₯νλ©°, κΈ°μ‘΄ JavaScript μ½λλ₯Ό TypeScriptλ‘ νμ₯νλ λ°©μμΌλ‘ μ¬μ© κ°λ₯.
β λͺ¨λν νΉμ§ μ§μ
π μλ°μ μ½νλ¦°
- μλ°μ μ½νλ¦°μ μ΅μ λ²μ μμ κ³μν΄μ λͺ¨λν κΈ°λ₯ λμ
μ€.
π½ Project
π¦ μ΄κΈ° ꡬμ±
μ΅μ΄ μΈν
리μ μ΄λ₯Ό μΌκ³ , μ νλ‘μ νΈλ₯Ό λλ¬μ€λλ€.
κ·Έλ¦¬κ³ μμ κ°μ΄ Path(μμΉ)μ μ΄λ¦μ μ νκ³ , μΈμ΄λ μ½νλ¦°μΌλ‘ μ νν λ€ JDK Versionμ μ£Όλλ 11λ‘ μ‘μ μ£Όμμ΄μ.
μ΄λ κ² ν λ€ μμ± λ²νΌμ ν΄λ¦ν΄ μ£Όμμ΄μ.
κ·ΈλΌ μμ κ°μ΄ Project(νλ‘μ νΈ)κ° λ§λ€μ΄μ§ κ±Έ μ μ μμ΄μ.
νμ¬λ μ무 νμΌλ μλκ±Έ μ μ μμ΄μ.
μμ κ°μ΄ Class(ν΄λμ€) File(νμΌ)μ νλ λ§λ€μ΄ μ€κ²μ.
μ£Όλλ μμ κ°μ΄ Main.kt λΌλ νμΌμ λ§λ€μ΄ μ£Όμμ΄μ.
μμ κ°μ΄ λΉ Main.kt νμΌμ΄ λ§λ€μ΄ μ‘μ΄μ.
μλ°λ main()μ΄ μλ― μ½νλ¦°λ λ§μ°¬κ°μ§μμ.
μμ κ°μ΄ main()μ λ§λ€κ³ , Hello Juny!!λ₯Ό μΆλ ₯νλλ‘ ν΄ λ³΄μμ΄μ.
μ°Έκ³ λ‘ μλ°μ λΉκ΅νμ λ, print() λ¬Έ λ€μ ;(μΈλ―Έμ½λ‘ )μ λ£μ§ μμλ λλ€λ κ²μ΄ νΉμ§μ΄μμ.
μ€νμ 1 μμ μ¬μ νμλ₯Ό λλ₯΄λ©΄ λΌμ.
μμ κ°μ΄ μ€νν μ μμ΄μ
μμ κ°μ΄ μ μ²λ¦¬λκ±Έ νμΈν μ μμ΄μ.
μ΄μ λΆν°λ μΈν
리μ μ΄μμ Mac κΈ°μ€ μ€νν λ,
μ΄ λ κΈ°λ₯μ μ΄μ©ν΄μ κΈ°λν μ μμ΄μ.
π½ κΈ°μ΄ λ¬Έλ²
π¦ print, println
μ΄λ²μλ Console(μ½μ) μΆλ ₯μ λν΄ μμλ³Όκ²μ.
μμ κ°μ΄ print(), println()μ μ¬μ©ν μ μμ΄μ.
π¦ Variable
μ΄λ²μλ μ½νλ¦°μ λ³μμ λν΄ μμλ³Όκ²μ.
μ½νλ¦°μμ λ³μλ₯Ό μ μΈν λλ var(Variable) λΌλ Keyword(ν€μλ)λ₯Ό μ¬μ©ν΄ μ£Όμ΄μΌ ν΄μ.
JavaScript, TypeScriptμ κ²½μ° var νΉμ let ν€μλλ₯Ό μ¬μ©ν΄μΌ ν΄μ.
μ½νλ¦°μ μλ°μ λ€λ₯΄κ² Type(νμ
)μ μΆλ‘ νλ κΈ°λ₯μ κ°μ§κ³ μκΈ° λλ¬Έμ
μλ°μ κ°μ΄ μλ£ν νμ
μ μ μΈνμ§ μμλ λΌμ.
λ¬Όλ‘ μ΅μ λ²μ μ μλ° μμ νμ
μΆλ‘ μ΄ κ°λ₯ν΄μ.
λ§μ½ μλ£ν νμ
μ μ§μ νκ³ μΆλ€λ©΄ μλμ κ°μ΄ νλ©΄ λΌμ.
μμ κ°μ΄ μλ£νμ λ³μλͺ
λ€μ μ°λ λ¬Έλ²μ TypeScriptμ μ μ¬ν΄μ.
μ½νλ¦°μ λͺ¨λ μλ£ν νμ
μ΄ Wrapper(λνΌ) νμ
μ κ°μ§κ³ μμ΄μ.
μλ°λ μλ¬Έμλ‘ int, double λ±μ λͺ
μν΄μ μμν νμ
μ μ§μ ν μλ μλλ°,
μ½νλ¦°μ λͺ¨λ λνΌ νμ
μΌλ‘ μ§μ ν΄μ£Όμ΄μΌ ν΄μ.
μ¦, μλ°μμ μ 곡λλ λͺ¨λ μλ£ν νμ
λ€μ΄ μ΄λ κ² λνΌ ν΄λμ€ νμ
μΌλ‘ μ΄μ©ν μ μλ κ±°μμ.
π¦ Constant
μ΄λ²μ μ½νλ¦°μ Constant(μμ)μ λν΄ μμλ³Όκ²μ.
μ½νλ¦°μμ μμλ val(Value) μ΄λΌλ ν€μλλ‘ μ μΈν΄μΌν΄μ.
λ³μμ κ²½μ° κ°μ μ¬ λμ
νμ¬ λ€μ κ°μ λ΄μ μ μλ κ·Έλ¦μ΄μ§λ§, μμμ κ²½μ° κ°μ μ¬ λμ
ν μ μλ κ·Έλ¦μ΄μμ.
κ·Έλμ μμ κ°μ΄ Compile(μ»΄νμΌ) κ³Όμ μμ Errorκ° λλκ±Έ μ μ μμ΄μ.
μλ°μμλ μμλ‘ μ μΈν λ, final ν€μλλ₯Ό μ¬μ©νκ³ , JavaScript, TypeScript κ°μ κ²½μ°μλ constent ν€μλλ₯Ό μ¬μ©ν΄μ.
π¦ Top Level Constent Const
μ΄λ²μλ constμ λν΄ μμλ³Όκ²μ.
constλ μ»΄νμΌ νμ μμμμ.
μλ°μμλ ν΄λμ€ μ μΈμ΄ νμνκ³ , κ·Έ μμ Main(λ©μΈ) Method(λ©μλ) μμμ μ¬λ¬κ°μ§ μ½λ©μ ν΄μ£Όμ΄μΌ νμ΄μ.
μ¦, ν΄λμ€ μμ μ μΈλ ν¨μ λ©μλλ§μ μ¬μ©ν μ μμμ΄μ.
μ½νλ¦°μ λ©μλκ° μλ ν¨μλ μ μΈν΄μ μ¬μ©ν μ μμ΄μ.
μ¦, ν΄λμ€λ₯Ό κΌ λ§λ€μ΄μ κ·Έ μμ ν¨μλ₯Ό μ μΈν νμκ° μλ€λ κ²μ΄μμ.
μμ κ°μ΄ num μ΄λΌλ μμν λ³μλ λ©μΈ λ©μλ λ°μ μ μΈν κ±Έ μ μ μμ΄μ.
μ΄λ₯Ό Top(ν) Level(λ 벨) Constent(μμ)λΌκ³ λΆλ¬μ.
μλ°μ λΉκ΅νμλ©΄ Final μμ λ³μμ κ°μ λλμ΄μμ.
μ΄ λ, const ν€μλλ₯Ό λΆν μ»΄νμΌ νμ μμλ‘ λ§λ€μ΄μ€ μ μμ΄μ.
μ΄λ κ² μ»΄νμΌ νμ μμλ‘ μ μΈνκ² λλ©΄ λ©μΈ λ©μλλ³΄λ€ μ°μ μ μΌλ‘ μ»΄νμΌμ΄ λκ² λκ³ ,
μ΄ κ°μ μ¬μ©νκ² λλ©΄ μ±λ₯μ μ΄μ μ΄ μλ μ₯μ μ΄ μμ΄μ.
π¦ Type conversion
μ΄λ²μλ Type conversion(ν λ³ν)μ λν΄ κ³΅λΆν΄ λ³Όκ²μ.
μμ κ°μ΄ Integer(μ μ) iμ Long x λ³μκ° μμ λ, μλ°μλ€λ©΄ x λ³μμ i λ³μκ° λμ
μ΄ λ κ±°μμ.
νμ§λ§, μ½νλ¦°μ κ²½μ° μ°μ κ°μ΄ νμ
λΆμΌμΉ μλ¬κ° λλ κ±Έ μ μ μμ΄μ.
νμ
μ΄ λ€λ₯΄λ©΄ λμ
ν μ μμ΄μ.
κ·Έλμ μμ κ°μ΄ toLong()μ μ μΈν΄ Type Casting(μΊμ€ν
)μ λ°μ μμΌμ ν λ³νμ ν΄μ€μΌ ν΄μ.
μμ κ°μ΄ toLong()μ Integer κ°μ Long κ°μΌλ‘ λ°κΏμ£Όλ μΉκ΅¬μμ.
μ°Έκ³ λ‘ μλ°μ²λΌ μ΄λ κ² ν λ³νμ ν μ μμ΄μ.
λ°λλ‘ i λ³μμ xλ₯Ό λμ
νλ €κ³ ν΄λ μμ κ°μ΄ ν λ³νμ ν΄μ€μΌ νλκ±Έ μ μ μμ΄μ.
λ°λ‘ μ΄λ κ² λ§μ΄μμ.
μμ κ°μ΄ λ¬Έμμ΄ λ³μ nameμ μ μν λ³μ iλ₯Ό λμ
νλ €λ©΄ μ΄λ»κ² ν΄μΌ ν κΉμ?
μ΄λ κ² toString()μ νΈμΆνλ©΄ ν λ³ν ν μ μμ΄μ.
λ°λλ‘ λ¬Έμμ΄ 10μ μ μ 10μΌλ‘ λ°κΏ λλ μμ κ°μ΄ toInt()λ₯Ό μ΄μ©νλ©΄ λΌμ.
π¦ String
μ΄λ²μ μ½νλ¦°μ String(λ¬Έμμ΄)μ λν΄ κ³΅λΆν΄ λ³Όκ²μ.
μ½νλ¦°μ toUpperCase()λ deprecated λμμ΄μ.
κ·Έλμ μμ κ°μ΄ uppercase()λ₯Ό μ΄μ©ν΄ μ£Όλ©΄ λΌμ.
μμ κ°μ΄ λ¬Έμμ΄μ Index numberλ₯Ό μ΄μ©ν΄μ λ¬Έμλ₯Ό κ°μ Έμ¬ μλ μμ΄μ.
μ½νλ¦°λ μλ°μ²λΌ μμ κ°μ΄ λ¬Έμμ΄μ κ²°ν©ν΄ μ€μ μμ΄μ.
κ·Έλ°λ° μ½νλ¦°μ String Interpolation κΈ°λ₯μ μ 곡νκ³ μμ΄μ.
μμ κ°μ΄ $ νμμ ν¨κ» λ³μλͺ
μ λ£μ΄μλ μ¬μ©ν μ μμ΄μ.
μ΄λ JavaScriptλ, TypeScriptμμ μ 곡νλ λ°©λ²κ³Ό μ μ¬ν΄μ.
let name = "μ£Όλ"
console.log(`μ λ ITλ₯Ό μ¬λνλ ${name} μ
λλ€.`)
μ΄λ κ² μ¬μ©νλ λ°©λ²κ³Ό μ μ¬ν΄μ.
λ§μ½ name λ³μμ μ
λλ€λ₯Ό λΆμ΄λ©΄ μ΄λ»κ² λ κΉμ?
μμ κ°μ΄ μ΄λκΉμ§κ° λ³μλͺ
μΈμ§λ₯Ό μ μ μκΈ° λλ¬Έμ λ¬Έμ κ° λ°μν΄μ.
μ΄λ΄ λ μμ κ°μ΄ λ³μλͺ
μ μ¬κΈ°κΉμ§μΌ! λΌκ³ μλ €μ£Όλ©΄ λΌμ.
π¦ Max, Min
μ΄λ²μλ μλ°μμ μλ₯Ό λ€λ£¨λ κΈ°λ₯ μ€μ Math Class λ±μμ μ 곡νλ κΈ°λ₯λ€μ λν΄ μμλ³Όκ²μ.
μ΄λ κ² μμ λ, iμ j μ€μ ν° κ°μ μ»κ³ μΆμΌλ©΄ μ΄λ»κ² ν μ μμκΉμ?
μμ κ°μ΄ max()λ₯Ό μ¬μ©ν΄μ μ μν μΈμκ° λ κ°λ₯Ό λ£μ΄μ£Όλ©΄ Math.javaμ max()κ° μΌνμ°μ°μλ₯Ό μ΄μ©ν΄ λ§€κ° λ³μκ°μ λΉκ΅νκ³ , ν° κ²μ λ°νν΄ μ£Όλκ±Έ μ μ μμ΄μ.
π¦ Random
μ΄λ²μλ Randomμ λν΄ μμλ³Όκ²μ.
μμ κ°μ΄ μ½νλ¦°μ Randomμ μ΄μ©ν΄μ μ μλ‘ λ random κ°μ μ»μ μ μμ΄μ.
μμ κ°μ΄ 0 ~ 100κΉμ§λΌκ³ λ²μλ₯Ό μ§μ ν΄ μ£Όλ©΄ ν΄λΉ λ²μ λ΄μμ random κ°μ μ»μ μ μμ΄μ.
μ°Έκ³ λ‘ from μΈμλ inclusive λ°λμ ν¬ν¨νλ κ°μ΄ λκ³ , until μΈμλ exclusive ν¬ν¨λμ§ μλ κ°μ΄μμ.
μ¦, 0 ~ 100μ΄λΌκ³ μΈμκ°μ λ£μ΄μ£Όκ² λλ©΄ 0 ~ 99 μμμμ random κ°μ΄ λ§λ€μ΄μ Έ λμ€κ² λλ΅λλ€.
Dubleμ μ΄μ©ν΄μλ random κ°μ λ§λ€ μ μμ΄μ.
μμ κ°μ΄ μΈμκ°μ λ£μ΄ 쀬μΌλ 0.0 ~ 0.09κΉμ§ λ§λ€μ΄μ§κ² λ€μ.
π¦ Input Keyboard
μ΄λ²μ Keyboard(ν€λ³΄λ) κ°μ λ°μμ€λ λ°©λ²μ λν΄ μμλ³Όκ²μ.
μ½νλ¦°μ μλ°μ νΈνμ΄ κ°λ₯νκΈ° λλ¬Έμ μλ°μμ μ¬μ©νλ Scannerλ₯Ό μ¬μ©ν μλ μμ΄μ.
Java(μλ°)μ Scannerλ₯Ό μ¬μ©ν κ²½μ° μμ κ°μ΄ μ μΈν μ μλλ°, νΉμ΄ν μ μ΄ inμ `(grave accent - μ΅μ λΆνΈ)λ‘ κ°μΌ κ±Έ λ³Ό μ μμ΄μ.
μ½νλ¦°μμλ in ν€μλλ₯Ό μ¬μ©ν μ μκΈ° λλ¬ΈμΈλ°μ. μ΄λ κ² μ¬μ©ν μ μλ ν€μλλ μ΅μ λΆνΈλ‘ κ°μΈ μ¬μ©ν΄μ£Όμ΄μΌ ν΄μ.
κ·Έλ¦¬κ³ , μμ κ°μ΄ μ«μ νΉμ λ¬Έμμ΄ λ±μ μ
λ ₯ λ°μ μ μμ΄μ.
π¦ 쑰건문
μ΄λ²μλ μ½νλ¦°μ 쑰건문μ λν΄ μμλ³Όκ²μ.
μ΅μ΄ ifλ¬Έ λΆν° μμλ³Όκ²μ.
μλ°μ λμΌνκ² if, else if, elseλ₯Ό μ¬μ©ν μ μμ΄μ.
κ·Όλ° μ½νλ¦°μμλ when λ¬Έμ΄λΌλκ² μμ΄μ.
λ°λ‘ μ΄λ κ² μ¬μ©ν μ μμ΄μ.
whenμ μλ°μ switch λ¬Έκ³Ό λΉμ·νμ§λ§, ν¨μ¬ κ°λ ₯ν 쑰건λ€μ μ§μ ν μ μμ΄μ.
μ¦, μ½νλ¦°μμλ switch λ¬Έ λμ when λ¬Έμ μ¬μ©ν΄μ.
whenμ μ΄ν΄λ³΄λ©΄ 5, 7, 9λ²μ§Έ μ€μ 쑰건λ€μ νλμ© λ£μ΄μ€ μ μλ κ±Έ λ³Ό μ μμ΄μ.
λνλ νΉμ§μ μ λΆκΈ°λ¬Έμ κ²°κ³Όλ₯Ό λ³μμ λ΄μμλ μλ€λ κ±°μμ.
μμ κ°μ΄ μ½νλ¦°μμ λΆκΈ°λ¬Έμ νλμ μμ΄λΌκ³ λ³Ό μ μμ΄μ.
μλ°λ λΆκΈ°λ¬Έ κ²°κ³Όλ₯Ό λ³μμ λ΄μ μ μμ§λ§, μ½νλ¦°μ μμΌλ‘ μ·¨κΈμ΄ λκΈ° λλ¬Έμ λ³μμ κ°μ λ°μ μ μμ΄μ.
μ΄λ²μλ μΌνμ°μ°μμ λν΄ μμλ³Όκ²μ.
λκ° μλ°μ μΌνμ°μ°μλ³΄λ€ ν¨μ¬ μ§κ΄μ μΌλ‘ μμλ³Ό μ μλκ±Έ μ μ μμ΄μ.
π¦ Array
μ΄λ²μλ Array(λ°°μ΄)μ λν΄μ μμλ³Όκ²μ.
λ°°μ΄μ arrayOf()λ₯Ό μ΄μ©ν΄μ λ§λ€ μ μκ³ , μμλ₯Ό μ§μ λ£μ΄μ€ μ μμ΄μ.
μλ°μμλ lengthλ‘ λ°°μ΄μ ν¬κΈ°λ₯Ό μ μ μμμ§λ§, μ½νλ¦°μ sizeλ‘ μ μ μκ³ , setμ΄λ, 5λ²μ§Έ μ€κ³Ό κ°μ΄ νΉμ Indexλ²μ§Έμ μμλ₯Ό λ£μ΄μ€ μ μμ΄μ.
π¦ try - catch
Exception μ²λ¦¬λ μλ°μ λμΌν΄μ.
μ΄λ°μμΌλ‘ Index numberκ° 2κΉμ§ μλ λ°°μ΄μμ 4λ²μ§Έ λ°°μ΄μ κ°μ κ°μ Έμ€λΌκ³ νλ©΄ Out of Bounds Exceptionμ΄ ν°μ§κ±°μμ.
π¦ List
μ΄λ²μλ List(리μ€νΈ)μ λν΄ κ³΅λΆν΄ λ³Όκ²μ.
μμ κ°μ΄ listOf()λ₯Ό μ΄μ©ν΄μ Listλ₯Ό λ§λ€κ² λλ©΄ add()λ₯Ό μ¬μ©ν μ μμ΄μ.
μμν 리μ€νΈ λ³μλ‘ λ§λ€μ΄μ§κΈ° λλ¬Έμ΄μμ.
μμ κ°μ΄ μλ‘μ΄ κ°μ λ£κ³ μΆλ€λ©΄ mutableListOf()λ₯Ό μ¬μ©ν΄μ£Όμ΄μΌ ν΄μ.
μ΄λ κ² λ¦¬μ€νΈ μμλ₯Ό μμ ν μλ μμ΄μ.
μ¦, μλ°μ Array Listμ λμΌνλ€κ³ μκ°νλ©΄ λΌμ.
μ°Έκ³ λ‘ mutableListOfλ μ λ€λ¦ νμ
μ΄μμ.
νμ§λ§ μλ΅μ΄ κ°λ₯νλ°, μ΄λ νμ
μΆλ‘ μ νκΈ° λλ¬Έμ΄μμ.
μλλ μμ κ°μ΄ μ¨μ€μΌ νμ§λ§, λ€ μλ΅νλ€κ³ 보면 λΌμ.
π¦ λ°λ³΅λ¬Έ
μμ μ½λλ itemListλΌλ List λ³μμ κ°μ μλ°μ ν₯μλ for(for-each)λ¬Έκ³Ό λμΌν λ°©μμΌλ‘ λ°λ³΅λ¬Έμ μ¬μ©ν μ μμ΄μ.
μ΄λ κ² for-each λ¬ΈμΌλ‘ λ°κΏμ μ¬μ©ν μλ μμ΄μ.
Index numberλ₯Ό μ΄μ©ν λ°λ³΅λ¬Έμ μμ κ°μ΄ μ¬μ©ν μ μμ΄μ.
μ°Έκ³ λ‘ μμ κ°μ΄ νλ©΄ 0 ~ itemList ν¬κΈ°μμ νλλ₯Ό λΊ κ°κΉμ§λ₯Ό ν¬ν¨ν μκΉμ§ λ°λ³΅μ ν΄μ.
κ·Έλ°λ°, μ΄λ κ² νκ² λλ©΄ λκ° μ μμ΄ μλμ κ·Έλ°μ§ 볡μ‘ν΄μ.
while λ¬Έμ μλ°μ μμ ν λκ°μμ.
μ°Έκ³ λ‘ μλ°μ λ§μ°¬κ°μ§λ‘ breakμ continueλ λμΌνκ² μ§μνκ³ μμ΄μ.
π¦ Null safety
μ½νλ¦°μ μ¬μ©νλ μ΄μ λ μ¬λ¬κ°μ§κ° μκ² μ§λ§, λνμ μΌλ‘ Null safetyν νΉμ§μ΄ μκΈ° λλ¬Έμ΄μμ.
λλ체 μ΄λ»κ² μ½νλ¦°μ Null safety νλ€λ κ±ΈκΉμ?
μμ κ°μ΄ name λ³μμ Nullμ λ£κ² λ€κ³ ν΄μ£Όλ©΄ μ΄λ€ μλ£ν νμ
μ NullμΈμ§ μ μ μμ΄μ.
κ·Έλμ μμ κ°μ΄ μλ£ν νμ
μ λ¬Έμμ΄λ‘ μ§μ ν λ€ Nullμ λμ
νλ €κ³ νλ©΄ κ°μΌλ‘
λ¬Έμμ΄ νμ
μ Nullμ λ£μ μ μλ€κ³ λμ€λ κ±Έ μ μ μμ΄μ.
μλνλ©΄ μ½νλ¦°μμλ Nullμ λ£μ μ μλ νμ
μ νμ
λ€μ ?(λ¬Όμν) κΈ°νΈλ₯Ό λ£μ΄μ€μΌλ§
Nullμ λμ
ν μ μκΈ° λλ¬Έμ΄μμ.
μ΄κ±΄ TypeScriptλ λκ°μ΄ μ 곡νλ κΈ°λ₯μ΄μμ.
μ΄μ κ°λ λμ
ν μ μκ³ , Nullλ λ€μ λμ
ν μ μκ² λμμ΄μ.
μμ κ°μ΄ name2λΌλ λ¬Έμμ΄ λ³μμ λ¬Όμνλ₯Ό λ£μ§ μκ³ , 곡백κ°μ λ£μ΄ μ΄κΈ°ν ν λ€
name2μ name κ°μ λ£μΌλ €κ³ νλ©΄ νμ
μ΄ μΌμΉνμ§ μλλ€λ λ¬Έμ κ° λ°μνλ κ±Έ μ μ μμ΄μ.
μ΄λ λ¬Όμνκ° λΆμ μλ£νκ³Ό λΆμ§ μμ μλ£νμ λ³κ°λ‘ μ·¨κΈνκΈ° λλ¬Έμ΄μμ.
κ·Έλμ μμ κ°μ΄ νκ³ μΆμ λ name λ³μμ λν Null Checkκ° μ νλμ΄μΌ ν΄μ.
λ°λ‘ μ΄λ°μμΌλ‘ Null Checkλ₯Ό κΌ ν΄μ€μΌ ν΄μ.
μ΄λ κ² Null Checkλ₯Ό νκ³ λ λ€ Nullμ΄ μλλΌλ©΄ name λ³μμ μλ£νμ΄ String TypeμΌλ‘ λ³ννκ² λΌμ.
κ·Έλμ name2 λ³μμ κ°μ μλ£ν νμ
μ΄ λμκΈ° λλ¬Έμ λμ
ν μ μκ² λλ΅λλ€.
λλ μμ κ°μ΄ !(λλν)λ₯Ό λ κ° λΆνμ£Όλ©΄ λ¬Όμνλ₯Ό κ°μ λ‘ λΌμ΄μ€ μ μμ΄μ.
νμ§λ§, μμ κ°μ΄ νλ©΄ κ°λ°μκ° μμλ‘ Null μ΄ μλλΌκ³ μ μΈνκΈ° λλ¬Έμ κ°λ°μκ° μ±
μμ μ§λ νμμ΄ λμ΄ λ²λ €μ.
κ·Έλμ μ¬μ©νμ§ μλ κ±Έ μΆμ²ν΄μ.
λ λ€λ₯Έ λ°©λ²μΌλ‘ ifλ¬ΈμΌλ‘ Null Check νλ λ°©λ²λ μμ§λ§,
μ΄λ° νμμΌλ‘λ μ¬μ©ν μ μλλ°, μ΄ μλ―Έλ name λ³μκ° Nullμ΄ μλλΌλ©΄ {} μμ λ΄μ©μ μ€νν΄λΌ λΌλ λͺ
λ Ήμ΄μμ.
κ·Έ μμμλ itμ΄λΌλ κ±Έλ‘ μ κ·Όν μ μκ² λΌμ.
μ΄λ κ² νλ©΄ ifλ¬Έμ ν΅ν΄ Null Checkν κ²κ³Ό λμΌν ν¨κ³Όλ₯Ό κ°μ μ μμ΄μ.
μμ κ°μ΄ name λ³μκ° Nullμ΄κΈ° λλ¬Έμ 9λ²μ§Έ μ€μ λ€μ΄κ°μ§ λͺ»νκ³ ,
name2 λ³μμ μ΄κΈ°ν κ°μ΄ κ·Έλλ‘ μΆλ ₯λ κ±Έ λ³Ό μ μμ΄μ.
π¦ Function & Mathod
μ΄λ²μ Function(ν¨μ) νΉμ Method(λ©μλ)μ λν΄ μμλ³Όκ²μ.
μ°Έκ³ λ‘ μ΄ λμ μ°¨μ΄μ μ Class μμ μλ? λ°μ μλ μ°¨μ΄μμ. Class μμ μμΌλ©΄ λ©μλλΌκ³ λΆλ₯΄κ³ , λ°μ μμΌλ©΄ ν¨μλΌκ³ λΆλ₯Έλ΅λλ€.
μμ κ°μ΄ sumμ΄λΌλ ν¨μλ₯Ό μ μν΄ μ£Όμλλ°, μ μν aμ μ μν bλ₯Ό λ§€κ° λ³μλ‘ λ°λ ν¨μμ΄κ³ ,
λ°ν νμ
μ μ μ νμ
μ λ°ννλ κ±Έ μ μ μμ΄μ.
μλ°λμ μκΈ΄κ² νλ¦°λ° μ΄ λͺ¨μ΅μ TypeScriptμ μ μ¬ν΄μ.
μ°Έκ³ λ‘ Class λ°μ μ μΈν ν¨μλ€μ Top Level Function(ν λ 벨 ν¨μ)λΌκ³ λΆλ₯΄λλ°,
μ΄κ²μ μ΄λ Classμμλ νΈμΆν μ μλ ν¨μκ° λμ΄λ²λ €μ.
κ·Έλ¦¬κ³ μ½νλ¦°μ Body μ°μ°μ΄ ν μ€μΌ κ²½μ° λ§€μ° κ°λ¨νκ² μ€μ¬ λ²λ¦΄ μ μμ΄μ.
μ΄λ κ² κ°λ¨νκ² ν μ€λ‘ μμ±ν΄ μ€ μ μμ΄μ.
κ·Έλ¦¬κ³ , λ°ν νμ
λ μλ΅ν΄ μ€ μ μμ΄μ.
μλνλ©΄ a μ bλ₯Ό λν κ°μ μ΄μ°¨νΌ μ μνμ΄ λ κ²μ΄κΈ° λλ¬Έμ (λ§€κ° λ³μ νμ
μ΄ λ λ€ μ μν)
νμ
μΆλ‘ μ΄ κ°λ₯νκΈ° λλ¬Έμ΄μμ.
λ€λ§ λ§€κ° λ³μμ μλ£ν νμ
μ λ°λμ μ μΈν΄ μ£Όμ΄μΌ ν΄μ.
μ κ·Έλ¬λ©΄ λ°ν νμ
μ λν νμ
μΆλ‘ μ΄ λΆκ°λ₯νκΈ° λλ¬Έμ΄μμ.
λ§μ½ sum()μ μΈμκ°μ νλ λ λλ €μ£Όκ³ μΆλ€λ©΄ μ΄λ»κ² ν΄μΌ ν κΉμ?
μλ°μμλ Overloadλ₯Ό ν΅ν΄ μΈμκ°μ νλ λ λ°κ² λ€κ³ ν΄μ€¬μΌλ©΄ λ κ±°μμ.
νμ§λ§ μ½νλ¦°μμλ μμ κ°μ΄ λ§€κ° λ³μμ Default Value(κΈ°λ³Έ κ°)μ μ μΈν΄ μ£Όλ©΄
κ΅³μ΄ μΈμκ°μΌλ‘ νλ λ λ£μ§ μμλ μ¬μ©ν μ μμ΄μ.
μΈμκ°μ μΈ κ°λ₯Ό λ€ λ£λλ€λ©΄ λ§€κ° λ³μ κΈ°λ³Έ κ°μ 무μκ° λ κ±°μμ.
μ΄λ κ² μ½νλ¦°μ Overload κΈ°λ₯μ ν¨μλ,
λ©μλλ₯Ό μ¬λ¬ κ° λ§λλ κ²μ΄ μλλΌ λ§€κ° λ³μλ₯Ό μ΄μ©ν΄μ μ²λ¦¬ν΄ μ€ μ μλ κ±°μμ.
κ·Έλ¦¬κ³ , μΈμκ°μΌλ‘ λ€μ΄κ°λ κ°μ΄ μ΄λ λ§€κ° λ³μμ Mapping λκ² ν κ²μΈμ§λ₯Ό λͺ
μμ μΌλ‘ μ μΈν΄ μ€ μλ μμ΄μ.
μλ°μμλ μΈμ κ°μ μμλ₯Ό ν리면 λ¬Έμ κ° λ°μνλλ°, μ½νλ¦°μ μμ κ°μ΄ λͺ
μμ μΌλ‘ μΈμκ°μ μ§μ ν μ μκΈ° λλ¬Έμ
λͺ
μμ μΌλ‘ μ μΈνμ λλ μμλ₯Ό λ§μΆ νμλ μμ΄μ.
π¦ Class
μ΄λ²μλ μ½νλ¦°μ Class(ν΄λμ€) κ°λ
μ λν΄ μμλ³Όκ²μ.
μμ κ°μ΄ Person μ΄λΌλ ν΄λμ€λ₯Ό λ§λ€κ³ , Member Variable(λ©€λ² λ³μ)λ₯Ό μ μΈν΄ μ£Όμλλ°, μ΄λ μλ°μ€λ¬μ΄ λ°©μμΈ κ²μ μ μ μμ΄μ.
μ½νλ¦°μ μμ κ°μ΄ Property(νλ‘νΌν°)λ₯Ό λ€ μ μΈνλ κ²μ΄ μλλΌ κΈ°λ³Έ μμ±μλ₯Ό μ΄μ©νμ¬ μ²λ¦¬ν μ μλλ°,
μμ κ°μ΄ λ§μΉ ν¨μμμ λ§€κ° λ³μλ₯Ό μ μΈνλ― κΈ°λ³Έ μμ±μμ λ°λ‘ λ©€λ² λ³μλ₯Ό μ μΈν΄μ μ¬μ©ν μ μμ΄μ.
μ΄ λ°©μμ TypeScriptλ μ μ¬νκ² μ¬μ©νλ λ°©λ²μΈλ°, Nest.tsλ‘ DIν λ μ΄λ°μμΌλ‘ μμ±μμ λ©€λ² λ³μλ₯Ό λ°λ‘ μ μΈν΄ λ²λ¦°λ΅λλ€.
μ΄λ κ² μ¬μ©ν μ μλλ°, μ¬κΈ°μ μ£Όλͺ©ν΄μΌ νλ 건 8λ²μ§Έμ 9λ²μ§Έ μ€μ λ³μ ν€μλκ° κ°κ° λ€λ₯΄λ€λ μ μ΄μμ.
name λ³μλ val (μμ λΆκ°)μ΄κ³ , age λ³μλ var(μμ κ°λ₯)μΌλ‘ μ μΈλ κ±Έ λ³Ό μ μμ΄μ.
λ°λΌμ μμ κ°μ΄ μμ ν μ μλ€λ κ±Έ μ μ μμ΄μ.
νμ§λ§, age λ³μλ μμ μ΄ κ°λ₯νκ±Έ μ μ μμ΄μ.
λ νλ νΉμ§μ μΈ κ²μ 2λ²μ§Έ μ€μμ Person κ°μ²΄λ₯Ό μμ±νλλ° new μ°μ°μλ₯Ό μ¬μ©νμ§ μμλ€λ λΆλΆμ΄μμ.
κ·Έλ¦¬κ³ λ νλ νΉμ§μ μλ°μ κ°μ΄ getter, setterλ₯Ό λ³λλ‘ λ§λ€ νμ νμ μμ΄
val, var ν€μλλ₯Ό μ μ νκ² μ¬μ©ν΄μ getter, setter ν¨κ³Όλ₯Ό μ»μ μ μμ΄μ.
κ·Έλ κΈ° λλ¬Έμ μ½νλ§(μ½νλ¦° + μ€νλ§ λΆνΈ)μμλ Lombok(둬볡)μ μ¬μ©νμ§ μμμ.
π¦ Data Class
μ΄λ²μλ μ½νλ¦°μ Data Class(λ°μ΄ν° ν΄λμ€) κ°λ
μ λν΄ μμλ³Όκ²μ.
λ°μ΄ν° ν΄λμ€λ₯Ό μ¬μ©νλ κ²½μ°λ μ΄λ° κ²½μ°μ μ¬μ©ν μ μμ΄μ. λ§μ½ μμ±μλ₯Ό ν΅ν΄ μ΄λ€ κ°μ μ λ¬νλ, μΈλΆμλ ν΄λΉ κ°μ λ
ΈμΆ μν€κ³ μΆμ§ μμ λμ΄λ©°, getter κΈ°λ₯ λν μ 곡νκ³ μΆμ§ μμ λμμ.
μ΄λ΄ λ λ³μ μμ μλ°μ κ°μ΄ μ κ·Ό μ μ΄μ ν€μλμΈ private μ΄λΌλ ν€μλλ₯Ό λΆνμ£Όλ©΄ λΌμ.
π‘ μ κ·Ό μ μ΄μλ?
"μ κ·Ό μ μ΄μ"λ νλ‘κ·Έλλ° μΈμ΄μμ λ³μ, λ©μλ, ν΄λμ€ λ±μ μ κ·Ό κΆνμ μ μ΄νλ λ° μ¬μ©λλ μ©μ΄μ λλ€.
μλ°(Java), C++ λ±μ μΈμ΄μμ λ§μ΄ μ¬μ©λ©λλ€.
μ΄ μ©μ΄λ κ° μΈμ΄μμ μ‘°κΈμ© λ€λ₯΄κ² ν΄μλ μ μμ§λ§, μΌλ°μ μΌλ‘λ λ€μκ³Ό κ°μ κ°λ μ ν¬ν¨ν©λλ€.
- public (곡κ°): μ΄λ€ ν΄λμ€λ μ κ·Όν μ μλ κ°μ₯ λμ λ²μμ μ μ΄μμ λλ€.
- protected (보νΈ): κ°μ ν¨ν€μ§μ μν ν΄λμ€μ ν΄λΉ ν΄λμ€λ₯Ό μμλ°μ ν΄λμ€μμλ§ μ κ·Όν μ μμ΅λλ€.
- default (μ무 μ μ΄μ μμ λλ ν¨ν€μ§ μ μ΄μ): κ°μ ν¨ν€μ§ λ΄μμλ§ μ κ·Όμ΄ κ°λ₯ν©λλ€.
- private (λΉκ³΅κ°): κ°μ ν΄λμ€ λ΄μμλ§ μ κ·Όμ΄ κ°λ₯νλ©°, μΈλΆ ν΄λμ€λ κ°μ²΄μμλ μ κ·Όν μ μμ΅λλ€.
μ΄λ¬ν μ κ·Ό μ μ΄μλ₯Ό μ¬μ©νμ¬ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μμ μ 보 μλ λ° μΊ‘μνλ₯Ό ꡬνν μ μμ΅λλ€.
μ΄λ κ² private ν€μλλ₯Ό λΆμ΄κ² λλ©΄ μΈλΆμμ μ κ·Όνμ§ λͺ»νλ κ±Έ μ μ μκ³ ,
μ΄λ₯Ό ν΅ν΄ κΈ°λ³Έ μ κ·Ό μ μ΄μκ° public μ΄λΌλ κ²λ μ μ μμ΄μ.
π¦ Getter, Setter
μ½νλ¦°μμ getter(κ²ν°)μ setter(μΈν°)λ μ΄λ»κ² μ¬μ©ν μ μμκΉμ?
μμ λ₯Ό μν΄ λλ€λ₯Έ Johnμ΄λΌλ κ°μ²΄λ₯Ό λ§λ€κ±°μμ.
λ κ°μ²΄λ μ΄λ¦λ λμ΄λ λκ°μ μνμ΄μ§λ§, λ€λ₯Έ κ°μ²΄μμ.
λ κ°μ²΄λ₯Ό λμΌμ±μΌλ‘ λΉκ΅ν΄ λ³΄κ³ κ²°κ³Όλ₯Ό μΆλ ₯ν΄ λ³΄μμ΄μ.
κ²°κ³Όλ λ€λ₯Έ κ²μ μ μ μμ΄μ.
μ¦, λ€λ₯Έ Memory μ£Όμμ λμΌν κ°μ΄ μ μ₯λμ΄ μλ€λ κ±Έ μ μ μμ΄μ.
π‘ λλ±μ± λΉκ΅μ λμΌμ± λΉκ΅
κ°μ²΄ μ§ν₯ μΈμ΄μμλ λλ±μ±(Identity)κ³Ό λμΌμ±(Equality) λΉκ΅λΌλ κ°λ μ΄ λμ΅λλ€.
λ¨Όμ λμΌμ± λΉκ΅λ? λ κ°μ²΄κ° μμ ν κ°μ κ²½μ°λ₯Ό μ΄μΌκΈ° νλλ°, μ½κ² μ΄μΌκΈ°νλ©΄ Memoryμ μ μ₯λ κ°μ²΄ λ κ°μ²΄κ° λͺ¨λ λμΌν Memory μ£Όμμ μ μ₯λμ΄ μλμ§λ₯Ό λΉκ΅νλ κ²μ λλ€.
μ΄ λ, 쑰건μ μμ == μ°μ°μλ₯Ό ν΅ν΄ λΉκ΅ ν μ μκ³ , int, doubleκ³Ό κ°μ primitive(μμν) νμ μ κ°μ²΄λ₯Ό κ°μ§ μκΈ° λλ¬Έμ λλ±μ± λΉκ΅λ₯Ό νμ λ, κ°μ΄ κ°μ κ²½μ° trueκ° λ°νλ©λλ€.
κ·Έλ λ€λ©΄ λλ±μ± λΉκ΅λ 무μμΌκΉμ? λλ±μ±μ λ κ°μ²΄μ μ μ₯λ κ°μ΄ κ°μ κ²½μ°λ₯Ό μλ―Έν©λλ€.
μ¦, λ³μκ° μ°Έμ‘°νκ³ μλ Memory μ£Όμκ° μλ‘ λ€λ₯΄λλΌλ ν΄λΉ λ΄μ©μ΄ κ°μΌλ©΄ λ λ³μλ λλ±νλ€λΌκ³ μ΄μΌκΈ° ν μ μμ΄μ.
Java(μλ°)μμλ λλ±μ± λΉκ΅λ₯Ό μν΄ equals()λ₯Ό μ΄μ©νκ² λ©λλ€.
λ§μ½ μ΄λ¦μ΄λ, λμ΄κ° λμΌνλ©΄ κ°μ μ¬λμΌλ‘ μ²λ¦¬νκ³ μΆμ λ μ΄λ»κ² ν μ μμκΉμ?
λ§μ½ μλ°μλ€λ©΄ equals()λ₯Ό μ΄μ©ν΄μ λλ±μ± λΉκ΅λ₯Ό μ΄μ©νκ³ , hashCode() Overrideλ₯Ό ν΅ν΄ ꡬνν μ μμ κ±°μμ.
λ¬Όλ‘ μ½νλ¦°λ μμ κ°μ΄ equals()μ hashCode()λ₯Ό Overrideν΄μ μ΄μ©ν μλ μμ΄μ.
ν.μ§.λ§ μ½νλ¦°μ΄λΌλ©΄ λκ° λ€λ₯Έ κ² μκ² μ£ ?
μ΄λ κ² data classλ‘ λͺ
μν΄ μ£Όλ©΄
μμ κ°μ΄ κ°μ Memory μ£Όμμ κ°μ²΄κ° μ μ₯λκ³ , λ κ°μ²΄λ λμΌν κ°μ²΄μμ μ μ μμ΄μ.
κ·Έλ¦¬κ³ μΆλ ₯ν λ, μμμλ κ°μ²΄ μΆλ ₯μΌλ‘ Memory μ£Όμκ° μΆλ ₯λ λ°λ©΄
μ΄λ²μλ κ°μ²΄ μμ κ°κΉμ§ μΆλ ₯λλ κ±Έ νμΈν μ μμ΄μ.
μ΄λ₯Ό ν΅ν΄ toString() Overrideλ νμ μμ΄μ.
λ§μ½ μΌλ° ν΄λμ€μμ μμ±μμ λ§€κ° λ³μλ‘ κ°μ λ°κ³ λλλ κ²μ΄ μλ
μ΄λ€ Logic(λ‘μ§)μ λ£μ΄ μ£Όκ³ μΆλ€λ©΄ μ΄λ»κ² ν΄μΌ ν κΉμ?
μ΄λ κ² init {}μ μ΄μ©ν΄μ λ‘μ§μ λ£μ΄μ£Όλ©΄ μ²λ¦¬ν μ μμ΄μ.
μμ κ°μ΄ Person ν΄λμ€μ hobbyλΌλ λ©€λ² λ³μλ₯Ό λ§λ€κ³ , changeHobby()λ₯Ό ν΅ν΄ ν΄λΉ μ·¨λ―Έλ₯Ό λ³κ²½νλ λ©μλλ₯Ό λ§λ€μμ λ, μΈλΆμμ μ·¨λ―Έλ₯Ό λ°κΏ μ μμ΄μ.
μμ κ°μ΄ main()μμ john κ°μ²΄μ hobbyλ₯Ό λ°κΏ μ μλ κ±Έ μ μ μμ΄μ.
λ§μ½ μ΄λ κ² λ°μμ μμλ‘ μ²λ¦¬λλ κ±Έ λ§μΌλ €λ©΄ μ΄λ»κ² ν μ μμκΉμ?
νμ¬ hobby λ³μλ μΈλΆμμ μ κ·Όμ΄ κ°λ₯ν μνμμ.
κ·Έλ°λ° μμ κ°μ΄ private setμ λΆνμ€ λ²λ¦¬λ©΄
μΈλΆμμ μ κ·Όνμ§ λͺ»νκ² setter κΈ°λ₯μ λ§μλ²λ¦° κ±Έ μ μ μμ΄μ.
κ²ν°λ₯Ό μ΄μ©νκ³ μΆλ€λ©΄ μ 19λ²μ§Έ μ€κ³Ό κ°μ΄ μ΄μ©ν μ μλλ°,
λ³μμ μ κ·ΌνκΈ° μν΄μλ $fieldλ₯Ό μ΄μ©ν΄μ μ κ·Όν΄μ£Όμ΄μΌ ν΄μ.
μ΄λ κ² λ©€λ² λ³μμ κ°μ κ°μ Έμ¬ μ μλ κ±Έ νμΈν μ μμ΄μ.
π¦ Extends
κ°μ²΄ μ§ν₯ μΈμ΄μ μ€μν λΆλΆ μ€ νλμΈ Extends(μμ)μ λν΄μ μ½νλ¦°μ μ΄λ€μμΌλ‘ μ΄μ©ν μ μμκΉμ?
μμ κ°μ΄ κ°μμ§μ κ³ μμ΄ ν΄λμ€λ moveλΌλ νλμ ν μ μκ² μ μν΄ μ£Όκ³ μΆμ΄μ.
κ·Όλ° κ°κ°μ ν΄λμ€μ΄κΈ΄ νμ§λ§, move()λ λμΌν κ²μ μ μ μμ΄μ.
μ΄λ κ² Abstract(μΆμ) ν΄λμ€ Animalμ λ§λ€κ³ , λ©μλλ₯Ό κ·Έ μμ λ£μ΄μ£Όμμ΄μ.
κ·Έλ° λ€ κ° ν΄λμ€μμ Animalμ μμλ°κ² νμλλ°, μ€μν κ²μ () μκ΄νΈκ° λΆμλ€λ κ²μ΄μμ.
μ΄λ κΈ°λ³Έ μμ±μλ₯Ό νΈμΆνκ² λ€λ μλ―Έμ΄κΈ° λλ¬Έμ λ°λμ λΆνμ£Όμ΄μΌ ν΄μ.
μ΄ λ, μμ λ°μ ν΄λμ€μ λ©μλλ₯Ό Override νλ €κ³ νλ©΄ μλλ κ±Έ μ μ μμ΄μ.
μλ°λ κΈ°λ³Έμ μΌλ‘ λͺ¨λ κ² λ€ λλ€! μ κ°λ
μΌλ‘ λ§λ€μ΄μ§ μΈμ΄μΈλ°, μ½νλ¦°μ κ²½μ°μλ λ°λλ‘ λͺ¨λ κ² λ€ μλΌ! λΌλ κ°λ
μΌλ‘ λ§λ€μ΄μ§ μΈμ΄μμ.
κ·Έλ κΈ° λλ¬Έμ Overrideλ₯Ό νκΈ° μν΄μλ μλμ κ°μ΄ ν΄μ£Όμ΄μΌ ν΄μ.
μ΄λ κ² λΆλͺ¨ ν΄λμ€ λ©μλμ open μ΄λΌλ ν€μλλ₯Ό μ μΈν΄μ€μΌ λΉλ‘μ Overrideλ₯Ό νμ¬ μ΄μ©ν μ μμ΄μ.
μ¬κΈ°μ μ°Έκ³ ν μ μ μΆμ ν΄λμ€λ μμμ μ¬λ£κ° λκΈ° λλ¬Έμ μμμ΄ κΈ°λ³Έμ μΌλ‘ λλ νΉμ§μ΄ μμ΄μ.
κ·Έλ¦¬κ³ μλ°μ λ°λλ‘ μΌλ° ν΄λμ€λ μμμ ν μ μκ² λμ΄ μμ΄μ.
κ·Έλμ ν΄λΉ μΌλ° ν΄λμ€ μμ openμ΄λΌλ ν€μλλ₯Ό λ¬μμ£Όμ΄μΌ ν΄μ.
μ΄λ κ² μ¬μ©ν μ μλκ±Έ μ μ μμ΄μ.
π¦ Interface
κ°μ²΄ μ§ν₯μ λ λ€λ₯Έ κ½! Interface(μΈν°νμ΄μ€)μ λν΄ μμλ³Όκ²μ.
μΈν°νμ΄μ€ Drwableμ draw()λ₯Ό μ μΈν΄μ£Όκ³ , μ΄λ₯Ό ꡬνν ꡬν체μ μμ κ°μ΄ μ μΈν΄ μ£Όμμ΄μ.
μ°Έκ³ λ‘ μΈν°νμ΄μ€λ₯Ό μ μΈν λλ μμ±μκ° μκΈ° λλ¬Έμ μκ΄νΈλ₯Ό λ£μ§ μμμ.
κ·Έλ¦¬κ³ μμ κ°μ΄ draw()λ₯Ό Override ν΄μ£Όλ©΄ Errorλ μ¬λΌμ§κ² λ κ±°μμ.
μ΄λ κ² μ½νλ¦°μμλ μΈν°νμ΄μ€λ₯Ό λ§λ€κ³ , ꡬν체λ₯Ό λ§λ€μ΄ μ΄μ©ν μ μμ΄μ.
π¦ Type Check 'is'
μλ°μμ Type Check(νμ
체ν¬)λ₯Ό μν΄ instanceof νΉμ isInstanceλ₯Ό μ¬μ©νμ¬ νμ
체ν¬λ₯Ό ν μ μμ΄μ.
μ½νλ¦°μ κ²½μ° μμ κ°μ΄ is λΌλ ν€μλλ₯Ό μ΄μ©νμ¬ νμ
체ν¬λ₯Ό ν μ μμ΄μ.
6λ²μ§Έ λΆκΈ°λ¬Έμ dog κ°μ²΄κ° Dog μλ£ν νμ
μ΄λκ³ λ¬Όμ κ±°μμ.
λ§μΌλκΉ dog κ°μ²΄μ move()μ draw()κ° νΈμΆλκ³ , μ°μ°μ ν κ±°μμ.
κ·Όλ° λ§μ½ 3λ²μ§Έ μ€κ³Ό κ°μ΄ cat λ³μμ μλ£ν νμ
μ Animalλ‘ ν΄ λκ³ , λΉκ΅λ₯Ό ν΄ λ³΄λ©΄ μ΄λ»κ² λ κΉμ?
λΆλͺ¨λ₯Ό μμν μμ νμ
μ΄κΈ° λλ¬Έμ κ²°κ΅ λκ°μ μλ£ν νμ
μΈ κ²μ μ μ μμ΄μ.
π¦ κ°μ νλ³ν 'as'
as ν€μλλ μμ κ°μ΄ μμ κ΄κ³κ° μλ νμ
κ°μ κ°μ νλ³νμ νκ³ μ ν λ μ¬μ©ν΄μ.
κΈ°λ³Έ λ°μ΄ν° νμ
μμλ μ¬μ©ν μ μλ€λ κ±Έ μμΌλ©΄ μλΌμ.
λν, μ¬μ©μ μ μ ν΄λμ€, μΈν°νμ΄μ€ λ±μμλ as μ°μ°μλ₯Ό μ΄μ©νμ¬ κ°μ ν λ³νμ΄ κ°λ₯ν΄μ.
17λ²μ§Έ μ€μ animal λ³μ νμ
μ Animal μΆμ ν΄λμ€νμΌλ‘ μ‘κ³ , Dog κ°μ²΄λ₯Ό λ§λ€μ΄ λ£μ΄μ£Όμμ΄μ.
κ·Έλ λ€λ©΄ animal λ³μμ κ°μ²΄λ Dog κ°μ²΄κ° λ€μ΄μκ² μ§μ?
κ·Έλμ 20λ²μ§Έ μ€μ animal λ³μμ νμ
μ²΄ν¬ μ κ±Έλ¦¬κ² λκ³ , 21λ²μ§Έ μ€μ ν΄λΉ κ°μ²΄ νμ
μ DogμΌλ‘ λ°κΏμ£Όμ΄ λ΄€μ΄μ.
κ·Έλ κ² ν΄μ λΆλͺ¨ νμ
μ΄ μλ μμ νμ
μΌλ‘ κ°μ ν λ³νμ ν΄ μ€κ±°μμ.
π¦ Generic
μ΄λ²μ Generic(μ λ€λ¦)μ λν΄ μμλ³Όκ²μ.
μ λ€λ¦μ μλ°μ λμΌν΄μ.
μμ κ°μ΄ Box ν΄λμ€μ μ λ€λ¦ νμ
μΌλ‘ Tλ₯Ό λ°κ² λ€κ³ μ μΈνκ³ , λ§€κ° λ³μ value μλ£ν νμ
μ Tλ‘ μ μΈν΄μ£Όλ©΄
μ΄λ€ μλ£ν νμ
λ λ°μ μ μκ² λΌμ.
λν 2, 3λ²μ§Έ μ€ κ°μ²΄ μμ± λ <>μ΄ λΆλΆμ μλ΅νλλ°, μΈμκ°μ ν΅ν΄ νμ
μΆλ‘ μ΄ κ°λ₯νκΈ° λλ¬Έμ μλ΅ν μ μμ΄μ.
π¦ Call Back Function (Higher-order Function)
μ΄λ²μλ Call Back Function(μ½λ°± ν¨μ νΉμ κ³ μ°¨ν¨μ)μ λν΄ μμλ³Όκ²μ.
μ΄λ κ² junysFunc()μ΄ μμ λ, λ§€κ° λ³μλ‘ ν¨μλ₯Ό λ°λλ‘ λ§λ€μ΄ μ€ μ μμ΄μ.
μ΄ λ, ν¨μλ λ§€κ° λ³μ(Input)κ³Ό λ°ν νμ
(Output)μ μ μν΄ μ£Όλ©΄ λΌμ.
κ·Έλ°λ°, λ§€κ° λ³μκ° μλ€λ©΄ μκ΄νΈλ§ μ μΈν΄ μ£Όλ©΄ λκ³ , λ§€κ° λ³μκ° μλ€λ©΄ μ μλ₯Ό ν΄ μ£Όμ΄μΌ ν΄μ.
μ΄λ κ² νλ©΄ λ§€κ° λ³μκ° μλ€λ μλ―Έμμ.
μ΄κ±΄ λ§€κ° λ³μκ° μλ€λ μλ―Έκ° λ κ±°μμ.
μμ κ°μ΄ ν΄μ£Όλ©΄ λ§€κ° λ³μλ μκ³ , λ°ν νμ
λ μλ€λ μλ―Έμμ.
μλ°μμλ Voidκ° λ°ν νμ
μ΄ μλ€λ μλ―Έμ΄μ§λ§, μ¬κΈ°μλ Unitμ΄λΌλ ν€μλλ₯Ό μ μΈν΄ μ£Όμ΄μΌ ν΄μ.
μ΄λ κ² νκ² λλ©΄ μ΄λ¦μ΄ callBackμ΄λΌλ ν¨μμ λ§€κ° λ³μλ μκ³ , λ°νκ°λ μλ€λ μλ―Έκ° λκ³ ,
μ΄ callBack ν¨μλ₯Ό λ§€κ° λ³μλ‘ μ λ¬ λ°κ² λ€λ μλ―Έμμ.
μ΄λ κ² νλ©΄ main()μμ junysFunc()μ νΈμΆνλλ°, {} μμ ν¨μλ₯Ό μΈμκ°μΌλ‘ μ λ¬νκ² λ€λ μλ―Έμ΄κ³ ,
8λ²μ§Έ μ€μμ νΈμΆνκ² λ€λ μλ―Έμμ.
μ‘°κΈ λ μμΈν μ€λͺ
ν΄ λ³΄λ©΄ junysFunc()μ μ½λ°± ν¨μ νΉμ κ³ μ°¨ ν¨μμΈλ°, ν¨μλ₯Ό λ§€κ° λ³μλ‘ λ°μ μ€νλλ ν¨μλ₯Ό μ΄λ κ² λΆλ¬μ.
ν¨μ μκ·Έλμ²λ₯Ό 보면 callBackμ ν¨μλ₯Ό λ°κΈ° μν λλ€μ λ§€κ° λ³μλ‘ ν¨μμ λ°ννμ
μ Unit μ¦, Voidμμ μ μ μμ΄μ.
main()μμ junysFunc()μ νΈμΆνλλ°, junysFunc()μ λλ€μμ μ λ¬νμ¬ νΈμΆνκ³ μμ΄μ.
μ¬κΈ°μ μ€κ΄νΈ μμ μλ Code Block(μ½λ λΈλ‘)μ junysFunc()μ λ§€κ° λ³μλ‘ μ λ¬λ λλ€μμ΄μμ.
λλ€μ λ΄λΆμμλ "junysFunc μ€ν" μ΄λΌλ λ¬Έμμ΄μ μΆλ ₯νλ κ±Έ μ μ μμ΄μ.
μ΄ νλ‘κ·Έλ¨μ λμμν€λ©΄ main()μμ junysFunc()μ νΈμΆνκ² λκ³ , junysFunc()μμλ μ λ¬λ λλ€μμ μ€ννμ¬ "junysFunc μ€ν"μ΄λΌλ λ¬Έμμ΄μ μΆλ ₯νκ² λλ΅λλ€.
μ΄λ κ² λ³΄λ©΄ main()μ΄ junysFunc()μ νΈμΆν λ, λλ€μμΌλ‘ ν¨μλ₯Ό λ§€κ° λ³μλ‘ μ λ¬μ νλλ°,
κ·Έ λ§€κ° λ³μμ ν¨μκ° λ°λ‘ μ€νλλκ² μλλΌ 9λ²μ§Έ μ€μμ ν΄λΉ ν¨μλ₯Ό νΈμΆν΄μ€μΌ λμνλ κ±Έ μ μ μμ΄μ.
μ°Έκ³ λ‘ ν΄λΉ ν¨μμ λ§€κ° λ³μκ° ν¨μκ° μλκ³ , ν κ°κ° μλ λλ μμ κ°μ΄ ν΄μ€μΌ ν΄μ.
ν¨μν λ§€κ° λ³μλ λ°μΌλ‘ λΉΌλΌ μ μλ κ±°κ³ , κ·Έλ κΈ° λλ¬Έμ μ€κ΄νΈ μμ λ£μ΄μ μ λ¬ν μ μλκ±°μμ.
π¦ Coroutine
μ½νλ¦°μ μ€μ κ°λ μ€ νλμΈ Coroutine(μ½λ£¨ν΄)μ λν΄ μμλ³Όκ²μ.
π‘ μ½λ£¨ν΄μ΄λ?
μ½λ£¨ν΄(coroutine)μ νλ‘κ·Έλλ°μμ μ€ν νλ¦μ μΌμ μ μ§μ μ¬κ°λ₯Ό κ°λ₯νκ² νλ μΌμ’ μ μλΈλ£¨ν΄(subroutine)μ΄λ©°,
λΉλκΈ° νλ‘κ·Έλλ°μμ μμ£Ό μ¬μ©λ©λλ€. μ½λ£¨ν΄μ 루ν΄μ μ€ν μ€μ μΌμμ μΌλ‘ μ€λ¨λμ΄ λμ€μ μ€λ¨λ μ§μ λΆν° κ³μ μ€νλ μ μλ νΉμ§μ΄ μμ΅λλ€. μ΄λ μΌλ°μ μΈ ν¨μ νΈμΆκ³Όλ λ¬λ¦¬, ν¨μμ μ€ν μνκ° λ©λͺ¨λ¦¬μ μ μ§λμ΄ λ€μ νΈμΆ μμ μ΄μ΄μ μ€νλ μ μλ€λ κ²μ μλ―Έν©λλ€.μ½λ£¨ν΄μ λμμ± λ° λ³λ ¬μ±μ λ€λ£¨λλ° μ μ©νλ©°, νΉν λΉλκΈ° μ½λ μμ±μ μ ν©ν©λλ€. λ§μ νλ‘κ·Έλλ° μΈμ΄μ νλ μμν¬μμ μ½λ£¨ν΄μ μ§μνκ³ μμΌλ©°, μλ₯Ό λ€λ©΄ νμ΄μ¬μ asyncio λΌμ΄λΈλ¬λ¦¬λ Kotlinμ μ½νλ¦° μΈμ΄μμλ μ½λ£¨ν΄μ νμ©ν μ μμ΅λλ€. μ΄λ¬ν μΈμ΄μ λΌμ΄λΈλ¬λ¦¬μμλ μ½λ£¨ν΄μ ν΅ν΄ λΉλκΈ° μμ μ λ³΄λ€ ν¨κ³Όμ μΌλ‘ λ€λ£° μ μμ΅λλ€.
μμ κ°μ΄ ν¨μ μμ suspendλΌλ ν€μλλ₯Ό μ¨μ£Όκ² λλ©΄ ν΄λΉ ν¨μλ μ μ§ ν¨μλΌκ³ λΆλ¦¬κ² λΌμ.
μ μ§ ν¨μλ ν΄λΉ ν¨μκ° μ€νλκ³ , λλ λκΉμ§ λκΈ°λ₯Ό ν΄μ€μΌ νλ€λ μλ―Έλ₯Ό κ°μ§κ³ μμ΄μ.
ν΄λΉ ν¨μλ₯Ό νΈμΆνλ λΆλΆμ μμ 보면 μΌμμ μ§ νμκ° λμ¨κ±Έ μ μ μμ΄μ.
μ μ§ ν¨μλ μ΄λ κ² μΌμ μ μ§ νμκ° μκΈ°κ² λλ΅λλ€.
μ΄ ν¨μλ μΌλ°μ μΈ Main Threadμμ μ€νν μ μλ ν¨μμμ.
κ²½κ³ λ¬Έμ 보면 μ μ§ ν¨μ junysFunc()μ λΆλ₯΄λ €λ©΄ μ½λ£¨ν΄ νΉμ
λ λ€λ₯Έ μ μ§ ν¨μμμλ§ νΈμΆν μ μλ€κ³ λμ€λ κ±Έ μ μ μμ΄μ.
κ·Έλμ main() μμλ€κ° suspend ν€μλλ₯Ό λΆμ΄λ μ€λ₯κ° μμ΄μ§κ±Έ νμΈν μ μμ΄μ.
μ½λ£¨ν΄μ μ¬μ©νκΈ° μν΄μλ μ½νλ¦°μ μ½λ£¨ν΄ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ΄μ©ν΄μΌ ν΄μ.
Gradleμ ν΅ν΄ μμ‘΄μ±μ μΆκ°νκ³ μ΄μ©νκΈ° μν΄ λ€μ νλ‘μ νΈλ₯Ό λ§λ€μ΄ μ€κ²μ.
dependencies {
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2"
}
κ·Έλ¦¬κ³ μμ κ°μ΄ μμ‘΄μ±μ μΆκ°ν΄ μ€λλ€.
μ μ½λλ μ½λ£¨ν΄μ μ¬μ©νμ¬ λΉλκΈ° μ½λλ₯Ό μμ±ν μμ μμ.
main()μμ runBlocking()μ μ¬μ©νμ¬ main()μ Blocking(λΈλ‘νΉ) νκ³ , κ·Έ μμμ launch()λ₯Ό μ¬μ©νμ¬ λΉ λκΈ°μ μΌλ‘ junyFunc()μ νΈμΆνκ³ μμ΄μ.
14λ²μ§Έ μ€μ μ½λ£¨ν΄μ΄ λλ λκΉμ§ λκΈ°νλ λμ Main μ°λ λλ₯Ό Block(λΈλ½)νκΈ° μν μ½λμμ.
launch()λ₯Ό μ¬μ©νμ¬ junyFunc()μ λΉλκΈ°μ μΌλ‘ νμ°° ν λ, λΈλ‘ λ΄λΆμ μ½λλ λ³λμ μ°λ λ λλ Background(λ°± κ·ΈλΌμ΄λ)μμ μ€ννκ² ν΄μ.
junyFunc()μ΄ μμνλ©΄μ "junyFunc() μμ!"μ΄ μΆλ ₯λκ³ , λλ€μμ΄ μ€νλμ΄ "junyFunc() νΈμΆ!"μ΄ μΆλ ₯λκ² λΌμ.
κ·Έλ¦¬κ³ , junyFunc()μ΄ λλλ©΄ "junyFunc() λ!"μ νΈμΆνκ² λ κ±°μμ.
μ΄λ° λ°©μμΌλ‘ runBlocking(), launch() κ·Έλ¦¬κ³ , suspend()λ₯Ό μ¬μ©νμ¬ λΉλκΈ°μ μ½λλ₯Ό μ¬μ©ν μ μμ΄μ.
κ°μλ μλλ‘μ΄λ κΈ°λ°μΌλ‘ κ°μλ₯Ό νκΈ° λλ¬Έμ μ£Όλκ° λ³κ²½ν λΆλΆμ΄ μλ μ μ μ°Έκ³ ν΄ μ£ΌμΈμ.
"μ΄ ν¬μ€ν μ μΏ ν‘ ννΈλμ€ νλμ μΌνμΌλ‘, μ΄μ λ°λ₯Έ μΌμ μ‘μ μμλ£λ₯Ό μ 곡λ°μ΅λλ€."
π§ μ°Έκ³ μλ£