μΈμ€ν΄μ€
μΈμ€ν΄μ€(Instance)λ ν΄λμ€μμ μμ±λ μ€μ²΄λ‘, νλ‘κ·Έλ¨μμ μ€μ λ‘ λ©λͺ¨λ¦¬μ ν λΉλμ΄ λμνλ κ°μ²΄μ
λλ€.
ν΄λμ€κ° 'μ€κ³λ'λΌλ©΄, μΈμ€ν΄μ€λ κ·Έ μ€κ³λλ₯Ό λ°νμΌλ‘ λ§λ€μ΄μ§ 'μ€μ μ ν'μ΄λΌκ³ λ³Ό μ μμ΅λλ€.
μΈμ€ν΄μ€ μμ±
μλ°μμ μΈμ€ν΄μ€ μμ±μ΄λ ν΄λμ€λ₯Ό κΈ°λ°μΌλ‘ λ©λͺ¨λ¦¬μ κ°μ²΄λ₯Ό λ§λλ κ³Όμ μ
λλ€.
ν΄λμ€λ κ°μ²΄λ₯Ό λ§λ€κΈ° μν μ€κ³λμ΄κ³ , μΈμ€ν΄μ€λ μ΄ μ€κ³λλ₯Ό λ°νμΌλ‘ μ€μ λ‘ λ©λͺ¨λ¦¬μ ν λΉλ κ°μ²΄λ₯Ό μλ―Έν©λλ€.
Class λ³μλͺ
= new Class();
Java
볡μ¬
// Person ν΄λμ€μ μΈμ€ν΄μ€ μμ±
Person person1 = new Person();
// String ν΄λμ€μ μΈμ€ν΄μ€ μμ±
String name = new String("νκΈΈλ");
Java
볡μ¬
μΈμ€ν΄μ€λ₯Ό μμ±νλ©΄:
β’
λ©λͺ¨λ¦¬μ κ°μ²΄λ₯Ό μν 곡κ°μ΄ ν λΉλ©λλ€.
β’
μμ±μκ° νΈμΆλμ΄ κ°μ²΄λ₯Ό μ΄κΈ°νν©λλ€.
β’
μμ±λ κ°μ²΄μ μ°Έμ‘°κ°(λ©λͺ¨λ¦¬ μ£Όμ)μ΄ λ³μμ μ μ₯λ©λλ€.
λ©λͺ¨λ¦¬ μ¬μ© μμ
Javaμμ μΈμ€ν΄μ€λ₯Ό μμ±ν λ, λ©λͺ¨λ¦¬λ ν¬κ² λ μμμ λλμ΄ μ¬μ©λ©λλ€:
μ€ν(Stack) μμ: μ§μ λ³μμ κ°μ²΄ μ°Έμ‘° λ³μκ° μ μ₯λλ μμ
ν(Heap) μμ: μ€μ κ°μ²΄(μΈμ€ν΄μ€)κ° μ μ₯λλ μμ
μ¦, Person person1 = new Person(); μ΄λΌλ μ½λκ° μ€νλλ©΄:
1.
μ€ν(Stack) μμμλ person1 λ³μκ° μμ±λ©λλ€.
2.
ν(Heap) μμμλ Person ν΄λμ€μ μ€μ κ°μ²΄κ° μμ±λ©λλ€.
3.
person1 λ³μλ ν μμμ μμ±λ κ°μ²΄μ λ©λͺ¨λ¦¬ μ£Όμ(μ°Έμ‘°κ°)λ₯Ό μ μ₯ν©λλ€.
μ΄λ¬ν λ©λͺ¨λ¦¬ κ΄λ¦¬ ꡬ쑰λ Javaμ κ°λΉμ§ 컬λ μ
(Garbage Collection)κ³Ό λ°μ ν κ΄λ ¨μ΄ μμ΅λλ€. λ μ΄μ μ€ν μμμ λ³μμμ μ°Έμ‘°νμ§ μλ ν μμμ κ°μ²΄λ κ°λΉμ§ 컬λ ν°μ μν΄ μλμΌλ‘ λ©λͺ¨λ¦¬μμ ν΄μ λ©λλ€.
// μμ
public void example() {
Person person1 = new Person(); // person1μ μ€νμ, μ€μ Person κ°μ²΄λ νμ μμ±
// λ©μλ μ’
λ£ μ μ€νμ person1 λ³μλ μλ©Έλκ³ ,
// νμ Person κ°μ²΄λ λ μ΄μ μ°Έμ‘°λμ§ μμ κ°λΉμ§ 컬λ μ
λμμ΄ λ¨
}
Java
볡μ¬
μ μ΄λ―Έμ§μ κ°μ΄, μ°Έμ‘° λ³μλ μ€ν μμμμ ν μμμ μλ μ€μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ κ΅¬μ‘°λ‘ λμν©λλ€.
λ©λͺ¨λ¦¬ μ¬μ© μμ
Javaμμ μΈμ€ν΄μ€μ κ΄λ ¨λ λ©λͺ¨λ¦¬ μ¬μ© μμμ λ€μκ³Ό κ°μ΄ μμ½ν μ μμ΅λλ€.
μ€ν(Stack) μμ
β’
μ§μ λ³μμ λ©μλ νΈμΆ μ λ³΄κ° μ μ₯λ©λλ€.
β’
κ°μ²΄μ λν μ°Έμ‘° λ³μ(μ£Όμκ°)κ° μ μ₯λ©λλ€.
β’
λ©μλκ° μ’
λ£λλ©΄ ν΄λΉ λ©μλμ μ€ν νλ μμ΄ μλμΌλ‘ μ κ±°λ©λλ€.
β’
LIFO(Last In First Out) κ΅¬μ‘°λ‘ λμν©λλ€.
ν(Heap) μμ
β’
μ€μ κ°μ²΄(μΈμ€ν΄μ€)κ° μ μ₯λλ 곡κ°μ
λλ€.
β’
new μ°μ°μλ₯Ό ν΅ν΄ μμ±λ κ°μ²΄κ° μ΄κ³³μ ν λΉλ©λλ€.
β’
μ°Έμ‘°κ° μλ κ°μ²΄λ κ°λΉμ§ 컬λ ν°μ μν΄ μλμΌλ‘ λ©λͺ¨λ¦¬κ° ν΄μ λ©λλ€.
β’
λμ λ©λͺ¨λ¦¬ ν λΉμ΄ μ΄λ£¨μ΄μ§λ μμμ
λλ€.
μΈμ€ν΄μ€ μμ± κ³Όμ
1.
λ©λͺ¨λ¦¬ ν λΉ: new μ°μ°μκ° ν μμμ κ°μ²΄λ₯Ό μν λ©λͺ¨λ¦¬ 곡κ°μ ν λΉν©λλ€.
2.
κ°μ²΄ μ΄κΈ°ν: ν λΉλ λ©λͺ¨λ¦¬ 곡κ°μ κ°μ²΄μ λ©€λ² λ³μλ€μ΄ κΈ°λ³Έκ°μΌλ‘ μ΄κΈ°νλ©λλ€.
3.
μμ±μ νΈμΆ: ν΄λμ€μ μμ±μκ° νΈμΆλμ΄ κ°μ²΄μ μ΄κΈ° μνλ₯Ό μ€μ ν©λλ€.
4.
μ°Έμ‘°κ° λ°ν: new μ°μ°μλ μμ±λ κ°μ²΄μ λ©λͺ¨λ¦¬ μ£Όμ(μ°Έμ‘°κ°)λ₯Ό λ°νν©λλ€.
5.
μ°Έμ‘° λ³μ ν λΉ: λ°νλ μ°Έμ‘°κ°μ΄ μ€ν μμμ μ°Έμ‘° λ³μμ μ μ₯λ©λλ€.
// λ©λͺ¨λ¦¬ μ¬μ© μμ
public class MemoryExample {
public static void main(String[] args) {
// μ€ν μμμ studentA λ³μ μμ±
// ν μμμ Student κ°μ²΄ μμ± ν κ·Έ μ°Έμ‘°κ°μ studentAμ μ μ₯
Student studentA = new Student("νκΈΈλ", 20);
// μ€ν μμμ studentB λ³μ μμ± ν studentAμ κ°μ κ°μ²΄ μ°Έμ‘°
Student studentB = studentA;
// studentBλ₯Ό ν΅ν΄ κ°μ²΄μ μν λ³κ²½
studentB.setAge(21);
// studentAλ‘ μ κ·Όν΄λ κ°μ κ°μ²΄μ΄λ―λ‘ λ³κ²½λ κ°μ΄ μΆλ ₯λ¨
System.out.println(studentA.getAge()); // μΆλ ₯: 21
}
}
Java
볡μ¬