μΆμ²
ChatGPT
Object ν΄λμ€μ μ€λ λ κ° ν΅μ μ μν λ©μλλ€μ΄ ν¬ν¨λ μ΄μ λ μλ°μ κ°μ²΄ λͺ¨λΈμμ Object ν΄λμ€κ° λͺ¨λ μλ° κ°μ²΄μ μ΅μμ ν΄λμ€μ΄κΈ° λλ¬Έμ΄λ€. μ΄ λ©μλλ€μ λ©ν°μ€λ λ© νκ²½μμ κ°μ²΄μ λκΈ°νμ μ€λ λ κ° ν΅μ μ μ§μνλλ° μ€μν μν μ νλ€. μλ°λ λ©ν°μ€λ λ νκ²½μ κ³ λ €νμ¬ μ΄λ¬ν λ©μλλ₯Ό Object ν΄λμ€μ ν¬ν¨μμΌ κ°μ²΄ λͺ¨λΈμ ν΅ν©μ μΈ λκΈ°ν λ° ν΅μ λ©μ»€λμ¦μ μ 곡νκ³ μλ€.
Object ν΄λμ€μ μ€λ λ ν΅μ λ©μλ
1. public final void wait()
μ©λ
νμ¬ μ€λ λλ₯Ό λκΈ° μνλ‘ μ ννλ€. λκΈ° μνλ‘ μ νλ μ€λ λλ λ€λ₯Έ μ€λ λκ° ν΄λΉ κ°μ²΄μμ notify() λλ notifyAll() λ©μλλ₯Ό νΈμΆν λκΉμ§ κΉ¨μ΄λμ§ μλλ€.
μ¬μ© μ
μ‘°κ±΄μ΄ μΆ©μ‘±λ λκΉμ§ λκΈ°νλ μ€λ λλ₯Ό ꡬνν λ μ¬μ©λλ€.
2. public final void wait(long timeout)
μ©λ
μ§μ λ μκ° λμ νμ¬ μ€λ λλ₯Ό λκΈ° μνλ‘ μ ννλ€. νμμμ μκ°μ΄ μ§λλ©΄ μ€λ λλ μλμΌλ‘ κΉ¨μ΄λλ€.
μ¬μ© μ
μΌμ μκ° λμλ§ λκΈ°νλλ‘ νλ κ²½μ°μ μ¬μ©λλ€.
3. public final void wait(long timeout, int nanos)
μ©λ
μ§μ λ μκ°(λ°λ¦¬μ΄ λ¨μ)κ³Ό μΆκ°μ μΈ λλ Έμ΄ μκ° λμ μ€λ λλ₯Ό λκΈ° μνλ‘ μ ννλ€.
μ¬μ© μ
λ³΄λ€ μΈλ°ν λκΈ° μκ° μ‘°μ μ΄ νμν κ²½μ° μ¬μ©λλ€.
4. public final void notify()
μ©λ
νμ¬ κ°μ²΄μ λͺ¨λν°λ₯Ό μμ νκ³ μλ μ€λ λ μ€ νλλ₯Ό κΉ¨μ΄λ€. λκΈ° μ€μΈ μ€λ λ μ€ νλλ₯Ό μ ννμ¬ μ€ν μνλ‘ μ ννλ€.
μ¬μ© μ
μ‘°κ±΄μ΄ λ§μ‘±λ λ λκΈ° μ€μΈ μ€λ λ μ€ νλλ₯Ό κΉ¨μΈ λ μ¬μ©λ€.
5. public fianal void notifyAll()
μ©λ
νμ¬ κ°μ²΄μ λͺ¨λν°λ₯Ό μμ νκ³ μλ λͺ¨λ μ€λ λλ₯Ό κΉ¨μ΄λ€. λκΈ° μ€μΈ λͺ¨λ μ€λ λκ° μ€ν μνλ‘ μ νλ€.
μ¬μ© μ
λͺ¨λ λκΈ° μ€μΈ μ€λ λμκ² μ‘°κ±΄μ΄ λ§μ‘±λμμμ μ릴 λ μ¬μ©λλ€.
μ΄ λ©μλλ€μ΄ Object ν΄λμ€μ ν¬ν¨λ μ΄μ
1. λͺ¨λ μλ° κ°μ²΄μμ μ¬μ© κ°λ₯
μλ°μ λͺ¨λ ν΄λμ€λ Object ν΄λμ€λ₯Ό μμνλ―λ‘, μ€λ λ κ° ν΅μ λ° λκΈ°ν κΈ°λ₯μ΄ λͺ¨λ κ°μ²΄μμ μ¬μ© κ°λ₯νκ² λλ€. μ΄λ μλ°μ λ©ν°μ€λ λ νλ‘κ·Έλλ°μ μΌκ΄λκ² μ§μνλ€.
2. ν΅ν©μ μΈ λκΈ°ν λ©μ»€λμ¦ μ 곡
μλ°λ synchronized ν€μλλ₯Ό μ¬μ©νμ¬ κ°μ²΄μ λͺ¨λν°λ₯Ό ν΅ν΄ λκΈ°ν λ¬Έμ λ₯Ό ν΄κ²°νλ€. μ΄μ κ΄λ ¨λ wait(), notify(), notifyAll() λ©μλλ κ°μ²΄ λͺ¨λν°λ₯Ό ν΅ν λκΈ°νλ₯Ό 보쑰νλ©°, λ©ν°μ€λ λ νκ²½μμμ ν΅μ λ° νλ ₯μ μ§μνλ€.
3. μΌκ΄λ λκΈ°ν ν¨ν΄
Object ν΄λμ€μ μ΄λ¬ν λ©μλλ€μ΄ ν¬ν¨λ¨μΌλ‘μ¨, κ°λ°μλ μΌκ΄λ ν¨ν΄μ μ¬μ©νμ¬ μ€λ λ κ°μ λκΈ°νμ ν΅μ μ ꡬνν μ μλ€. μ΄λ μλ°μ λ©ν°μ€λ λ© νκ²½μ λ³΄λ€ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μκ² νλ€.
μμ μ½λ
public class SharedResource {
private boolean condition = false;
public synchronized void waitForCondition() throws InterruptedException {
while (!condition) {
wait(); // λκΈ°
}
// μ‘°κ±΄μ΄ μΆ©μ‘±λμμ λ μνν μμ
}
public synchronized void setCondition(boolean condition) {
this.condition = condition;
notify(); // λκΈ° μ€μΈ μ€λ λλ₯Ό κΉ¨μ°κΈ°
}
}
μ΄ μ½λλ SharedResource ν΄λμ€λ₯Ό μ μνλ©°, μ€λ λ κ°μ λκΈ°νλ₯Ό μν΄ wait()μ notify()λ₯Ό μ¬μ©νλ μμλ₯Ό 보μ¬μ€λ€. waitForCondition() λ©μλλ μ‘°κ±΄μ΄ μΆ©μ‘±λ λκΉμ§ λκΈ°νκ³ , setCondition() λ©μλλ 쑰건μ μ€μ νκ³ λκΈ° μ€μΈ μ€λ λλ₯Ό κΉ¨μ°λ μν μ νλ€.
μΆμ²
- Java SE Documentation - Object Class
- μλ°μ Object ν΄λμ€μ κ·Έ λ©μλμ λν 곡μ λ¬Έμμ λλ€.
- "Java Concurrency in Practice" by Brian Goetz
- μλ°μ λ©ν°μ€λ λ©κ³Ό λκΈ°νμ λν΄ κΉμ΄ μλ μ€λͺ μ μ 곡νλ μ± μ λλ€.
μ§μ μλ μ± μμ λκΈ°νμ κ΄λ ¨ν΄ Objectλ₯Ό μΈκΈνλ λΆλΆμ μ°Ύμ§ λͺ»νλ€.π€ μΆμ² μ΄κ±° λ§μ?
- "Effective Java" by Joshua Bloch
- μλ°μ λͺ¨λ² μ¬λ‘μ νλ‘κ·Έλλ° κΈ°λ²μ λ€λ£¬ μ± μΌλ‘, λκΈ°ν λ° λ©ν°μ€λ λ© κ΄λ ¨ λ΄μ©λ ν¬ν¨λμ΄ μμ΅λλ€.
'λΉ κ΅¬λ© μ±μ°κΈ°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] μ clone() λ©μλλ₯Ό μ 곡ν κΉ (0) | 2024.08.14 |
---|---|
[Java] μμ λ³΅μ¬ Shallow Copy & κΉμ λ³΅μ¬ Deep Copy (0) | 2024.08.14 |
[Java][μ©μ΄] λͺ¨λν° (0) | 2024.08.14 |
[Java] Object ν΄λμ€ (0) | 2024.08.14 |
[Java] Object ν΄λμ€μ finalize() λ©μλ (0) | 2024.08.14 |