κΈ°λ³Έ κ°λ μ νμ κΉλ¨Ήμ μ μλ€. λ°λΌμ μ 리λ₯Ό ν΄λμλ €κ³ νλλ° λ¬Έλ΅μμΌλ‘ μ 리ν μμ μ΄κ³ μ λ§λ€ μ΄λ°κ±°μμ§! μ λλ‘λ§ κΈ°λ‘ν λ €κ³ νλ€.
JDKλ μλ° μ ν리μΌμ΄μ μ κ°λ°νκΈ°μν ν¬κ΄μ μΈ ν€νΈ, μ¦ κ°λ° λꡬ λͺ¨μ, μ»΄νμΌλ¬, λλ²κ±°, λ€μν μλ° APIλ±μ΄ ν¬ν¨
JREλ μλ°λ₯Ό μ€νμν€κΈ° μν μ€ν νκ²½, JVMκ³Ό μλ° ν΄λμ€ λΌμ΄λΈλ¬λ¦¬κ° μλ€. μμ€ μ½λλ₯Ό μ»΄νμΌνκ±°λ κ°λ°νλ κΈ°λ₯μ μμ§λ§, μ΄λ―Έ μ»΄νμΌλ μλ° νλ‘κ·Έλ¨μ μ€ν μν¬ μ μλ€. λ°λΌμ JDK μμ JREμ΄ μλ€.
νλ‘κ·Έλλ°μμ λ°μ΄ν°λ₯Ό μνλ₯Ό κ°μ§ κ°μ²΄λ‘ λ§λ€κ³ κ·Έ κ°μ²΄μ μνΈ μμ©μ ν΅ν΄ λ‘μ§μ ꡬμ±νλ λ°©λ²μ μλ―Ένλ€.
μΊ‘μν, λ€νμ±, μμ, μΆμν νΉμ§μ κ°μ§κ³ μλ€.
μΊ‘μν: κ°μ²΄μ μμ±κ³Ό λ©μλλ₯Ό νλλ‘ λ¬Άκ³ μΌλΆλ₯Ό μΈλΆμ κ°μΆμ΄ μλνλ κ²
λ€νμ±: νλμ λ©μλλ₯Ό μ¬λ¬ λ°©μμΌλ‘ μ¬μ¬μ© κ°λ₯νκ² νλ κ°λ , λνμ μΌλ‘ μ€λ²λ‘λ© , μ€λ²λΌμ΄λ©
μμ: λΆλͺ¨ν΄λμ€μ μλ κ°μ²΄μ μμ±μ μμ ν΄λμ€μμ λΆλ¬μ μ¬μ© κ°λ₯ νκ² νλ κ°λ
μΆμν: κ°μ²΄μ 곡ν΅μ μΈ μμ±κ³Ό κΈ°λ₯μ μΆμΆνμ¬ μ μ νλ κ²(μΆμ ν΄λμ€, μΈν°νμ΄μ€)
GC μ£Όμ λ°©λ²
μ°Έμ‘°κ° 0μΈ κ°μ²΄λ₯Ό νμνλ μ°Έμ‘° μΉ΄μ΄ν , μ¬μ©μ€μΈ κ°μ²΄λ₯Ό λ§ν¬νκ³ λλ¨Έμ§λ₯Ό νμνλ λ§ν¬μ€μ€μν, νμ± κ°μ²΄λ₯Ό λ€λ₯Έ μμμΌλ‘ 볡μ¬νλ λ³΅μ¬ μμ§μ΄ μλ€.
λ§ν¬μ€μ€μν
mark λ¨κ³λ νλ‘κ·Έλ¨μ΄ μ¬μ©λλ λͺ¨λ κ°μ²΄λ₯Ό νμνκ³ , μ¬μ©μ€μΈ κ°μ²΄μ λ§ν¬λ₯Ό νμνλ€. μ΄ κ³Όμ μμ μ°Έμ‘° κ·Έλνλ₯Ό λ°λΌκ°λ©° μ κ·Ό κ°λ₯ν κ°μ²΄λ€μ μλ³νλ€. Sweep λ¨κ³λ λ§ν¬λμ§ μμ κ°μ²΄λ μ¬μ©νκ±°λ μ°Έμ‘° λμ§μλκ±Έλ‘ κ°μ£Όνλ€. κ°μ²΄λ€μ λ©λͺ¨λ¦¬λ₯Ό ν΄μ νμ¬ νλ‘κ·Έλ¨μ΄ λ€λ₯Έ λͺ©μ μΌλ‘ μ¬μ©ν μ μκ² νλ€. μν μ°Έμ‘° λ¬Έμ ν΄κ²° κ°λ₯ -> μ¬μ©μ€μΈ κ°μ²΄λ₯Ό μλ³νμ¬ νμ λμμμ μ κ±°
λ©μλ μμ: μ μ λ³μ , static λ³μ μ μ₯, νλ‘κ·Έλ¨ μμλΆν° μ’
λ£κΉμ§ λ©λͺ¨λ¦¬μ λ¨μμλ€.μ€ν μμ: μ§μ λ³μ, λ§€κ°λ³μ λ°μ΄ν° κ°μ΄ μ μ₯λλ 곡κ°, λ©μλκ° νΈμΆλ λ λ©λͺ¨λ¦¬μ ν λΉ λκ³ μ’
λ£λλ©΄ λ©λͺ¨λ¦¬κ° ν΄μ λλ€. ν μμ: new ν€μλλ‘ μμ±λλ κ°μ²΄(μΈμ€ν΄μ€), λ°°μ΄ λ±μ΄ μ μ₯λλ©°, κ°λΉμ§ 컬λ μ
μ μν΄ λ©λͺ¨λ¦¬κ° κ΄λ¦¬λλ€. ν λ©λͺ¨λ¦¬λ ν¬κ² μΈ λΆλΆμΌλ‘ λλλ€. λ¨Όμ Young Generationμ μλ‘ μμ±λ κ°μ²΄λ€μ΄ ν λΉλλ 곡κ°μ΄κ³ μ£Όλ‘ μ§§μ μλͺ μ£ΌκΈ°λ₯Ό κ°λ κ°μ²΄λ€μ΄ λͺ¨μΈλ€. μ΄κ³³μμ μ΄μ λ¨μ κ°μ²΄λ€μ Old Generation μΌλ‘ μ΄λνλλ° μ€λ μ¬μ©λλ κ°μ²΄κ° λͺ¨μΈλ€. μμ μλ permanation Generation κ° λ©μλμ ν΄λμ€λ₯Ό μ μ₯νλ μ©λλ‘ μ¬μ©λμμ§λ§ νμ¬λ λ©νμ€νμ΄μ€λ‘ λ체λμλ€.
==: μ£Όμκ°μ λΉκ΅νλ€. μ¦, λ κ°μ²΄κ° κ°μ λ©λͺ¨λ¦¬ μμΉλ₯Ό κ°λ¦¬ν€κ³ μλμ§ νμΈνλ€.
equals(): κ°μ²΄μ λ΄μ©μ λΉκ΅νλ€. μ£Όλ‘ Stringμ΄λ λ€λ₯Έ κ°μ²΄ ν΄λμ€μμ λ΄μ©μ λΉκ΅ν λ μ¬μ©λ©λλ€. Stringμλ equalsκ° μ€λ²λΌμ΄λ© λμ΄μλ€. equals()λ κ°μ²΄μ λλ±μ±μ μ μνλ λ°©λ²μ μ 곡νλ λ©μλμ΄λ€. κΈ°λ³Έμ μΌλ‘ Object ν΄λμ€μ μ μλμ΄ μμΌλ©°, ν΄λμ€μμ μ€λ²λΌμ΄λνμ¬ κ°μ²΄μ λ΄μ©μ λΉκ΅νλ λ°©μμΌλ‘ ꡬνν μ μλ€.
equals()λ₯Ό μ€λ²λΌμ΄λ© ν λλ hashcode()λ κ°μ΄ μ€λ²λΌμ΄λ© ν΄μΌνλ€.
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1 == str2); // false, μ£Όμκ° λΉκ΅
System.out.println(str1.equals(str2)); // true, λ΄μ© λΉκ΅
μλ°λ κΈ°λ³Έμλ£νκ³Ό μ°Έμ‘° μλ£νμΌλ‘ λλ μ μλ€.
κΈ°λ³Έ μλ£ν(μ μν): int, long, short, byte
κΈ°λ³Έ μλ£ν(μ€μν): float, double
κΈ°λ³Έ μλ£ν(λ Όλ¦¬ν): boolean
κΈ°λ³Έ μλ£ν(λ¬Έμν): char
κΈ°λ³Έ μλ£νμ λ©λͺ¨λ¦¬μ μ€νμ μ μ₯
μ°Έμ‘°μλ£ν: ν΄λμ€, μΈν°νμ΄μ€, λ°°μ΄, enum λ±
final λ³μ: κ°μ λ³κ²½ν μ μλ μμλ₯Ό μλ―Έ
final λ©μλ: μ€λ²λΌμ΄λ© ν μ μλ λ©μλ
final ν΄λμ€: μμν μ μλ ν΄λμ€
μΆμ λ©μλ
abstract ν€μλμ ν¨κ» μνλ§ μ μΈλκ³ , μ½λλ μμ±λμ§ μμ λ©μλ
abstract ν€μλλ‘ μ μΈλ ν΄λμ€
λ¨μΌ μμλ§ κ°λ₯
μΌλ°λ©μλ + μΆμ λ©μλ μ¬μ© κ°λ₯
μ¬λ¬ ν΄λμ€λ€μ 곡ν΅λ λΆλΆμ μΆμννκ³ , μμλ°λ ν΄λμ€μκ² κ΅¬νμ κ°μ νκΈ° μν΄ μ¬μ©
μΆμ ν΄λμ€μ μΆμ λ©μλλ₯Ό μμ ν΄λμ€κ° ꡬ체ννμ¬ κΈ°λ₯μ νμ₯
interface ν€μλλ‘ μ μΈ
public static final νλλ§ κ°μ§ μ μμ
κΈ°λ³Έ λ©μλλ μΆμ λ©μλμ§λ§ Java 8μ΄νλ‘ default, static λ©μλλ κ°λ₯
ν΄λμ€κ° ꡬνν΄μΌν κΈ°λ₯λ§ μ μ
λ€μ€ μμ κ°λ₯
κ΄λ ¨ μλ ν΄λμ€λ€μμλ 곡ν΅μ μΌλ‘ νμν λμ(λ©μλ μν)μ μ μν΄ κ°μ ꡬννλλ‘ ν¨
μΆμν΄λμ€λ 곡ν΅λ μμ±κ³Ό κΈ°λ₯μ νμ ν΄λμ€μ λ¬Όλ €μ£ΌκΈ° μν΄μ μ¬μ©νκ³ μΈν°νμ΄μ€λ νΉμ κΈ°λ₯μ κ°μ νκΈ° μν΄μ μ¬μ©νλ€.
ν΄λμ€: κ°μ²΄λ₯Ό λ§λ€κΈ° μν μ€κ³λ
κ°μ²΄: ν΄λμ€λ₯Ό λ°νμΌλ‘ λ§λ μ€μ²΄
μΈμ€ν΄μ€: λ©λͺ¨λ¦¬μ ν λΉλ κ°μ²΄
ꡬ체μ μΈ ν΄λμ€ νμ μ μμ§ λͺ»ν΄λ ν΄λμ€μ λ©μλ, νμ , λ³μλ€μ μ κ·Ό κ°λ₯νκ² ν΄μ£Όλ μλ° API
JVMμμ μ€νλλ μ ν리μΌμ΄μ μ λ°νμ λμμ κ²μ¬νκ±°λ μμ ν μ μλ κΈ°λ₯μ΄ νμν νλ‘κ·Έλ¨μμ μ¬μ©
λ°νμ μμ μμ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±νκ³ , μ κ·Ό μ μ΄μμ κ΄κ³μμ΄ νλμ λ©μλμ μ κ·Όνμ¬ νμν μμ μ μνν μ μλ μ μ°μ±μ μ¬μ§κ³ μλ€.
λ¨μ μΌλ‘λ μΊ‘μνλ₯Ό μ ν΄ μν¨λ€.
Static ν€μλλ₯Ό ν΅ν΄ μμ±λ μ μ λ©€λ²λ€μ ν(Heap) μμμ΄ μλ λ©μλ μμ(Method Area)μ μ μ₯λλ€. μ΄ λ©€λ²λ λͺ¨λ μΈμ€ν΄μ€μμ 곡μ λλ©°, ν΄λμ€κ° λ‘λλ λ λ©λͺ¨λ¦¬μ ν λΉλκ³ νλ‘κ·Έλ¨ μ’ λ£ μκΉμ§ λ©λͺ¨λ¦¬μμ ν΄μ λμ§ μλλ€. λ°λΌμ GC κ΄λ¦¬ λμμ΄ μλκΈ° λλ¬Έμ μμ€ν μμ λλΉλ λΆνμν λ©λͺ¨λ¦¬ μ¬μ©μ΄ λ°μν μ μλ€.
ν΄λμ€λ λ©μλλ₯Ό μμ±ν λ, 미리 λ°μ΄ν° νμ μ μ§μ νμ§ μκ³ μ¬μ©ν λ νμ μ μ§μ ν μ μκ² ν΄μ£Όλ κΈ°λ₯
μ½λ μ¬μ¬μ©μ±μ΄ λμμ§κ³ , μ»΄νμΌ μμ μ±μ λμ¬μ€λ€.
List, Setλ±μ μλ£κ΅¬μ‘° ν΄λμ€λ λ€μν νμ μ μ¬μ©ν μ μλλ‘ μ€κ³λμ΄μλ€.
Setμ μ€λ³΅λμ§ μλ μλ£λ₯Ό μ μ₯ν λ μ°λ μλ£κ΅¬μ‘°, Setμ μ λ€λ¦μ μ¬μ©νλ©΄ Setμ μ¬μ© κ°λ₯ν μλ£μ λ°μ΄ν° νμ μ λͺ ννκ² μ§μ ν μ μλ€. μ¦, νΉμ νμ μ κ°μ²΄λ§ μ μ₯νκ² μ§μ κ°λ₯
Object λ₯Ό μ°λ©΄ λ ν λ° μ μ λ€λ¦μ μ¬μ©?
Objectλ₯Ό μ¬μ©νλ©΄ μΆκ°μ μΈ μμ μ΄ νμνλ°, μλ₯Ό λ€λ©΄ κ°μ΄ Integer νμ μΈλ° String νμ μ΄λ©΄ μλ¬κ° λ°μνλ€.
μΆκ°μ μΈ μμ μμ΄ μνλ νμ μ μ¬μ©νκΈ° μν΄ μ λ€λ¦μ μ¬μ©ν΄μΌ νλ€.
String : λΆλ³ κ°μ²΄, νλ² μμ±λλ©΄ κ°μ λ³κ²½ λΆκ°λ₯, λ¬Έμμ΄μ μ‘°μν λλ§λ€, μλ‘μ΄ String κ°μ²΄κ° μμ±λμ΄ λ©λͺ¨λ¦¬ μ°¨μ§
StringBuffer : κ°λ³ κ°μ²΄, λ¬Έμμ΄ μ‘°μμ κΈ°μ‘΄ κ°μ²΄ κ°μ λ³κ²½, λ©ν°μ€λ λ νκ²½μμ λκΈ°ν μ§μ
StringBuilder : κ°λ³ κ°μ²΄, λ¬Έμμ΄ μ‘°μμμ κΈ°μ‘΄ κ°μ²΄ κ° λ³κ²½, λκΈ°ν μ§μ X