μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- commit message convention
- μ κ·ν μ₯λ¨μ
- @RequestMappingκ³Ό @GetMapping
- νλ‘κ·Έλλ¨Έμ€ 142086
- λ¬λ¦¬κΈ° κ²½μ£Ό νμ΄μ¬ μκ°μ΄κ³Ό
- κΈ°μ¬λ¨μμ 무기 μ κ³±κ·Ό
- PCB
- Python 1000000007
- DDL DML DCL μ°¨μ΄
- RDBMSμ NoSQL μ°¨μ΄
- μΉ λμ κ³Όμ
- OOPμ νΉμ§
- λͺ¨λλ‘ μ°μ°
- λ°±νΈλνΉ
- μκ³ λ¦¬μ¦ 1000000007 λλκΈ°
- Spring Security 5
- Spring Security λ²μ λ¬Έμ
- MySQL RIGHT()
- java λκΈ°ν
- μ€νλ§ λΆνΈμ AWSλ‘ νΌμ ꡬννλ μΉ μλΉμ€
- λ¬λ¦¬κΈ° κ²½μ£Ό νμ΄μ¬
- build.gradle μ€μ μ€λ₯
- κΈ°μ¬λ¨μμ 무기 νμ΄μ¬
- MySQL LEFT()
- μ΄μ½ν 2021
- λΉλκ΄λ¦¬λꡬ μ°¨μ΄
- finalize μλ νΈμΆ
- www.google.comο»Ώ κ²μνλ©΄ μΌμ΄λλ μΌ
- λΉλκ΄λ¦¬λꡬ
- νλ‘μΈμ€
- Today
- Total
BUILD_SSO
[Java] μλ° ν ν¬ μΈν°λ·° part 1 λ³Έλ¬Έ
ππ»κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° OOP(Object Oriented Programming)
βΌ κ°μ²΄μ§ν₯νλ‘κ·Έλλ°μ΄λ?
- κ°μ²΄μ§ν₯νλ‘κ·Έλλ°μ΄λ λ°μ΄ν°λ₯Ό κ°μ²΄λ‘ μ·¨κΈνμ¬ νλ‘κ·Έλ¨μ λ°μν κ²μΌλ‘, κ°μ²΄μ κ°μ²΄μ μνΈμμ©μ ν΅ν΄ νλ‘κ·Έλ¨μ΄ λμνλ κ²μ λ§ν©λλ€.
- κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ 4κ°μ§ νΉμ§μΌλ‘ μμ, μΊ‘μν, λ€νμ±, μΆμνκ° μκ³ ,
λͺ¨λ μ¬μ¬μ©μΌλ‘ νμ₯ λ° μ μ§λ³΄μκ° μ©μ΄ν©λλ€.
βΌ SOLIDμμΉμ λν΄μ μ€λͺ νμΈμ.
- SRP
λ¨μΌμ± μμμΉ/ ν ν΄λμ€λ νλμ μ± μλ§ κ°μ ΈμΌ νλ€ - OCP
κ°λ°©νμμμΉ/ νμ₯μλ μ΄λ € μκ³ , μμ μλ λ«ν μμ΄μΌ νλ€ - LSP
리μ€μ½νμΉνμμΉ/ μμνμ μ νμνμ μΌλ‘ μΉνκ°λ₯ν΄μΌ νλ€ - ISP
μΈν°νμ΄μ€ λΆλ¦¬μμΉ/ μΈν°νμ΄μ€ λ΄μ λ©μλλ μ μμλ‘ μ’λ€ → SRPμ κ°μ λ¬Έμ μ λν λ€λ₯Έ ν΄κ²°μ± μ΄λ€. - DIP
μμ‘΄κ΄κ³μμ μμΉ/ ꡬ체μ μΈ ν΄λμ€λ³΄λ€ μΈν°νμ΄μ€, μμν΄λμ€, μΆμν΄λμ€μ κ°μ΄ λ³νμ§ μμ κ°λ₯μ±μ΄ ν° ν΄λμ€μ κ΄κ³λ₯Ό λ§Ίμ΄λΌ
βΌ κ°μ²΄μ§ν₯μΈμ΄κ° μ μ°¨μ§ν₯μΈμ΄μ λ€λ₯΄κ² κ°μ§λ μ₯μ μ 무μμΈκ°μ?
- μ¬μ¬μ©μ±
ν΄λμ€μ κ°μ²΄λ₯Ό μ¬μ©νλ©΄ μ½λλ₯Ό μ¬μ¬μ©νκΈ° μ½μ΅λλ€. μ΄λ―Έ μμ±λ ν΄λμ€λ₯Ό μμλ°μ μλ‘μ΄ κΈ°λ₯μ μΆκ°νκ±°λ μμ ν μ μμ΅λλ€. - νμ₯μ±
μλ‘μ΄ κΈ°λ₯μ μΆκ°νκ±°λ κΈ°μ‘΄ κΈ°λ₯μ μμ νλ κ²μ΄ μλμ μΌλ‘ μ½μ΅λλ€. μ΄λ κΈ°λ₯μ΄ κ°μ²΄ λ¨μλ‘ κ΅¬λΆλμ΄ μκΈ° λλ¬Έμ λλ€. - μ μ§ κ΄λ¦¬ μ©μ΄
μ½λκ° κ°μ²΄ λ¨μλ‘ κ΅¬λΆλμ΄ μμ΄, μ½λλ₯Ό μ΄ν΄νκ³ λλ²κΉ νκΈ° λ μ½μ΅λλ€. λν, μ½λμ μμ μ΄ λ€λ₯Έ λΆλΆμ λ―ΈμΉλ μν₯μ΄ μ μ΅λλ€.
νμ§λ§, μ±λ₯λ©΄μμ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ λ©λͺ¨λ¦¬ μ¬μ©κ³Ό CPU μκ°μ΄ μ μ°¨ μ§ν₯ νλ‘κ·Έλλ°λ³΄λ€ λ§μ μ μμ΅λλ€.
ππ» OOPμ νΉμ§
βΌ μΆμν, μΊ‘μν, μμ, λ€νμ±μ΄λ?
μΆμν(Abstration)
- κ°μ²΄μ 곡ν΅μ μΈ μμ±κ³Ό κΈ°λ₯μ μΆμΆνμ¬ μ μνλκ²μ μλ―Έν©λλ€.
- μλ°μμ μΆμνλ₯Ό ꡬνν μ μλ λ¬Έλ² μμλ‘λ μΆμ ν΄λμ€(abstract class)μ μΈν°νμ΄μ€(interface)κ° μκ³ , μΈν°νμ΄μ€κ° κ°μ₯ λΉλ²νκ² μ¬μ©λ©λλ€.
μΊ‘μν(Encapsulation)
- μΊ‘μνλ ν΄λμ€ μμ μλ‘ μ°κ΄μλ μμ±κ³Ό κΈ°λ₯λ€μ νλμ μΊ‘μ(capsule)λ‘ λ§λ€μ΄ λ°μ΄ν°λ₯Ό μΈλΆλ‘λΆν° 보νΈνλ κ²μ λ§ν©λλ€.
- μΈλΆλ‘λΆν° ν΄λμ€μ μ μλ μμ±κ³Ό κΈ°λ₯λ€μ 보νΈνκ³ (λ°μ΄ν° 보νΈ(data protection)), νμνλΆλΆλ§ μΈλΆλ‘ λ ΈμΆλ μ μλλ‘ νμ¬(λ°μ΄ν° μλ(data hiding)) κ° κ°μ²΄ κ³ μ μ λ 립μ±κ³Ό μ± μ μμμ μμ νκ² μ§ν€κ³ μ νλ λͺ©μ μ΄ μμ΅λλ€.
μμ(Inheritance)
- κΈ°μ‘΄μ ν΄λμ€λ₯Ό μ¬νμ©νμ¬ μλ‘μ΄ ν΄λμ€λ₯Ό μμ±νλ κ²μ μλ―Έν©λλ€.
- μμμ ν΄λμ€ κ° κ³΅μ λ μ μλ μμ±κ³Ό κΈ°λ₯λ€μ μμ ν΄λμ€λ‘ μΆμν μμΌ ν΄λΉ μμ ν΄λμ€λ‘λΆν° νμ₯λ μ¬λ¬ κ°μ νμ ν΄λμ€λ€μ΄ λͺ¨λ μμ ν΄λμ€μ μμ±κ³Ό κΈ°λ₯λ€μ κ°νΈνκ² μ¬μ©ν μ μλλ‘ ν©λλ€.
- μ¦, ν΄λμ€λ€ κ° κ³΅μ νλ μμ±κ³Ό κΈ°λ₯λ€μ λ°λ³΅μ μΌλ‘ μ μν νμ μμ΄ λ± ν λ²λ§ μ μν΄λκ³ κ°νΈνκ² μ¬μ¬μ©ν μ μμ΄ λ°λ³΅μ μΈ μ½λλ₯Ό μ΅μννκ³ κ³΅μ νλ μμ±κ³Ό κΈ°λ₯μ κ°νΈνκ² μ κ·Όνμ¬ μ¬μ©ν μ μλλ‘ ν©λλ€.
λ€νμ±(polymorphism)
- λ€νμ±μ νλμ λ³μλͺ , ν¨μλͺ λ±μ΄ μν©μ λ°λΌ λ€λ₯Έ μλ―Έλ‘ ν΄μλ μ μλ κ²μ λλ€.
- μ¦, μ€λ²λΌμ΄λ©(Overriding), μ€λ²λ‘λ©(Overloading)μ΄ κ°λ₯νλ€λ μκΈ°μ΄λ€.
βΌ Overriding vs Overloading
- μ€λ²λΌμ΄λ©
μμ ν΄λμ€μ μλ 맀μλλ₯Ό νμ ν΄λμ€μ μ¬μ μνλ κ²μ λ§νκ³ , - μ€λ²λ‘λ©
맀κ°λ³μμ κ°μλ νμ μ λ€λ₯΄κ² νμ¬ κ°μ μ΄λ¦μ 맀μλλ₯Ό μ¬λ¬κ° μ μνλ κ²μ λ§ν©λλ€.
βΌ interfaceμ abstractμ λν΄μ μ€λͺ νμΈμ.
μΈν°νμ΄μ€(interface)
- λͺ¨λ λ©μλκ° μΆμ λ©μλλ‘ μ΄λ£¨μ΄μ§ ν΄λμ€ μ λλ€.
- abstractλ₯Ό μ°μ§ μμλ λͺ¨λ μΆμ λ©μλλ‘ μ μλλ©°, μ μΈν λ³μλ final static ν€μλκ° λΆμ΅λλ€.
μΆμν΄λμ€(abstract)
- ν΄λμ€λ΄μ μΆμ 맀μλκ° νλ μ΄μ ν¬ν¨λκ±°λ abstractλ‘ μ μλ κ²½μ°λ₯Ό λ§ν©λλ€.
- μΆμν΄λμ€λ μμ μ μμ±μλ‘ κ°μ²΄ μμ±μ΄ λΆκ°λ₯ν©λλ€. νμ ν΄λμ€λ₯Ό μ°Έμ‘°ν΄ μμ ν΄λμ€μ κ°μ²΄λ₯Ό μμ±νμ¬ νμ ν΄λμ€λ₯Ό μ μ΄νκΈ° μν΄ μ¬μ©ν©λλ€.
곡ν΅μ μΌλ‘ new μ°μ°μλ‘ μΈμ€ν΄μ€ μμ±μ΄ λΆκ°λ₯νλ©°, μ¬μ©νκΈ° μν΄μλ νμ ν΄λμ€μμ νμ₯/ꡬνν΄μΌ ν©λλ€.
βΌ μΈν°νμ΄μ€μ μΆμν΄λμ€μ μ°¨μ΄ (Interface VS Abstract Class)
- μΈν°νμ΄μ€λ κ·Έ μΈν°νμ΄μ€λ₯Ό ꡬννλ λͺ¨λ ν΄λμ€μ λν΄ νΉμ ν λ©μλκ° λ°λμ μ‘΄μ¬νλλ‘ κ°μ ν¨μ μκ³ ,
μΆμν΄λμ€λ μμλ°λ ν΄λμ€λ€μ 곡ν΅μ μΈ λ‘μ§μ μΆμν μν€κ³ , κΈ°λ₯ νμ₯μ μν΄ μ¬μ©νλ€. - μΆμν΄λμ€λ λ€μ€μμμ΄ λΆκ°λ₯νμ§λ§,
μΈν°νμ΄μ€λ λ€μ€μμμ΄ κ°λ₯νλ€.
βΌ μ ν΄λμ€λ λ¨μΌ μμλ§ κ°λ₯νλ°, μΈν°νμ΄μ€λ 2κ° μ΄μ ꡬνμ΄ κ°λ₯ν κΉμ?
- μΈν°νμ΄μ€λ μ€μ§μ μΈ κ΅¬νμ΄ μ΄λ£¨μ΄μ§μ§ μκ³ λ©μλμ λν μ μλ§ νκ³ μκΈ° λλ¬Έμ λλ€.
- κ²°κ΅μ λ©μλκ° κ²ΉμΉλλΌλ μ΅μ’ ꡬν λΆλΆμ ꡬν κ°μ²΄(Concrete class)μμ μ΄λ£¨μ΄μ§ κ²μ΄κΈ° λλ¬Έμ μΈν°νμ΄μ€λ 2κ° μ΄μ ꡬνμ΄ κ°λ₯νλ€.
ππ» JVM, GC
βΌ JVMμ΄ μ νν 무μμ΄κ³ , μ΄λ€ κΈ°λ₯μ νλμ§ μ€λͺ ν΄ μ£ΌμΈμ.
- JVMμ Javaλ₯Ό μ€ννκΈ°μν κ°μ νκ²½ μ λλ€.
- νλ«νΌ λ
립μ±
JVMμ Java μ½λκ° ν λ² μμ±λλ©΄ μ΄λ€ νλμ¨μ΄μ μ΄μ 체μ μμλ λμνκ² νλ νλ«νΌ λ 립μ±μ μ 곡ν©λλ€. Java μ»΄νμΌλ¬λ Java μ½λλ₯Ό λ°μ΄νΈμ½λλ‘ λ³ννκ³ , μ΄ λ°μ΄νΈμ½λλ λͺ¨λ JVMμμ λμΌνκ² μ€νλ©λλ€. μ΄λ κ°λ°μκ° νΉμ νλμ¨μ΄λ μ΄μ 체μ μ λ§μΆ° μ½λλ₯Ό μμ±ν νμκ° μμμ μλ―Έν©λλ€. - λ©λͺ¨λ¦¬ κ΄λ¦¬
JVMμ μλ λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό μνν©λλ€. JVMμ κ°λΉμ§ 컬λ ν°λ λμ μΌλ‘ ν λΉλ λ©λͺ¨λ¦¬λ₯Ό μλμΌλ‘ νμνμ¬ λ©λͺ¨λ¦¬ λμλ₯Ό λ°©μ§ν©λλ€. - 보μ
JVMμ ν΄λμ€ λ‘λμ λ°μ΄νΈμ½λ κ²μ¦κΈ°λ₯Ό ν΅ν΄ 보μμ μ 곡ν©λλ€. ν΄λμ€ λ‘λλ μ½λλ₯Ό JVMμ λ‘λνλ μν μ νλ©°, λ°μ΄νΈμ½λ κ²μ¦κΈ°λ μ½λκ° μμ νκ² μ€νλ μ μλμ§ νμΈν©λλ€. μ΄λ° λ°©μμΌλ‘ JVMμ μ μ± μ½λμ μ€νμ λ°©μ§νκ³ μμ€ν μ 보μμ μ μ§ν©λλ€.
μ¦, JVMμ μ€ν κΈ°λ°μΌλ‘ λμνλ©°, Java Byte Codeλ₯Ό μ΄μ체μ μ λ§κ² ν΄μν΄μ£Όλ μν μ νκ³ κ°λΉμ§μ»¬λ μ μ ν΅ν΄ μλ λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό ν΄μ€λλ€.
νμ§λ§, JVMμ 'μ»΄νμΌ -> λ°μ΄νΈ μ½λ -> κΈ°κ³μ΄' μ΄λ°μμΌλ‘ μ€κ°μ λ°μ΄νΈ μ½λ κ³Όμ μ΄ μκΈ° λλ¬Έμ μλμ λ©λͺ¨λ¦¬μμ λ¨μ μ΄ λ μ μμ΅λλ€.
βΌ κ·ΈλΌ, μλ° λ§κ³ λ€λ₯Έ μΈμ΄λ JVM μμ μ¬λ¦΄ μ μλμ?
- μ¬λ¦΄ μ μμ΅λλ€. JVM μμμ μ€νλ μ μλ μΈμ΄λ₯Ό JVM μΈμ΄λΌκ³ λΆλ¦ λλ€.
- Scala, Kotlin, Groovy λ±μ΄ JVM μΈμ΄μ μν©λλ€.
- μ΄λ¬ν μΈμ΄λ€μ κ°μμ νΉμ±μ κ°μ§κ³ μμ§λ§, JVM μμμ μ€νλλ―λ‘ Javaμ λΌμ΄λΈλ¬λ¦¬μ νλ μμν¬λ₯Ό νμ©ν μ μκ³ , JVMμ λ©λͺ¨λ¦¬ κ΄λ¦¬μ μ±λ₯ μ΅μ ν κ°μ κΈ°λ₯μ μ΄μ©ν μ μμ΅λλ€.
βΌ λ°λλ‘ JVM κ³μ΄ μΈμ΄λ₯Ό μΌλ°μ μΌλ‘ μ»΄νμΌν΄μ μ¬μ©ν μ μλμ?
- νΉμ μν©μμ λ€μ΄ν°λΈ μ½λλ‘ μ»΄νμΌλ μλ μμ΅λλ€. μ΄λ GraalVMμ΄λ Kotlin/Nativeμ κ°μ λꡬλ₯Ό μ¬μ©νλ©΄ κ°λ₯ν©λλ€.
νμ§λ§, μΌλ°μ μΌλ‘ JVM μΈμ΄λ₯Ό μ¬μ©νλ μ£Όμ μ΄μ λ JVMμ μ₯μ μ νμ©νκΈ° μν κ²μ λλ€. λ°λΌμ JVM κ³μ΄ μΈμ΄λ₯Ό λ€μ΄ν°λΈ μ½λλ‘ μ»΄νμΌνλ κ²μ μΌλ°μ μΈ κ²½μ°λ μλλλ€.
βΌ VMμ μ¬μ©ν¨μΌλ‘μ¨ μ»μ μ μλ μ₯μ κ³Ό λ¨μ μ λν΄ μ€λͺ ν΄ μ£ΌμΈμ.
μ₯μ
- νλ«νΌ λ
립μ±
VMμ νλμ¨μ΄μ μ΄μ 체μ μ μΈλΆ μ¬νμ μΆμννμ¬, κ°μ νλ‘κ·Έλ¨μ λ€μν μμ€ν μμ λμΌνκ² μ€νν μ μκ² ν©λλ€. μλ₯Ό λ€μ΄, Java Virtual Machine(JVM)μ Java νλ‘κ·Έλ¨μ λͺ¨λ JVMμ΄ μ€μΉλ νλ«νΌμμ μ€νν μ μκ² ν΄μ€λλ€. - 보μ
VMμ μΌλ°μ μΌλ‘ μ€ν μ€μΈ νλ‘κ·Έλ¨μ νΈμ€νΈ μμ€ν μΌλ‘λΆν° 격리ν©λλ€. μ΄λ‘ μΈν΄, μ μ¬μ μΌλ‘ μνν μ½λκ° μμ€ν μ 체μ μν₯μ λ―ΈμΉλ κ²μ λ°©μ§ν μ μμ΅λλ€. - λ©λͺ¨λ¦¬ κ΄λ¦¬μ μ΅μ ν
VMμ μλ λ©λͺ¨λ¦¬ κ΄λ¦¬μ κ°λΉμ§ 컬λ μ κΈ°λ₯μ μ 곡ν©λλ€. λν, VMμ Just-In-Time μ»΄νμΌκ³Ό κ°μ κΈ°μ μ ν΅ν΄ νλ‘κ·Έλ¨μ μ€ν μλλ₯Ό μ΅μ νν μ μμ΅λλ€.
λ¨μ
- μλ
VMμ κ±°μ³ μ½λλ₯Ό μ€ννλ κ²μ μΌλ°μ μΌλ‘ μ§μ νλμ¨μ΄μμ μ½λλ₯Ό μ€ννλ κ²λ³΄λ€ λ립λλ€. κ·Έλ¬λ μ΅μ ν κΈ°μ μ΄ λ°μ ν¨μ λ°λΌ μ΄ μ°¨μ΄λ μ μ μ€μ΄λ€κ³ μμ΅λλ€. - μμ μ¬μ©
VMμ μ체μ μΈ μ΄μ 체μ μ λ°νμ μμ€ν μ μ μ§νκΈ° λλ¬Έμ μΆκ°μ μΈ λ©λͺ¨λ¦¬μ CPU 리μμ€ μμμ μ¬μ©νκ² λ©λλ€.
βΌ JVMκ³Ό λ΄λΆμμ μ€νλκ³ μλ νλ‘κ·Έλ¨μ λΆλͺ¨ νλ‘μΈμ€ - μμ νλ‘μΈμ€ κ΄κ³λ₯Ό κ°κ³ μλ€κ³ λ΄λ 무방νκ°μ?
- μΌλ°μ μΈ μ΄μ 체μ μ νλ‘μΈμ€ κ³μΈ΅ κ΄κ³λ₯Ό κ³ λ €ν λ, JVMκ³Ό κ·Έ λ΄λΆμμ μ€νλκ³ μλ νλ‘κ·Έλ¨μ λΆλͺ¨-μμ κ΄κ³λΌκ³ 보기보λ€λ, JVMμ΄ νλ‘μΈμ€λ₯Ό νΈμ€ν νλ μ(shell) μν μ νλ κ²μ κ°κΉμ΅λλ€.
βΌ μλ°κ° μ»΄νμΌ λλ κ³Όμ μ μ€λͺ ν΄μ£ΌμΈμ.
- μ¬μ©μκ° .java νμΌμ μμ±νλ€
- buildνλ€
- java μ»΄νμΌλ¬μ javacμ λͺ λ Ήμ΄λ₯Ό ν΅ν΄ λ°μ΄νΈμ½λ(.class)λ₯Ό μμ±νλ€
- class loaderλ₯Ό ν΅ν΄ JVM λ©λͺ¨λ¦¬ λ΄μ λ‘λνλ€.
- μ€νμμ§μ ν΅ν΄ μ»΄ν¨ν°κ° μ½μ μ μλ OSμ λ§λ κΈ°κ³μ΄λ‘ ν΄μλλ€.
βΌ Javaμ GCμ λν΄ μ€λͺ ν΄ μ£ΌμΈμ.
- κ°λΉμ§ 컬λ μ μ JVMμ λ©λͺ¨λ¦¬ κ΄λ¦¬ κΈ°λ²μ΄λ©°, μμ€ν μμ λμ μΌλ‘ ν λΉλλ λ©λͺ¨λ¦¬ μμ μ€μμ νμμμ΄μ§ λ©λͺ¨λ¦¬ μμμ νμνμ¬ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬νλ κΈ°λ²μ λλ€.
- κ°λΉμ§ 컬λ μ
κ³Όμ
κ°λΉμ§ 컬λ μ μμ μ μννκΈ° μν΄ JVMμ΄ μ΄ν리μΌμ΄μ μ μ€νμ μ μ λ©μΆκ³ ,
κ°λΉμ§ 컬λ μ μ μ€ννλ μ€λ λλ₯Ό μ μΈν λͺ¨λ μ€λ λλ€μ μμ μ μ€λ¨ ν(stop the world)
μ¬μ©νμ§ μλ λ©λͺ¨λ¦¬λ₯Ό μ κ±°ν λ€(mark and sweep)
κΈ°μ‘΄μ μμ μ μ¬κ°ν©λλ€.
βΌ finalize() λ₯Ό μλμΌλ‘ νΈμΆνλ κ²μ μ λ¬Έμ κ° λ μ μμκΉμ?
finalize() Object ν΄λμ€μ μ μλμ΄ μλ λ©μλμ΄λ©°, GCμ μν΄ μκ±°λ λ JVMμ μν΄ μλμΌλ‘ νΈμΆλλ λ©μλλ‘ μλμΌλ‘ νΈμΆν΄μλ μλλ λ©μλμ λλ€.
- λΉκ²°μ μ±
finalize() λ©μλλ κ°λΉμ§ 컬λ ν°μ μν΄ νΈμΆλ©λλ€. κ°λΉμ§ 컬λ μ μ JVMμ μν΄ κ΄λ¦¬λλ©°, μΈμ κ°λΉμ§ 컬λ μ μ΄ λ°μνκ³ , μ΄λ€ κ°μ²΄κ° μκ±°λ μ§λ μΌλ°μ μΌλ‘ μμΈ‘ν μ μμ΅λλ€. λ°λΌμ finalize()κ° νΈμΆλλ μμ μμ μμΈ‘ν μ μμ΅λλ€. - μ±λ₯ μ΄μ
finalize() λ©μλλ₯Ό κ°μ§ κ°μ²΄λ λ λ²μ κ°λΉμ§ 컬λ μ μ¬μ΄ν΄μ κ±°μ³μΌ ν©λλ€. ν λ²μ finalize()λ₯Ό νΈμΆνκΈ° μν κ²μ΄κ³ , λ€λ₯Έ ν λ²μ μ€μ λ‘ κ°μ²΄λ₯Ό νμνκΈ° μν κ²μ λλ€. μ΄λ‘ μΈν΄ κ°λΉμ§ 컬λ μ μ μ±λ₯μ΄ μ νλ μ μμ΅λλ€. - μμ λμ μν
finalize()μμ μμΈκ° λ°μνλ©΄, μ΄ μμΈλ 무μλλ©°, λ¨μ μ 리 μ½λλ μ€νλμ§ μμ΅λλ€. μ΄λ‘ μΈν΄ μμμ΄ μ λλ‘ νμλμ§ μλ λμκ° λ°μν μ μμ΅λλ€. - finalize() λ©μλμ νμ§
Java 9 μ΄νλ‘ Object ν΄λμ€μ finalize() λ©μλλ deprecated(λΉκΆμ₯) μνμ λλ€. μ΄λ finalize()μ μμ κ°μ λ¬Έμ μ λλ¬Έμ΄λ©°, λμ java.lang.ref.Cleanerλ java.lang.ref.PhantomReferenceμ κ°μ λ©μ»€λμ¦μ μ¬μ©νλλ‘ κΆμ₯νκ³ μμ΅λλ€.
λ°λΌμ finalize() λ©μλλ₯Ό μλμΌλ‘ νΈμΆνλ κ²μ μ΄λ¬ν λ¬Έμ μ μ μΌκΈ°ν μ μμΌλ―λ‘, μΌλ°μ μΌλ‘λ κΆμ₯λμ§ μμ΅λλ€. μμ μ 리λ λμ try-with-resources ꡬ문μ΄λ finally λΈλ‘ λ±μ μ¬μ©νμ¬ λͺ μμ μΌλ‘ μνν΄μΌ ν©λλ€.
βΌ μ΄λ€ λ³μμ κ°μ΄ nullμ΄ λμλ€λ©΄, μ΄ κ°μ GCκ° λ κ°λ₯μ±μ΄ μμκΉμ?
- λ³μμ κ°μ΄ nullμ΄λΌλ κ²μ κ·Έ λ³μκ° λ μ΄μ ν΄λΉ κ°μ²΄λ₯Ό μ°Έμ‘°νμ§ μλλ€λ μλ―Έμ λλ€. κ·Έλ¬λ μ΄κ²λ§μΌλ‘λ κ·Έ κ°μ²΄κ° κ°λΉμ§ 컬λ μ (GC)μ λμμ΄ λ μ§ μ¬λΆλ₯Ό νμ ν μ μμ΅λλ€. κ°μ²΄κ° GCμ λμμ΄ λλ €λ©΄, ν΄λΉ κ°μ²΄μ λν λͺ¨λ μ°Έμ‘°κ° μμ΄μΌ ν©λλ€.
- λ€μ λ§ν΄, μ΄λ€ κ°μ²΄μ λν΄ μ¬λ¬ λ³μκ° μ°Έμ‘°λ₯Ό κ°μ§κ³ μμλλ°, κ·Έ μ€ νλμ λ³μκ° nullμ΄ λμ΄λ, λ€λ₯Έ λ³μλ€μ΄ μ¬μ ν κ·Έ κ°μ²΄λ₯Ό μ°Έμ‘°νκ³ μλ€λ©΄, κ·Έ κ°μ²΄λ GCμ λμμ΄ λμ§ μμ΅λλ€.
- νμ§λ§ ν΄λΉ κ°μ²΄λ₯Ό μ°Έμ‘°νλ λͺ¨λ λ³μκ° nullμ΄ λκ±°λ λ²μ(scope)λ₯Ό λ²μ΄λμ μ°Έμ‘°ν μ μκ² λλ©΄, κ·Έ κ°μ²΄λ λ μ΄μ μ κ·Όν μ μλ μνκ° λμ΄ GCμ λμμ΄ λ μ μμ΅λλ€.
μ΄λ¬ν λ©μ»€λμ¦μ μλ°μ κ°λΉμ§ 컬λ ν°κ° "reachability"λΌλ κ°λ μ κΈ°λ°μΌλ‘ μλνκΈ° λλ¬Έμ λλ€. μ¦, μ΄λ€ κ°μ²΄κ° GCμ λμμ΄ λ μ§λ κ·Έ κ°μ²΄μ μ κ·Όν μ μλ κ²½λ‘κ° μλμ§ μ¬λΆμ λ°λΌ κ²°μ λ©λλ€.
*GCμ reachability
:μ΄λ€ κ°μ²΄μ μμ§ μ ν¨ν μ°Έμ‘°κ° μμΌλ©΄ 'reachable'λ‘, μμΌλ©΄ 'unreachable'λ‘ κ΅¬λ³νκ³ , unreachable κ°μ²΄λ₯Ό garbageλ‘ κ°μ£Όν΄ GCλ₯Ό μν
'Tech Interview' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] μλ° ν ν¬ μΈν°λ·° part3 (1) | 2023.06.13 |
---|---|
[Java] μλ° ν ν¬ μΈν°λ·° part2 (0) | 2023.05.22 |
[Database/λ°μ΄ν°λ² μ΄μ€] μΈλ±μ€ Index (0) | 2023.05.03 |
[Database/λ°μ΄ν°λ² μ΄μ€] μ κ·ν Normalization (0) | 2023.05.03 |
[Database/λ°μ΄ν°λ² μ΄μ€] DB Query & JOIN (0) | 2023.05.03 |