λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

빈 ꡬ멍 μ±„μš°κΈ°

[Java] Object ν΄λž˜μŠ€μ— μŠ€λ ˆλ“œ κ°„ 톡신을 μœ„ν•œ λ©”μ„œλ“œλ“€μ΄ ν¬ν•¨λœ 이유

좜처

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
    • μžλ°”μ˜ λͺ¨λ²” 사둀와 ν”„λ‘œκ·Έλž˜λ° 기법을 닀룬 μ±…μœΌλ‘œ, 동기화 및 λ©€ν‹°μŠ€λ ˆλ”© κ΄€λ ¨ λ‚΄μš©λ„ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.