week 1 jonghun - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
JVM, JDK, JREλ 무μμΈκ°?
μλ°μ λ©λͺ¨λ¦¬ μμμ λν΄ μ€λͺ νμμ€
κ°λΉμ§ 컬λ ν° μλ μ리λ₯Ό μ€λͺ νμμ€
=>
1.JVM, JDK, JREλ 무μμΈκ°?
JVM Runtime data area
- λ©μλμμ ( ν΄λμ€μ 보, λ©μλμ 보, static λ³μ, final Class λ³μ μ 보 λ± νλ‘κ·Έλ¨ μμκ³Ό λμμ μμ±)
- νμμ ( κ°λΉμ§ μ½λ ν° μ 리λμ) => new μΈμ€ν΄μ€λ‘ ν λΉλ μ£Όμλ€
- μ€νμμ ( λ©μλ μμκ³Ό λμμ μ€λ λμ μ 보 λ° λ³μλ€ ) => λ©μλ μ’ λ£μ λμμ μμ΄μ§ JVMμ νΉμ§
- μ€νκΈ°λ°μ κ°μλ¨Έμ
- κ°λ°μ§ 컬λ μ
- νλ«νΌμ λ 립μ WORA JREλ? Java Runtime Environmentμ μ½μλ‘ μλ° νλ‘κ·Έλ¨μ μ€νμμΌμ£Όλ νκ²½μ ꡬμ±ν΄μ£Όλ λꡬλ€. μ¦ JAVAλ₯Ό κ°λ°ν νμλ μλλ°, μ€νμ μμΌμ€μΌ νλ κ²½μ°μλ κΌ JREκ° μμ΄μΌ νλ€. λ°λ©΄ JAVA κ°λ°μ κΌ νμν κ²μ΄ μλλ° κ·Έκ²μ΄ λ°λ‘ JDKλ€.
JDKλ? (JREλ₯Ό ν¬ν¨νκ³ μλ€.) Java Development Kitμ μ½μλ‘ λ§κ·Έλλ‘ μλ° κ°λ°μ νμν ν΄ν·μ μ 곡νλ λꡬλͺ¨μμ΄λ€. κ°λ°νλ €λ©΄ λΉμ°ν μ€νλ μμΌμΌ νλ―λ‘ JDK μμλ JREκ° ν¬ν¨λμ΄ μλ€.
2. μλ° λ©λͺ¨λ¦¬ ꡬ쑰
- stack, method( cλ‘ μΉλ©΄ data + static ), heap
- methodμμμ μ€νμμ μ μμ€μ½λλ staticλ³μλ€μ΄ ν λΉ
- heapμμμ λ°νμμ μμ±λ μΈμ€ν΄μ€ λ³μλ€μ΄ ν λΉ
- stackμμμ ν¨μκ° νΈμΆλ λ μ§μλ³μλ 맀κ°λ³μλ€μ΄ λ©λͺ¨λ¦¬μ ν λΉ
3.κ°λΉμ§μ½λ ν° = ν μμμ μμ°λ λ©λͺ¨λ¦¬λ₯Ό μ 리νλ μν
- Eden(newμμ) : new μ°μ°μλ₯Ό ν΅ν΄ μμ±λ κ°μ²΄
- Survivor0/1 (newμμ) : Edenμμ μ°Έμ‘°λλ κ°μ²΄λ€μ΄ μ μ₯λλ 곡κ°
- Old : New/Young μμμμ μΌμ μκ° μ΄μ μ°Έμ‘°λκ³ μλ κ°μ²΄κ° μ μ₯λλ 곡κ°
- Permanent : μμ±λ κ°μ²΄λ€μ μ 보μ μ£Όμκ°μ κ°μ§ κ³΅κ° β κ°λΉμ§ 컬λ μ Garbage Collection, GC μ κ°λΉμ§ 컬λ ν°μ μν΄ μ€νλλ©° μ무μκ²λ μ°Έμ‘°λμ§ μλ λ©λͺ¨λ¦¬λ₯Ό νμνλ μμ μ λλ€. μ΄λ¬ν κ°λΉμ§ 컬λ μ μ 2κ°μ§, Minor GC / Major GCλ‘ λλ©λλ€. βΆ Minor GC Heap λ©λͺ¨λ¦¬μμ New/Young μμμμ μΌμ΄λλ κ°λΉμ§ 컬λ μ μ λλ€.
- κ°μ²΄κ° μμ±λλ©΄ Eden μμμ μμ±λ©λλ€.
- Eden μμμ κ°μ²΄κ° κ°λμ°¨κ² λλ©΄ GCκ° μΌμ΄λ©λλ€.
- GCκ° ν λ² λ°μν ν μ΄μλ¨μ κ°μ²΄κ° Survivor 0 μΌλ‘ μ΄λμ ν©λλ€.
- Survivor0 μ μ μΈν λ€λ₯Έ μμμ κ°μ²΄λ€μ μ κ±°ν©λλ€.(1-4, λ°λ³΅)
- Edenμμκ³Ό Survivor 0μ΄ κ°λμ°¨κ² λλ©΄ μ¬κΈ°μ μ΄μλ¨μ κ°μ²΄λ₯Ό Survivor1μΌλ‘
- Survivor1μ μ μΈν λλ¨Έμ§ μμμ κ°μ²΄λ€μ μ κ±°ν©λλ€.
- Survivor 1κ³Ό Edenμ΄ κ°λμ°¨λ©΄ GC ν μ΄μλ¨μ κ°μ²΄ Surivor 0 μΌλ‘ μ΄λνκ³ μ΄λ¬ν μμ μ λ°λ³΅ν©λλ€.
- μΌμ μκ°(νμ) μ΄μ μ΄μ λ¨μμλ κ°μ²΄λ₯Ό Old μμμΌλ‘ 보λ λλ€. βΆ Major GC
- Old μμμ λͺ¨λ κ°μ²΄λ€μ κ²μ¬ν©λλ€.
- Old μμμμ μ°Έμ‘°λμ§ μμ κ°μ²΄λ€μ λͺ¨μ μ κ±°ν©λλ€.
- Major GCκ° μΌμ΄λλ λμ GCλ₯Ό μ μΈν λͺ¨λ μ°λ λκ° μ€μ§λ©λλ€.
μ€νλ§λΆνΈ μ μ€νλ§μ μ°¨μ΄λ₯Ό μ€λͺ νμμ€
μ€νλ§μ νΉμ§μ λν΄μ μ¬μ© μ¬λ‘λ₯Ό λΉλμ΄ μ€λͺ νμμ€
μ€νλ§μ μλΉμ€ μΆμνλ 무μμΈμ§ μ€λͺ νμμ€
=>
1.μ€νλ§λΆνΈ μ μ€νλ§μ μ°¨μ΄λ₯Ό μ€λͺ νμμ€
μ€νλ§ μ΄λ? μλ° μν°νλΌμ΄μ¦ κ°λ°μ νΈνκ² ν΄μ£Όλ μ€νμμ€ κ²½λκΈ μ ν리μΌμ΄μ νλ μμν¬ μ€νλ§ λΆνΈλ? μ€νλ§ νλ μμν¬λ₯Ό μ¬μ©νλ νλ‘μ νΈλ₯Ό μμ£Ό κ°νΈνκ² μ€μ ν μ μλ μ€νλ§ νλ μμμ μλΈ νλ‘μ νΈλΌκ³ ν μ μλ€. β» μ€νλ§ νλ μ μν¬μ λΉκ΅νμ¬ μ¬λ¬ κ°μ§ μ₯μ μ΄ μλ€.
- μ€νλ§ νλ μ μν¬λ₯Ό μ¬μ© νλ©΄ λ§μ XML μ€μ νμΌλ±μ μμ± νλ λ± μ€μ νλ λ°©λ²μ΄ μ΄λ €μ΄ νΈμ΄κΈ° λλ¬Έμ λ³΄ν΅ κ²μμ ν΅ν΄ μ€μ λ΄μ©μ λ³΅μ¬ νκ±°λ, κΈ°μ‘΄ μ€μ νμΌλ€μ 볡λΆνκΈ° μΌμμλ€. νμ§λ§ μ€νλ§ λΆνΈλ λ°λ³΅λλ κ°λ°νκ²½ ꡬμΆμ μν μ½λμμ±λ±μ λ Έλ ₯μ μ€μ¬μ£Όκ³ μ½κ³ λΉ λ₯΄κ² νλ‘μ νΈλ₯Ό μ€μ ν μ μλλ‘ λμμ€λ€.
- λ§€μ° λΉ λ₯΄κ² λͺ¨λ μ€νλ§ κ°λ°μ κ΄ν κ²½νμ κ΄λ²μν μ κ·Όμ μ 곡νλ€.
- νλ‘μ νΈ νκ²½ ꡬμΆμμ ν° μμμ μ°¨μ§νλ λΉκΈ°λ₯μ μΈ κΈ°λ₯λ€μ κΈ°λ³Έμ μΌλ‘ μ 곡νλ€. (λ΄μ₯ν μλ², μν리ν°, μΈ‘μ , μν μ κ², μΈλΆ μ€μ )
2.μ€νλ§μ νΉμ§μ λν΄μ μ¬μ© μ¬λ‘λ₯Ό λΉλμ΄ μ€λͺ νμμ€
3.μ€νλ§μ μλΉμ€ μΆμνλ 무μμΈμ§ μ€λͺ νμμ€
μλΉμ€ μΆμνλ? νμ μμ€ν μ 곡ν΅μ μ λ½μλ΄μ λΆλ¦¬μν€λ κ²μ λ§νλ€. κ·Έλ κ² νλ©΄ νμ μμ€ν μ΄ μ΄λ€ κ²μΈμ§ μμ§ λͺ»ν΄λ, λλ νμ μμ€ν μ΄ λ°λλλΌλ μΌκ΄λ λ°©λ²μΌλ‘ μ κ·Ό ν μκ° μλ€. Spring frameworkλ λ¬Όλ‘ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μμ μμ£Ό μ€μν κ°λ μ΄λ€. κ°λ¨νκ² κ°λ°νκ²½, νΉμ μ΄λ ν λΉμ¦λμ€ λ‘μ§μ μν λ‘μ°λ 벨μ κΈ°μ μ ꡬμ λ°μ§ μκ² νκΈ°μν΄μ, κ·Έλ¦¬κ³ μ± μμ λΆλ¦¬ μν€κΈ° μν κ°λ μ΄λ€.
κ°μ²΄μ§ν₯κ³Ό μ μ°¨μ§ν₯μ μ°¨μ΄μ λν΄ μ€λͺ νμμ€
SOLID μμΉμ λν΄ μλλλ‘ μ€λͺ νμμ€
μΊ‘μνμ λν΄ μ€λͺ νμμ€
=>
1.κ°μ²΄μ§ν₯κ³Ό μ μ°¨μ§ν₯μ μ°¨μ΄μ λν΄ μ€λͺ νμμ€
μ μ°¨μ§ν₯
- λ£¨ν΄ μλΈλ£¨ν΄, ν¨μ(νλ‘μμ Έ) λ±μ μ΄μ©ν νλ‘κ·Έλλ°
- μ μ°¨μ μΌλ‘ μ€νλλ κ²(X) -> νλ‘μμ Έ μ½, μ¦ ν¨μ νΈμΆμ ν΅ν΄μ μ¬μ¬μ©μ±μ μ»μ΄λ΄λ κ²μ΄ λ³Έμ§!
- μ₯μ : ν¨μλ₯Ό ν΅ν μ½λμ μ¬νμ©μ± , λͺ¨λνμ ꡬ쑰νμ μ©μ΄ν¨
- λ¨μ : νλ‘μμ νΈμΆμ μμ λλΉ(μ΅κ·Ό μ»΄νμΌλ¬, νλμ¨μ΄ μ±λ₯ν₯μμΌλ‘ κ±°μ μκ΄μμ)
κ°μ²΄μ§ν₯
- νλ‘κ·Έλ¨μ λ¨μν λ°μ΄ν°μ μ²λ¦¬ λ°©λ²μΌλ‘ λλλ κ²μ΄ μλλΌ, νλ‘κ·Έλ¨μ μλ§μ 'κ°μ²΄'λΌλ κΈ°λ³Έ λ¨μλ‘ λλκ³ μ΄ κ°μ²΄λ€μ μνΈμμ©μΌλ‘ μμ νλ λ°©μ
- μΊ‘μν, μμ, λ€νμ±, μΆμν μ νΉμ§μ κ°μ§
- μ₯λ¨μ : μμ(νΈλ¦¬νμ§λ§ κ΅¬μ‘°κ° μ΄μνκ² λ³ν μμμ), μΈμ€ν΄μ€μ λ°μ΄ν° μ κ·Ό λΆκ°, μλ‘μ΄ λ°μ΄ν° νμμ μ μν μ μκ² ν΄μ€
κ°μ²΄μ§ν₯ μΈμ΄μ νΉμ§
- μΊ‘μν : κ°μ²΄μ μμ±(data fields)κ³Ό νμ(methods)λ₯Ό νλλ‘ λ¬Άκ³ μ€μ ꡬν λ΄μ© μΌλΆλ₯Ό μΈλΆμ κ°μΆμ΄ μλνλ€.
- μμ : μλ‘μ΄ ν΄λμ€κ° κΈ°μ‘΄μν΄λμ€μ μλ£μ μ°μ°μ μ΄μ©ν μ μκ² νλ κΈ°λ₯μ΄λ€.
- λ€νμ± : μ΄λ€ ν μμμ μ¬λ¬ κ°λ μ λ£μ΄ λμ κ²(μ€λ²λΌμ΄λ©, μ€λ²λ‘λ©)
- μΆμν : 곡ν΅μ μμ±μ΄λ κΈ°λ₯μ λ¬Άμ΄ μ΄λ¦μ λΆμ΄λ κ²
2.SOLID μμΉμ λν΄ μλλλ‘ μ€λͺ νμμ€
SOLID μμΉ = SRP(λ¨μΌ μ± μ μμΉ) + OCP(κ°λ°©/νμ μμΉ) + LSP(리μ€μ½ν μΉν μμΉ) + DIP(μμ‘΄ μμ μμΉ) + ISP(μΈν°νμ΄μ€ λΆλ¦¬ μμΉ)
- SRP(Single Responsibility Principle) β λ¨μΌ μ± μ μμΉ = λͺ¨λ ν΄λμ€λ λ¨ νλμ μ± μ(κΈ°λ₯)μ κ°μ§λ©°, νλμ μ± μμ μννλλ° μ§μ€λμ΄μΌ νλ€λ μμΉμ΄λ€.
- OCP(Open/Closed Principle) β κ°λ°©/νμ μμΉ = ν΄λμ€, λͺ¨λ ν¨μ λ±μ μννΈμ¨μ΄ κ°μ²΄λ νμ₯μ λν΄ μ΄λ €μμ΄μΌνκ³ , μμ μ λν΄μλ λ«ν μμ΄μΌ νλ€λ μμΉμ΄λ€. = μμ μ΄ μΌμ΄λλ κΈ°μ‘΄μ ꡬμ±μμμ£λ μμ μ΄ μΌμ΄λμ§ μμμΌ νλ©°, μ½κ² νμ₯μ΄ κ°λ₯νμ¬ μ¬μ¬μ©μ ν μ μλλ‘ ν΄μΌνλ€λ μλ―Έμ΄λ€.
- LSP(Liskov Substitutions Principle) β 리μ€μ½ν μΉν μμΉ = μμμ λν κ°λ μΌλ‘μ, λΆλͺ¨ classκ° λ€μ΄κ° μ리μ μμ classλ₯Ό λ£μ΄λ μ ꡬλλμ΄μΌ νλ€λ μμΉμ΄λ€.
- DIP(Dependency Inversion Principle) β μμ‘΄μ± μμ μμΉ = μμ λͺ¨λμ νμ λͺ¨λμ μ’ μλμ΄μλ μλλ€. λλ€ μΆμνμ μμ‘΄ν΄μΌ νλ€. μΆμνλ μΈλΆμ¬νμ μμ‘΄νμ§ μλλ€. μΈλΆμ¬νμ μΆμνμ μν΄ λ¬λΌμ ΈμΌ νλ€.
- ISP(Interface Segregation Principle) β μΈν°νμ΄μ€ λΆλ¦¬ μμΉ = ν΄λΌμ΄μΈνΈλ μμ μ΄ μ¬μ©νμ§ μλ λ©μλμ μμ‘΄ κ΄κ³λ₯Ό λ§ΊμΌλ©΄ μλλ€λΌλ μμΉμ΄λ€.
3.μΊ‘μνμ λν΄ μ€λͺ νμμ€
μΊ‘μν : κ°μ²΄μ μμ±(data fields)κ³Ό νμ(methods)λ₯Ό νλλ‘ λ¬Άκ³ μ€μ ꡬν λ΄μ© μΌλΆλ₯Ό μΈλΆμ κ°μΆμ΄ μλνλ€. μ€μ§ μΊ‘μνλ ν΄λμ€ λ΄λΆμ λ©μλλ§μ ν΅ν΄ λ³μλ₯Ό μ‘°μμ΄ κ°λ₯νλ€. μ΄μ = μΈλΆμμ λ°μ΄ν°λ₯Ό μ‘°μνκ±°λ λ΄μ©μ μ μ μκ² νκΈ°μνμ¬ μ¬μ©νλ€. μμ) μλ£μ μνκΈ°λ₯Ό μ΄μ©νμ§λ§ μλμ리λ μ μ μλ€.
-- λ°μ΄ν°λ₯Ό λ¬Όμ΄λ³΄μ§ μκ³ , κΈ°λ₯μ μ€νν΄λ¬λΌλ κ·μΉ -- λ°λ―Έν λ₯΄μ λ²μΉ = κ°μ²΄μ λ΄λΆ ꡬ쑰μ κ°νκ² κ²°ν©λμ§ μλλ‘ νλ ₯ κ²½λ‘λ₯Ό μ ννλΌλ κ²