πΎ [CS] νλ‘κ·Έλ¨μ μ€ν μ리μ λν μ΄ν΄λκ° κ°λ°μμκ² μ€μν μ΄μ λ 무μμΌκΉμ?
- νλ‘κ·Έλ¨μ μ€ν μ리μ λν μ΄ν΄λλ κ°λ°μμκ² λ§€μ° μ€μνλ°, μ΄λ μννΈμ¨μ΄ κ°λ°μ κΈ°μ΄μ μΈ λΆλΆμ΄μ, ν¨μ¨μ μΈ λ¬Έμ ν΄κ²°κ³Ό μ΅μ νλ μ½λ μμ±μ κ°λ₯νκ² νκΈ° λλ¬Έμ λλ€.
- νλ‘κ·Έλ¨μ μ€ν μ리λ₯Ό μ΄ν΄νλ©΄, κ°λ°μλ λ¨μν μ½λλ₯Ό μμ±νλ κ²μ λμ΄, νλ‘κ·Έλ¨μ΄ μ΄λ»κ² λμνκ³ , μ΄λμμ μ±λ₯ λ¬Έμ λ μ€λ₯κ° λ°μν μ μλμ§ μμΈ‘νκ³ ν΄κ²°ν μ μκ²λ©λλ€.
1οΈβ£ ν¨μ¨μ μΈ λ¬Έμ ν΄κ²°.
- νλ‘κ·Έλ¨μ΄ μ€νλλ λ°©μμ λν μ΄ν΄λ λ²κ·Έλ₯Ό μ°Ύκ³ ν΄κ²°νλ λ° λ§€μ° μ€μν©λλ€.
- μ€ν νλ¦μ μ΄ν΄νλ©΄, νλ‘κ·Έλ¨μμ μ΄λ€ λΆλΆμ΄ μλͺ»λμλμ§, μμμΉ λͺ»ν λμμ΄ μ λ°μνλμ§λ₯Ό λ μ½κ² νμ ν μ μμ΅λλ€.
- μλ₯Ό λ€μ΄, λ©λͺ¨λ¦¬ κ΄λ¦¬, μ€νκ³Ό νμ λμ μ리, ν¨μ νΈμΆ λ°©μ λ±μ μκ³ μμΌλ©΄ λ©λͺ¨λ¦¬ λμλ μ€ν μ€λ²νλ‘μ κ°μ λ¬Έμ λ₯Ό μ μνκ² ν΄κ²°ν μ μμ΅λλ€.
π μ€ν μ€λ²νλ‘(Stack Overflow)
νλ‘κ·Έλ¨μ΄ μ¬μ© κ°λ₯ν μ€ν λ©λͺ¨λ¦¬ μμμ μ΄κ³Όνμ¬ λ μ΄μ λ°μ΄ν°λ₯Ό μμ μ μκ² λλ νμμ λ§ν©λλ€.
μ΄λ‘ μΈν΄ νλ‘κ·Έλ¨μ΄ λΉμ μμ μΌλ‘ μ’ λ£λκ±°λ μμ€ν μλ¬κ° λ°μνκ² λ©λλ€.
π μ€ν(Stack)
νλ‘κ·Έλ¨ μ€ν μ ν¨μ νΈμΆ, λ‘컬 λ³μ λ±μ μ μ₯νλ λ©λͺ¨λ¦¬ μ¬μμ λλ€.
μ€νμ νμ μ μΆ(LIFO: Last In, First Out) λ°©μμΌλ‘ μλνλ©°, ν¨μκ° νΈμΆλ λλ§λ€ ν΄λΉ ν¨μμ μ 보(μ: 맀κ°λ³μ, λ‘컬 λ³μ, λ°ν μ£Όμ λ±)κ° μ€νμ βμμ΄κ³ (push)β, ν¨μκ° μ’ λ£λλ©΄ μ€νμμ βμ κ±°(pop)βλ©λλ€.
2οΈβ£ μ±λ₯ μ΅μ ν.
- νλ‘κ·Έλ¨μ μ€ν μ리λ₯Ό μ μλ©΄, μ΄λμμ μ±λ₯ λ¬Έμ κ° λ°μνλμ§ μ΄ν΄ν μ μμ΅λλ€.
- μλ₯Ό λ€μ΄, CPU μ¬μ©λ₯ , λ©λͺ¨λ¦¬ μ¬μ©λ, μ
μΆλ ₯(I/O) μ±λ₯κ³Ό κ°μ λΆλΆμμ λ³λͺ© νμμ΄ λ°μν μ μμ΅λλ€.
- νλ‘κ·Έλ¨μ΄ μ€νλλ μ리λ₯Ό μλ©΄, μ΄λ° μ±λ₯ λ¬Έμ λ₯Ό λΆμνκ³ , λ λμ μ±λ₯μ μ»κΈ° μν΄ μ½λλ₯Ό μ΅μ νν μ μμ΅λλ€.
- μκ³ λ¦¬μ¦μ μκ° λ³΅μ‘λμ κ³΅κ° λ³΅μ‘λλ₯Ό κ³ λ €νκ³ , λ©λͺ¨λ¦¬ ν λΉκ³Ό ν΄μ κ° νλ‘κ·Έλ¨ μ±λ₯μ λ―ΈμΉλ μν₯μ μ΄ν΄νλ©΄, λ ν¨μ¨μ μΈ μ½λλ₯Ό μμ±ν μ μμ΅λλ€.
π μκ° λ³΅μ‘λ(Time Complexity)
μκ³ λ¦¬μ¦μ΄ μ λ ₯ ν¬κΈ°μ λ°λΌ μ€ννλ μ°μ°μ μλ₯Ό μΈ‘μ νλ μ§νλ‘, μκ³ λ¦¬μ¦μ ν¨μ¨μ±μ νκ°νλ λ° μ¬μ©λ©λλ€.
μκ° λ³΅μ‘λ(Time Complexity)λ μ£Όλ‘ μ λ ₯ ν¬κΈ°(n)κ° μ»€μ§μλ‘ μκ³ λ¦¬μ¦μ μ€ν μκ°μ΄ μΌλ§λ 빨리 μ¦κ°νλμ§λ₯Ό λνλ΄λ©°, λΉ -μ€ νκΈ°λ²(Big-O Notaiton)μΌλ‘ ννλ©λλ€.
π κ³΅κ° λ³΅μ‘λ(Space Complexity)
μκ³ λ¦¬μ¦μ΄ μ€νλλ λμ μ¬μ©νλ λ©λͺ¨λ¦¬ 곡κ°μ μμ μΈ‘μ νλ μ§νμ λλ€.
μκ° λ³΅μ‘λ(Time Complexity)κ° μκ³ λ¦¬μ¦μ μ€ν μκ°μ νκ°νλ κ²μ΄λΌλ©΄, κ³΅κ° λ³΅μ‘λ(Space Complexity)λ μκ³ λ¦¬μ¦μ΄ μΌλ§λ λ§μ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νλμ§λ₯Ό νκ°νλ κ°λ μ λλ€.
3οΈβ£ λλ²κΉ κ³Ό μ€λ₯ μ²λ¦¬ λ₯λ ₯ ν₯μ.
- νλ‘κ·Έλ¨μ΄ μ€νλλ μ리λ₯Ό μ΄ν΄νλ©΄ λλ²κΉ μ΄ ν¨μ¬ μ¬μμ§λλ€.
- νλ‘κ·Έλ¨μμ μμΈ(Exception)λ μλ¬(Error)κ° λ°μν λ, μλ¬ λ©μμ§λ μ€ν νΈλ μ΄μ€λ₯Ό ν΅ν΄ νλ‘κ·Έλ¨μ΄ μ΄λ»κ² μ€νλλ€κ° λ©μ·λμ§ νμ
ν μ μμ΅λλ€.
- κ°λ°μλ μ΄ μ 보λ₯Ό κΈ°λ°μΌλ‘ λ¬Έμ μ μμΈμ μ νν μ°Ύκ³ ν΄κ²°ν μ μμ΅λλ€.
- μλ₯Ό λ€μ΄, λ©ν°μ€λ λ νλ‘κ·Έλ¨μμ λμμ± λ¬Έμ (λ°λλ½, λ μ΄μ€ 컨λμ λ±)κ° λ°μνλ μ΄μ μ μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ λ½(Lock)μ΄λ λκΈ°ν(Synchronization)λ₯Ό μ΄λ»κ² μ¬μ©νλμ§λ₯Ό μ΄ν΄νλ κ²μ΄ μ€μν©λλ€.
π μ€ν νΈλ μ΄μ€(Stack Trace)
νλ‘κ·Έλ¨ μ€ν μ€ μμΈ(Exception)κ° λ°μνμ λ, μμΈκ° λ°μν μ§μ κ³Ό κ·Έ μμΈλ‘ μ΄μ΄μ§ ν¨μ νΈμΆ κ²½λ‘λ₯Ό 보μ¬μ£Όλ λλ²κΉ μ 보μ λλ€.
μ΄λ₯Ό ν΅ν΄ κ°λ°μλ μ΄λ€ μμΈκ° μ΄λμ λ°μνλμ§, κ·Έλ¦¬κ³ κ·Έ μμΈκ° μ΄λ»κ² λ°μνλμ§λ₯Ό νμ ν μ μμ΅λλ€.
4οΈβ£ μ΅μ νλ λ©λͺ¨λ¦¬ κ΄λ¦¬.
- λ©λͺ¨λ¦¬ ꡬ쑰μ νλ‘κ·Έλ¨μ λ©λͺ¨λ¦¬ μ¬μ© λ°©μμ μ΄ν΄νλ κ²μ λ©λͺ¨λ¦¬ ν¨μ¨μ λμ΄κ³ , λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§νκΈ° μν΄ μ€μν©λλ€.
- μλ₯Ό λ€μ΄, μ€ν(Stack)κ³Ό ν(Heap)μ μ°¨μ΄, κ°μ²΄μ μμ±κ³Ό μλ©Έ κ³Όμ , κ°λΉμ§ 컬λ μ (Garbage Collection)μ λμ λ°©μ λ±μ μκ³ μμΌλ©΄, λ©λͺ¨λ¦¬ μ¬μ©ν₯μ μ΅μ νν μ μμ΅λλ€.
- νΉν, μΈμ΄λ§λ€ λ©λͺ¨λ¦¬ κ΄λ¦¬ λ°©μμ΄ λ€λ₯΄κΈ° λλ¬Έμ, κ° μΈμ΄μ λ©λͺ¨λ¦¬ κ΄λ¦¬ νΉμ±μ μ΄ν΄νκ³ ν¨μ¨μ μΌλ‘ νμ©νλ κ²μ΄ νμν©λλ€.
π κ°λΉμ§ 컬λ μ (Garbage Collection)
λ μ΄μ μ¬μ©λμ§ μλ κ°μ²΄λ₯Ό λ©λͺ¨λ¦¬μμ μλμΌλ‘ ν΄μ νλ λ©λͺ¨λ¦¬ κ΄λ¦¬ κΈ°λ²μ λλ€.
μλ°(Java)μ κ°μ νλ‘κ·Έλλ° μΈμ΄μμ, κ°λ°μκ° μλμΌλ‘ λ©λͺ¨λ¦¬λ₯Ό ν΄μ νμ§ μμλ κ°λΉμ§ 컬λ ν°(Garbage Collector)κ° μλμΌλ‘ λΆνμν κ°μ²΄λ₯Ό κ°μ§νκ³ λ©λͺ¨λ¦¬λ₯Ό νμνμ¬ λ©λͺ¨λ¦¬ λμ(Memory Leak)λ₯Ό λ°©μ§ν©λλ€.
5οΈβ£ νλ‘κ·Έλ¨ μ€κ³μ ꡬ쑰ν.
- νλ‘κ·Έλ¨μ΄ μ΄λ»κ² μ€νλλμ§μ λν μ΄ν΄λ μ’μ μ€κ³μ ꡬ쑰νλ νλ‘κ·Έλ¨μ μμ±νλ λ° νμμ μ λλ€.
- νλ‘κ·Έλ¨μ μμ±ν λλ λͺ¨λν, κ°μ²΄μ§ν₯ μ€κ³, ν¨μν νλ‘κ·Έλλ° λ±μ κ°λ μ μ¬μ©ν΄ μ½λλ₯Ό μμ±νκ² λλλ°, μ΄λ¬ν κ°λ μ΄ μ€μ νλ‘κ·Έλ¨ μ€ν μ μ΄λ»κ² μ μ©λκ³ , ν¨μ¨μ±μ μ΄λ€ μν₯μ λ―ΈμΉλμ§ μ΄ν΄νλ©΄ λ λμ νλ‘κ·Έλ¨μ μ€κ³ν μ μμ΅λλ€.
- λ°μ΄ν° νλ¦, μμ‘΄μ± κ΄λ¦¬, μΊ‘μν λ±μ κ°λ μ μ νμ©νλ©΄ μ μ§λ³΄μνκΈ° μ¬μ΄ νλ‘κ·Έλ¨μ λ§λ€ μ μμ΅λλ€.
π λͺ¨λν(Modularization)
μννΈμ¨μ΄ κ°λ°μμ νλ‘κ·Έλ¨μ λ 립μ μ΄κ³ μ¬μ¬μ© κ°λ₯ν μμ λ¨μ(λͺ¨λ, Module)λ‘ λλλ μ€κ³ κΈ°λ²μ λλ€.
κ° λͺ¨λ(Module)λ νΉμ κΈ°λ₯μ μννλ©°, λ€λ₯Έ λͺ¨λ(Module)κ³Ό λͺ ννκ² μ μλ μΈν°νμ΄μ€(Interface)λ₯Ό ν΅ν΄ μνΈμμ©ν©λλ€.
λͺ¨λν(Modularization)μ λͺ©μ μ μ½λμ κ°λ μ±, μ μ§λ³΄μμ±, μ¬μ¬μ©μ±μ λμ΄κ³ , 볡μ‘ν μμ€ν μ λ μ½κ² κ΄λ¦¬ν μ μλλ‘ νλ κ² μ λλ€.
πββοΈ λͺ¨λκ³Ό μ»΄ν¬λνΈλ₯Ό λ κ³ λΈλ‘μ λΉμ ν΄λ³΄λ©΄?!
πββοΈ μννΈμ¨μ΄ 곡νμμμ λͺ¨λ.
π κ°μ²΄μ§ν₯ μ€κ³(Object-Oriented Design, OOD)
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(Object-Oriented Programming, OOP)μ μμΉκ³Ό κ°λ μ λ°νμΌλ‘, νλ‘κ·Έλ¨μ κ°μ²΄λΌλ λ 립μ μΈ λ¨μλ‘ μ€κ³νλ λ°©λ²μ μλ―Έν©λλ€.
κ°μ²΄μ§ν₯ μ€κ³(Object-Oriented Design, OOD)λ νλ‘κ·Έλ¨μ κ΅¬μ± μμλ₯Ό ν΄λμ€μ κ°μ²΄λ‘ λλκ³ , μ΄λ€ κ°μ κ΄κ³λ₯Ό μ μνμ¬ ν¨μ¨μ μ΄κ³ μ¬μ¬μ© κ°λ₯νλ©° μ μ§λ³΄μνκΈ° μ¬μ΄ μννΈμ¨μ΄λ₯Ό λ§λλ κ²μ λͺ©νλ‘ ν©λλ€.
π ν¨μν νλ‘κ·Έλλ°(Function Programming, FP)
ν¨μλ₯Ό κΈ°λ³Έ κ΅¬μ± μμλ‘ μ¬μ©νλ νλ‘κ·Έλλ° ν¨λ¬λ€μμ λλ€.
ν¨μν νλ‘κ·Έλλ°μμλ μμ ν¨μμ λ°μ΄ν°μ λΆλ³μ±μ κ°μ‘°νλ©°, λΆμμ©(Side Effect)μ νΌνλ κ²μ λͺ©νλ‘ ν©λλ€.
μ΄λ₯Ό ν΅ν΄ μ½λμ κ°λ μ±, μ μ§λ³΄μμ±, μ¬μ¬μ©μ±μ λμ΄κ³ , λ³λ ¬ μ²λ¦¬μ κ°μ μν©μμλ μμ μ μ΄κ³ μμΈ‘ κ°λ₯ν μ½λλ₯Ό μμ±ν μ μμ΅λλ€.
6οΈβ£ μ»΄ν¨ν° μμ€ν μ μ΄ν΄.
- νλ‘κ·Έλ¨μ μ€ν μ리λ₯Ό μ΄ν΄νκΈ° μν΄μλ μ»΄ν¨ν° μμ€ν μ체μ λμ λ°©μμ λν μ΄ν΄λ μ€μν©λλ€.
- CPU μ°μ°, λ©λͺ¨λ¦¬ μ κ·Ό, μΊμ λ©λͺ¨λ¦¬, νμΌ μμ€ν , λ€νΈμν¬ ν΅μ λ±μ κ°λ μ μ μ΄ν΄νκ³ μμΌλ©΄, νλ‘κ·Έλ¨μ΄ μ»΄ν¨ν° μμ€ν μμ μ΄λ»κ² μ€νλκ³ , μ΄λ€ λΆλΆμμ μ±λ₯ λ¬Έμ λ μ€μ κ° λ°μν μ μλμ§λ₯Ό νμ ν μ μμ΅λλ€.
- μλ₯Ό λ€μ΄, I/O λ°μ΄λ μμ (μ μΆλ ₯)κ³Ό CPU λ°μ΄λ μμ (μ°μ°)μ μ°¨μ΄λ₯Ό μ΄ν΄νλ©΄, κ°κΈ° λ€λ₯Έ μν©μμ μ΄λ€ μ΅μ νκ° νμνμ§ μ μ μμ΅λλ€.
π I/O λ°μ΄λ μμ (I/O-Bound Task)
μ μΆλ ₯(Input/Output) μμ μ μλμ μν΄ μ 체 μμ μ μ±λ₯μ΄ μ νλλ μμ μ μλ―Έν©λλ€.
μ¦, νλ‘κ·Έλ¨μ΄ μ€νλλ λμ CPUκ° λ°μ΄ν°λ₯Ό μ²λ¦¬νλ κ²λ³΄λ€, λ°μ΄ν°λ₯Ό μ½κ³ μ°λ μμ (I/O)μμ λ λ§μ μκ°μ΄ μλΉλλ μν©μ λ§ν©λλ€
π CPU λ°μ΄λ μμ (CPU-Bound Task)
νλ‘κ·Έλ¨μ μ€ν μλκ° CPUμ μ²λ¦¬ μλμ μν΄ μ νλλ μμ μ μλ―Έν©λλ€.
μ¦, μ°μ°μ΄λ κ³μ° μμ μ΄ λ§μμ CPUκ° λλΆλΆμ μκ°μ κ³μ° μ²λ¦¬μ μ¬μ©νλ©°, CPUμ μ±λ₯μ΄ μ 체 μμ μ μ±λ₯μ κ²°μ μ§λ μν©μ λλ€.
7οΈβ£ λ λμ μννΈμ¨μ΄ μ€κ³.
- νλ‘κ·Έλ¨μ μ€ν μ리λ₯Ό μ΄ν΄νλ©΄, κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(Object-Oriented Programming, OOP), ν¨μν νλ‘κ·Έλλ°(Function Programming, FP), λμμ± νλ‘κ·Έλλ°(Concurrency Programming) λ± λ€μν νλ‘κ·Έλλ° ν¨λ¬λ€μμ μ΄ν΄νκ³ μ΄λ₯Ό μ μ νκ² νμ©ν μ μμ΅λλ€.
πββοΈκ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°(Object-Oriented Programming, OOP)λ 무μμΌκΉμ?
π λμμ± νλ‘κ·Έλλ°(Concurrency Programming)
μ¬λ¬ μμ μ λμμ μνν μ μλλ‘ νλ‘κ·Έλ¨μ μ€κ³νλ κΈ°λ²μ λλ€.
λμμ±(Concurrency)μ μμ μ μ€ν νλ¦μ κ²ΉμΉκ² νκ±°λ λ³λ ¬λ‘ μ²λ¦¬νμ¬, μμ€ν μ ν¨μ¨μ±μ λμ΄κ³ μ²λ¦¬ μκ°μ μ€μ΄λλ° μ€μ μ λ‘λλ€λμμ± νλ‘κ·Έλλ°(Concurrency Programming)μ λ© ν°μ€λ λ©, λ©ν°νλ‘μΈμ±μ ν¬ν¨νμ¬, λΉλκΈ° νλ‘κ·Έλλ°κ³Ό κ°μ λ€μν κΈ°λ²μ μ¬μ©νμ¬ μμ€ν μμμ μ΅λν νμ©ν μ μλλ‘ ν©λλ€.
π λ©ν°μ€λ λ©(Multithreading)
νλμ νλ‘μΈμ€ λ΄μμ μ¬λ¬ μ€λ λ(Thread)λ₯Ό λμμ μ€ννμ¬, λ³λ ¬λ‘ μμ μ μνν μ μλλ‘ νλ νλ‘κ·Έλλ° λ°©μμ λλ€.
μ€λ λ(Thread)λ νλ‘μΈμ€ λ΄μ μ€ν λ¨μλ‘, κ° μ€λ λ(Thread)λ λ 립μ μΌλ‘ μ€νλλ©°, κ°μ λ©λͺ¨λ¦¬ 곡κ°μ 곡μ ν©λλ€.
λ©ν°μ€λ λ©(MultiThreading)μ ν΅ν΄ νλ‘κ·Έλ¨μ μ±λ₯μ ν₯μμν€κ³ , λμμ± μμ μ ν¨μ¨μ μΌλ‘ μ²λ¦¬ν μ μμ΅λλ€.
π λμμ± μμ (Concurrency)
μ¬λ¬ μμ μ΄ λμμ μ€νλλ κ²μ²λΌ 보μ΄λλ‘ μ²λ¦¬νλ λ°©μμ λ§ν©λλ€.
μ€μ λ‘λ μμ λ€μ΄ μκ°μ λλ κ°λ©΄μ λ²κ°μ κ°λ©° μ€νλμ§λ§, μ¬μ©μλ λ§μΉ μ¬λ¬ μμ μ΄ λμμ μνλλ κ²μ²λΌ λλ μ μμ΅λλ€.
λμμ±(Concurrency)μ μμ€ν μ μμμ ν¨μ¨μ μΌλ‘ μ¬μ©νκ³ , μμ μ μ²λ¦¬ μλλ₯Ό λμ΄λ λ° μ€μν κ°λ μ λλ€.
π λ©ν° νλ‘μΈμ±(Multiprocessing)
μ¬λ¬ κ°μ νλ‘μΈμ€λ₯Ό λμμ μ€ννμ¬ μμ μ λ³λ ¬λ‘ μ²λ¦¬νλ λ°©μμ λ§ν©λλ€.
λ©ν° νλ‘μΈμ±μ λ©ν°μ½μ΄ CPU νκ²½μμ κ° νλ‘μΈμ€κ° λ 립μ μΈ λ©λͺ¨λ¦¬ 곡κ°μ μ¬μ©νλ©΄μ, μ€μ λ‘ λμμ μμ μ μνν μ μκ² ν΄μ€λλ€.
μ΄ λ°©μμ λ³λ ¬μ±(Parallelism)μ νμ©νμ¬ νλ‘κ·Έλ¨μ μ±λ₯μ κ·Ήλνν μ μμ΅λλ€.
π λΉλκΈ° νλ‘κ·Έλλ°(Asynchornous Programming)
μμ μ μ€νν λ κ·Έ μμ μ΄ μλ£λ λκΉμ§ κΈ°λ€λ¦¬μ§ μκ³ , λ€λ₯Έ μμ μ κ³μ μνν μ μλλ‘ νλ νλ‘κ·Έλλ° λ°©μμ λλ€.
λΉλκΈ° νλ‘κ·Έλλ°(Asynchornous Programming)μ ν΅ν΄ I/O μμ , λ€νΈμν¬ μμ², νμΌ μ½κΈ°/μ°κΈ°, λ°μ΄ν°λ² μ΄μ€ μ‘°ν λ±μ λκΈ° μκ°μ΄ κΈ΄ μμ μ μ²λ¦¬νλ λμ νλ‘κ·Έλ¨μ΄ λ©μΆμ§ μκ³ λ€λ₯Έ μμ μ λ³λ ¬λ‘ μνν μ μμ΅λλ€.
μ΄λ₯Ό ν΅ν΄ νλ‘κ·Έλ¨μ μλ΅μ±μ λμ΄κ³ μμ ν¨μ¨μ±μ κ·Ήλνν μ μμ΅λλ€.
π νλ‘μΈμ€(Process)
μ€ν μ€μΈ νλ‘κ·Έλ¨μ μΈμ€ν΄μ€(Instance)λ‘, μ΄μ체μ (Operating System, OS)κ° νλ‘κ·Έλ¨μ μ€νν λ μμ±λλ λ 립μ μΈ μμ λ¨μμ λλ€.
νλ‘μΈμ€(Process)λ μ½λ(Code), λ°μ΄ν°(Data), λ©λͺ¨λ¦¬(Memory), CPU μμ(CPU Resource)μ ν λΉλ°μ νλ‘κ·Έλ¨μ λͺ λ Ήμ μννλ©°, κ°κ°μ νλ‘μΈμ€(Process)λ μλ‘ λ 립μ μΈ λ©λͺ¨λ¦¬ 곡κ°μ κ°μ§κ³ μ€νλ©λλ€.
8οΈβ£ μμ: Java νλ‘κ·Έλ¨μ μ€ν μ리 μ΄ν΄μ μ€μμ±.
- Java νλ‘κ·Έλ¨μ μλ‘ λ€μ΄λ³΄κ² μ΅λλ€.
-
Javaμ λ©λͺ¨λ¦¬ κ΄λ¦¬.
- Javaλ κ°λΉμ§ 컬λ μ
(Garbage Collection)μ ν΅ν΄ λ©λͺ¨λ¦¬λ₯Ό μλγ
λ‘ κ΄λ¦¬νμ§λ§, κ°λΉμ§ 컬λ μ
(Garbage Collection)μ λμ λ°©μκ³Ό λ©λͺ¨λ¦¬ μμ(Heap, Stack, Metaspace λ±)μ λν μ΄ν΄κ° μμ΄μΌ λ©λͺ¨λ¦¬ μ¬μ©μ μ΅μ νν μ μμ΅λλ€.
π Metaspace
Java 8λΆν° λμ λ λ©λͺ¨λ¦¬ μμμΌλ‘, ν΄λμ€ λ©νλ°μ΄ν°(Class Metadata)λ₯Ό μ μ₯νλ 곡κ°μ λλ€.
Java 8 μ΄μ μλ Permanent Generation(μꡬ μμ, PermGen)μ΄λΌλ 곡κ°μ ν΄λμ€ λ©νλ°μ΄ν°λ₯Ό μ μ₯νμ§λ§, μ΄λ₯Ό κ°μ νκΈ° μν΄ Metaspaceλ‘ λ체λμμ΅λλ€.
- Javaλ κ°λΉμ§ 컬λ μ
(Garbage Collection)μ ν΅ν΄ λ©λͺ¨λ¦¬λ₯Ό μλγ
λ‘ κ΄λ¦¬νμ§λ§, κ°λΉμ§ 컬λ μ
(Garbage Collection)μ λμ λ°©μκ³Ό λ©λͺ¨λ¦¬ μμ(Heap, Stack, Metaspace λ±)μ λν μ΄ν΄κ° μμ΄μΌ λ©λͺ¨λ¦¬ μ¬μ©μ μ΅μ νν μ μμ΅λλ€.
-
λ©ν°μ€λ λμ λμμ±(Multithread and Concurrency)
- Javaμμ λ©ν°μ€λ λ(Multithread) νλ‘κ·Έλ¨μ μμ±ν λ, μ€λ λ(Thread)μ μ€ν μμ, λκΈ°ν, μ€λ λ ν λ±μ κ°λ
μ μ΄ν΄νμ§ λͺ»νλ©΄ λ°λλ½(Deadlock)μ΄λ λ μ΄μ€ 컨λμ
(Race Condition) κ°μ λ¬Έμ κ° λ°μν μ μμ΅λλ€.
π μ€λ λ ν(Thread Pool)
미리 μμ±λ μ€λ λλ€μ λͺ¨μμΌλ‘, νμν λλ§λ€ μμ (task)μ ν λΉν μ μλλ‘ μ¬μ¬μ© κ°λ₯ν μ€λ λλ₯Ό κ΄λ¦¬νλ ꡬ쑰μ λλ€.
μ€λ λ ν(Thread Pool)μ μ¬μ©νλ©΄ μ€λ λ μμ±κ³Ό μλ©Έμ λλ λΉμ©μ μ€μ΄κ³ , μμ€ν μμμ ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μκ² ν©λλ€.
π λ°λλ½(Deadlock)
λ κ° μ΄μμ νλ‘μΈμ€(Process)λ μ€λ λ(Thread)κ° μλ‘ λ€λ₯Έ μμμ κΈ°λ€λ¦¬λ©° 무νν λκΈ°νλ μνλ₯Ό λ§ν©λλ€.
λ°λλ½(Deadlock)μ΄ λ°μνλ©΄ κ΄λ ¨λ νλ‘μΈμ€(Process)λ μ€λ λ(Thread)λ€μ λͺ¨λ μ μ§λλ©°, μμ μ μ§νν μ μλ μνμ λΉ μ§κ² λ©λλ€.λ°λλ½(Deadlock)μ λμμ± νλ‘κ·Έλλ°(Concurrency Programming)μμ λ°μν μ μλ μ¬κ°ν λ¬Έμ λ‘, νΉν λ©ν°μ€λ λ©(Multithreading) νκ²½μμ μμ£Ό λνλ©λλ€.
μλ₯Ό λ€μ΄, λ μ€λ λκ° μλ‘ μλλ°©μ΄ λ³΄μ ν μμμ νμλ‘ ν λ, λ μ€λ λλ μμν μμμ μ»μ§ λͺ»ν μ± λκΈ°νκ² λ©λλ€.π λ μ΄μ€ 컨λμ (Race Condition)
λ κ° μ΄μμ μ€λ λ λλ νλ‘μΈμ€κ° λμμ 곡μ μμμ μ κ·Όνκ³ , κ·Έ κ²°κ³Όκ° μ€ν μμμ λ°λΌ λ¬λΌμ§λ μν©μ λ§ν©λλ€.
μ¦, λμμ± νλ‘κ·Έλλ°(Concurrency Programming)μμ μ€λ λ(Thread)λ€μ΄ κ²½μμ μΌλ‘ μμμ μ κ·Όν λ λ°μνλ λ¬Έμ λ‘, νλ‘κ·Έλ¨μ μλμΉ μμ κ²°κ³Όλ₯Ό μ΄λν μ μμ΅λλ€.λ μ΄μ€ 컨λμ μ νΉν 곡μ μμ(λ³μ, λ°μ΄ν° ꡬ쑰, νμΌ λ±)μ λν΄ μ½κΈ°μ μ°κΈ° μμ μ΄ λμμ μ΄λ£¨μ΄μ§λ κ²½μ°μ λ°μνλ©°, λκΈ°νκ° μ λλ‘ μ΄λ£¨μ΄μ§μ§ μμΌλ©΄ λ°μ΄ν°μ μΌκ΄μ±μ΄ κΉ¨μ§κ² λ©λλ€.
- Javaμμ λ©ν°μ€λ λ(Multithread) νλ‘κ·Έλ¨μ μμ±ν λ, μ€λ λ(Thread)μ μ€ν μμ, λκΈ°ν, μ€λ λ ν λ±μ κ°λ
μ μ΄ν΄νμ§ λͺ»νλ©΄ λ°λλ½(Deadlock)μ΄λ λ μ΄μ€ 컨λμ
(Race Condition) κ°μ λ¬Έμ κ° λ°μν μ μμ΅λλ€.
-
JVM(Java Virtual Machine)μ μλ λ°©μ
- JVM(Java Virtual Machine) μ μ€ν μ리λ₯Ό μ΄ν΄νλ©΄, νλ‘κ·Έλ¨μ μ±λ₯μ νλνκ³ , λ©λͺ¨λ¦¬ λ¬Έμ λ₯Ό ν΄κ²°νλ©°, μ€ν νκ²½μ μ΅μ νν μ μμ΅λλ€.
-
Javaμ λ©λͺ¨λ¦¬ κ΄λ¦¬.
9οΈβ£ μμ½.
- νλ‘κ·Έλ¨μ μ€ν μ리μ λν μ΄ν΄λ ν¨μ¨μ μΈ λ¬Έμ ν΄κ²°, μ±λ₯ μ΅μ ν, λλ²κΉ λ₯λ ₯ ν₯μ, μ€κ³ λ₯λ ₯ ν₯μ λ± μ¬λ¬ μΈ‘λ©΄μμ κ°λ°μμκ² νμμ μ λλ€.
- μ΄λ₯Ό ν΅ν΄ λ λμ νμ§μ μννΈμ¨μ΄λ₯Ό κ°λ°ν μ μμΌλ©°, 볡μ‘ν λ¬Έμ λ₯Ό ν΄κ²°ν λ λ λμ μ κ·Ό λ°©μμ μ°Ύμ μ μμ΅λλ€.
- νλ‘κ·Έλ¨μ΄ μ΄λ»κ² μ€νλκ³ , λ©λͺ¨λ¦¬μ CPU μμμ μ΄λ»κ² μ¬μ©νλμ§λ₯Ό μ΄ν΄νλ κ²μ λ¨μν μ½λλ₯Ό μμ±νλ κ²μ λμ΄μ, μ λ°©μ μΈ μννΈμ¨μ΄ νμ§μ λμ΄λ λ° ν΅μ¬μ μΈ μν μ ν©λλ€.