Coding Planet

지연 μ΄ˆκΈ°ν™” (Lazy Initialization)λž€? λ³Έλ¬Έ

πŸ’» Java Study/Java 이둠 정리

지연 μ΄ˆκΈ°ν™” (Lazy Initialization)λž€?

jhj.sharon 2023. 8. 16. 20:00
λ°˜μ‘ν˜•
지연 μ΄ˆκΈ°ν™” (Lazy Initialization)λŠ” 객체, 데이터 λ˜λŠ” 계산 λΉ„μš©μ΄ 큰 λ¦¬μ†ŒμŠ€μ˜ μ΄ˆκΈ°ν™”λ₯Ό 그것이 μ‹€μ œλ‘œ ν•„μš”ν•  λ•ŒκΉŒμ§€ μ§€μ—°μ‹œν‚€λŠ” ν”„λ‘œκ·Έλž˜λ° κΈ°λ²•μž…λ‹ˆλ‹€. 즉, κ°μ²΄λ‚˜ 데이터λ₯Ό μƒμ„±ν•˜λŠ” μž‘μ—…μ΄ λ°œμƒν•˜λŠ” μˆœκ°„μ΄ μ•„λ‹ˆλΌ, 그것이 μ‹€μ œλ‘œ μ ‘κ·Όλ˜κ±°λ‚˜ μ‚¬μš©λ  λ•ŒκΉŒμ§€ μ΄ˆκΈ°ν™”λ₯Ό μ—°κΈ°ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

 

지연 μ΄ˆκΈ°ν™”μ˜ μ£Όμš” λͺ©μ 

  1. μ„±λŠ₯ μ΅œμ ν™”: 초기 λ‘œλ”© μ‹œκ°„μ„ λ‹¨μΆ•ν•˜κ±°λ‚˜, λΆˆν•„μš”ν•œ λ¦¬μ†ŒμŠ€ 생성을 λ°©μ§€ν•˜μ—¬ μ‹œμŠ€ν…œμ˜ μ „λ°˜μ μΈ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¨λ‹€.
  2. λ¦¬μ†ŒμŠ€ μ ˆμ•½: μ‹€μ œλ‘œ μ‚¬μš©λ˜μ§€ μ•ŠλŠ” κ°μ²΄λ‚˜ 데이터λ₯Ό μƒμ„±ν•˜μ§€ μ•Šμ•„ λ©”λͺ¨λ¦¬λ‚˜ 기타 λ¦¬μ†ŒμŠ€λ₯Ό μ ˆμ•½ν•  수 μžˆλ‹€.

지연 μ΄ˆκΈ°ν™”μ—λŠ” μ£Όμ˜μ‚¬ν•­

  1. μŠ€λ ˆλ“œ μ•ˆμ „μ„±: μ—¬λŸ¬ μŠ€λ ˆλ“œμ—μ„œ λ™μ‹œμ— 지연 μ΄ˆκΈ°ν™” λ‘œμ§μ— μ ‘κ·Όν•  경우 동기화 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€. 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ μ ˆν•œ 동기화 λ©”μ»€λ‹ˆμ¦˜μ„ μ μš©ν•΄μ•Ό ν•œλ‹€.
  2. λ³΅μž‘μ„± 증가: 지연 μ΄ˆκΈ°ν™” λ‘œμ§μ€ μ½”λ“œμ˜ λ³΅μž‘μ„±μ„ μ¦κ°€μ‹œν‚¬ 수 μžˆλ‹€. λ”°λΌμ„œ 이 기법을 μ‚¬μš©ν•  λ•ŒλŠ” μ½”λ“œμ˜ 가독성과 μœ μ§€ 관리λ₯Ό κ³ λ €ν•΄μ•Ό ν•œλ‹€.
public class HeavyResource {
    private Object resource;

    public Object getResource() {
        if (resource == null) {
            resource = new Object();  // μ‹€μ œλ‘œλŠ” 무거운 λ¦¬μ†ŒμŠ€ μ΄ˆκΈ°ν™” 둜직
        }
        return resource;
    }
}

 

μœ„μ˜ μ˜ˆμ‹œμ—μ„œ HeavyResource ν΄λž˜μŠ€λŠ” getResource λ©”μ„œλ“œ 호좜 μ‹œμ—λ§Œ resource 객체λ₯Ό μ΄ˆκΈ°ν™”ν•œλ‹€. λ”°λΌμ„œ HeavyResource 객체λ₯Ό 생성할 λ•ŒλŠ” λ¦¬μ†ŒμŠ€ μ΄ˆκΈ°ν™” λΉ„μš©μ΄ λ°œμƒν•˜μ§€ μ•Šκ³ , getResource λ©”μ„œλ“œκ°€ 호좜될 λ•Œλ§Œ ν•΄λ‹Ή λ¦¬μ†ŒμŠ€κ°€ μ΄ˆκΈ°ν™”λœλ‹€.

λ°˜μ‘ν˜•
Comments