Singleton Pattern

μ•ˆμž¬λ―ΌΒ·2024λ…„ 9μ›” 6일

JAVA

λͺ©λ‘ 보기
3/6

πŸ“’ Singleton Pattern μ΄λž€?

μΈμŠ€ν„΄μŠ€κ°€ 였직 1개만 μƒμ„±λ˜λŠ” νŒ¨ν„΄

μƒμ„±μžκ°€ μ—¬λŸ¬λ²ˆ ν˜ΈμΆœλ˜μ–΄λ„ μ‹€μ œλ‘œ μƒμ„±λ˜λŠ” κ°μ²΄λŠ” ν•˜λ‚˜μ΄κ³ , 졜초 생성 이후 μƒμ„±μžκ°€ 호좜되면 μƒμ„±ν–ˆλ˜ 객체λ₯Ό λ¦¬ν„΄ν•˜λŠ” νŒ¨ν„΄

public class Singleton{
	
    // 1. 클래슀의 μœ μΌν•œ μΈμŠ€ν„΄μŠ€λ₯Ό μ €μž₯ν•  정적 ν•„λ“œ
    private static Singleton instance;

    // 2. μƒμ„±μžλ₯Ό private으둜 μ„ μ–Έν•˜μ—¬ μ™ΈλΆ€μ—μ„œ 객체 생성 λΆˆκ°€λŠ₯
    private Singleton() {}

    // 3. μΈμŠ€ν„΄μŠ€μ— μ ‘κ·Όν•  수 μžˆλŠ” 정적 λ©”μ„œλ“œ 제곡
    public static Singleton getInstance() {
        if (instance == null) {
            // μΈμŠ€ν„΄μŠ€κ°€ μ—†λ‹€λ©΄ 생성
            instance = new Singleton();
        }
        return instance;
    }   
}

μΈμŠ€ν„΄μŠ€λ₯Ό 정적 ν•„λ“œμ— μ˜¬λ €λ†“κ³ , μƒμ„±μžκ°€ 호좜이 되면 객체 리턴


μ™œ Singleton Pattern을 μ‚¬μš©ν• κΉŒ?

1. λ¦¬μ†ŒμŠ€ μ ˆμ•½

자주 μ‚¬μš©λ˜μ§€λ§Œ, ꡳ이 μ—¬λŸ¬ 번의 객체λ₯Ό 생성 ν•  ν•„μš”κ°€ μ—†λŠ” 경우 λ¦¬μ†ŒμŠ€ λ‚­λΉ„κ°€ λ°œμƒ
이런 경우 싱글톀 νŒ¨ν„΄μ„ μ μš©ν•˜μ—¬ λ©”λͺ¨λ¦¬λ₯Ό μ ˆμ•½ν•  수 있음

public class Configuration {
    // μœ μΌν•œ μΈμŠ€ν„΄μŠ€λ₯Ό μ €μž₯ν•  정적 ν•„λ“œ
    private static Configuration instance;

    // 섀정값을 μ €μž₯ν•˜λŠ” ν•„λ“œ (μ˜ˆμ‹œλ‘œ λ°μ΄ν„°λ² μ΄μŠ€ URL)
    private String databaseUrl;

    // private μƒμ„±μž: μ™ΈλΆ€μ—μ„œ 객체 생성 λΆˆκ°€λŠ₯
    private Configuration() {
        // μ„€μ • νŒŒμΌμ΄λ‚˜ ν™˜κ²½ λ³€μˆ˜μ—μ„œ 섀정값을 μ½μ–΄μ˜€λŠ” μž‘μ—…
        this.databaseUrl = "jdbc:mysql://localhost:3306/mydb";
    }

    // μœ μΌν•œ μΈμŠ€ν„΄μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” λ©”μ„œλ“œ
    public static Configuration getInstance() {
        if (instance == null) {
            instance = new Configuration();  // 졜초 μš”μ²­ μ‹œ μΈμŠ€ν„΄μŠ€ 생성
        }
        return instance;
    }

    // 섀정값을 κ°€μ Έμ˜€λŠ” λ©”μ„œλ“œ
    public String getDatabaseUrl() {
        return this.databaseUrl;
    }
}

이제 μ–΄λ–€ ν΄λž˜μŠ€μ—μ„œλ„ Configuration의 μΈμŠ€ν„΄μŠ€μ— μ ‘κ·Ό ν•  수 μžˆλ‹€

2. 데이터 곡유

μœ μΌν•œ μΈμŠ€ν„΄μŠ€λ₯Ό 정적 ν•„λ“œμ— μ˜¬λ €λ†“κΈ° λ•Œλ¬Έμ— 데이터가 μ‰½κ²Œ 곡유 ν•  수 μžˆλ‹€.


κ·Έλ ‡λ‹€λ©΄ 단점은?

1. 객체간 결합도 증가

객체가 μ „μ—­μ μœΌλ‘œ μ°Έμ‘°λ˜λ―€λ‘œ 객체간 결합도 증가
μˆ˜μ • 및 μœ μ§€λ³΄μˆ˜ νž˜λ“€

2. λ©€ν‹° μŠ€λ ˆλ“œ ν™˜κ²½

싱글톀은 μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μ ‘κ·Όν•  경우, μΈμŠ€ν„΄μŠ€κ°€ μ—¬λŸ¬κ°œ μƒμ„±λ˜κ±°λ‚˜ λ³€μˆ˜κ°’μ΄ 일관성이 깨질 수 있기 λ•Œλ¬Έμ—, λ©€ν‹° μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œλŠ” 동기화 처리λ₯Ό ν•΄μ•Όν•œλ‹€.

0개의 λŒ“κΈ€