싱글톀 νŒ¨ν„΄

2023. 1. 3. 00:09Β·λ””μžμΈνŒ¨ν„΄
βœ… 싱글톀 νŒ¨ν„΄
μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‹œμž‘λ  λ•Œ μ–΄λ–€ ν΄λž˜μŠ€κ°€ μ΅œμ΄ˆ ν•œλ²ˆλ§Œ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κ³ (Static) κ·Έ λ©”λͺ¨λ¦¬μ— μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€μ–΄ μ‚¬μš©ν•˜λŠ” λ””μžμΈνŒ¨ν„΄.

 

μƒμ„±μžκ°€ μ—¬λŸ¬ μ°¨λ‘€ ν˜ΈμΆœλ˜λ”λΌλ„ μ‹€μ œλ‘œ μƒμ„±λ˜λŠ” κ°μ²΄λŠ” ν•˜λ‚˜κ³  졜초 생성 이후에 호좜된 μƒμ„±μžλŠ” μ΅œμ΄ˆμ— μƒμ„±ν•œ 객체λ₯Ό λ°˜ν™˜ν•œλ‹€. (μžλ°”μ—μ„  μƒμ„±μžλ₯Ό private둜 μ„ μ–Έν•΄μ„œ 생성 λΆˆκ°€ν•˜κ²Œ ν•˜κ³  getInstance()둜 받아쓰기도 ν•¨)
=> 싱글톀 νŒ¨ν„΄μ€ 단 ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό 생성해 μ‚¬μš©ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄μ΄λ‹€.
(μΈμŠ€ν„΄μŠ€κ°€ ν•„μš” ν•  λ•Œ λ˜‘κ°™μ€ μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€μ–΄ λ‚΄λŠ” 것이 μ•„λ‹ˆλΌ, 동일(κΈ°μ‘΄) μΈμŠ€ν„΄μŠ€λ₯Ό μ‚¬μš©ν•˜κ²Œν•¨)
 

 

βœ… 싱글톀 νŒ¨ν„΄μ„ μ“°λŠ” 이유

 

κ³ μ •λœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ μ–»μœΌλ©΄μ„œ ν•œλ²ˆμ˜ new둜 μΈμŠ€ν„΄μŠ€λ₯Ό μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ— λ©”λͺ¨λ¦¬ λ‚­λΉ„λ₯Ό λ°©μ§€ν•  수 있음
λ˜ν•œ μ‹±κΈ€ν†€μœΌλ‘œ λ§Œλ“€μ–΄μ§„ 클래슀의 μΈμŠ€ν„΄μŠ€λŠ” μ „μ—­ μΈμŠ€ν„΄μŠ€μ΄κΈ° λ•Œλ¬Έμ— λ‹€λ₯Έ 클래슀의 μΈμŠ€ν„΄μŠ€λ“€μ΄ 데이터λ₯Ό κ³΅μœ ν•˜κΈ° 쉽닀.
DBCP(DataBase Connection Pool)처럼 κ³΅ν†΅λœ 객체λ₯Ό μ—¬λŸ¬κ°œ μƒμ„±ν•΄μ„œ μ‚¬μš©ν•΄μ•Όν•˜λŠ” μƒν™©μ—μ„œ 많이 μ‚¬μš©.
(μ“°λ ˆλ“œν’€, μΊμ‹œ, λŒ€ν™”μƒμž, μ‚¬μš©μž μ„€μ •, λ ˆμ§€μŠ€νŠΈλ¦¬ μ„€μ •, 둜그 기둝 객체등)
μ•ˆλ“œλ‘œμ΄λ“œ μ•± 같은 경우 각 μ•‘ν‹°λΉ„ν‹°λ‚˜ ν΄λž˜μŠ€λ³„λ‘œ μ£Όμš” ν΄λž˜μŠ€λ“€μ„ 일일이 μ „λ‹¬ν•˜κΈ°κ°€ 번거둭기 λ•Œλ¬Έμ— 싱글톀 클래슀λ₯Ό λ§Œλ“€μ–΄ μ–΄λ””μ„œλ‚˜ μ ‘κ·Όν•˜λ„λ‘ μ„€κ³„ν•˜λŠ” 것이 νŽΈν•˜κΈ° λ•Œλ¬Έ...
+ μΈμŠ€ν„΄μŠ€κ°€ μ ˆλŒ€μ μœΌλ‘œ ν•œκ°œλ§Œ μ‘΄μž¬ν•˜λŠ” 것을 λ³΄μ¦ν•˜κ³  싢을 경우 μ‚¬μš©.
+ 두 번째 μ΄μš©μ‹œλΆ€ν„°λŠ” 객체 λ‘œλ”© μ‹œκ°„μ΄ ν˜„μ €ν•˜κ²Œ 쀄어 μ„±λŠ₯이 μ’‹μ•„μ§€λŠ” μž₯점!

 

 
βœ… 싱글톀 νŒ¨ν„΄μ˜ 문제점
싱글톀 μΈμŠ€ν„΄μŠ€κ°€ λ„ˆλ¬΄ λ§Žμ€ 일을 ν•˜κ±°λ‚˜ λ§Žμ€ 데이터λ₯Ό κ³΅μœ μ‹œν‚¬ 경우 λ‹€λ₯Έ 클래슀의 μΈμŠ€ν„΄μŠ€λ“€ 간에 결합도가 λ†’μ•„μ Έ "개방-폐쇄 원칙" 을 μœ„λ°°ν•˜κ²Œ λœλ‹€. (=객체 μ§€ν–₯ 섀계 원칙에 어긋남)
λ”°λΌμ„œ μˆ˜μ •μ΄ μ–΄λ €μ›Œμ§€κ³  ν…ŒμŠ€νŠΈν•˜κΈ° μ–΄λ €μ›Œμ§„λ‹€.
λ˜ν•œ λ©€ν‹°μ“°λ ˆλ“œν™˜κ²½μ—μ„œ λ™κΈ°ν™”μ²˜λ¦¬λ₯Ό μ•ˆν•˜λ©΄ μΈμŠ€ν„΄μŠ€κ°€ λ‘κ°œκ°€ μƒμ„±λœλ‹€λ“ μ§€ ν•˜λŠ” κ²½μš°κ°€ λ°œμƒν•  수 있음
κ°œλ°œμ„ ν• λ•Œ 항상 λ“€μ–΄μ˜¨ gotoλŠ” μ“°λ©΄ μ•ˆλΌ! μ „μ—­ κ°μ²΄λŠ” μ•ˆ 쒋은거야! λΌλŠ” 말 처럼 κΌ­ ν•„μš”ν•œ κ²½μš°μ•„λ‹ˆλ©΄ 지양해야함. // 적절히 잘 μ“°λ©΄ μ•„μ£Ό μ’‹μŒ, (그게 μ–΄λ ΅μ§€)
 
 

전역적인 접근점을 제곡

λ‘œκΉ…, μ½˜ν…μΈ  λ‘œλ”©, κ²Œμž„ μ €μž₯ λ“± μ—¬λŸ¬ λ‚΄λΆ€ μ‹œμŠ€ν…œμ—μ„œ 파일 μ‹œμŠ€ν…œ 래퍼 클래슀λ₯Ό μ‚¬μš©ν•  것이닀. 이듀 μ‹œμŠ€ν…œμ—μ„œ 파일 μ‹œμŠ€ν…œ 클래슀 μΈμŠ€ν„΄μŠ€λ₯Ό λ”°λ‘œ 생성할 수 μ—†μœΌλ―€λ‘œ μ‹±κΈ€ν„΄ νŒ¨ν„΄μ€ ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ§Œ μƒμ„±ν•˜λŠ” 것에 λ”ν•΄μ„œ, κ·Έ μΈμŠ€ν„΄μŠ€λ₯Ό μ „μ—­μ—μ„œ μ ‘κ·Όν•  수 μž‡λŠ” λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•œλ‹€.

 

class FileSystem {
public:
    static FileSystem& instance() 
    {
        // 게으λ₯Έ μ΄ˆκΈ°ν™”
        if(instance_ NULL) {
        instance_ = new FileSystem();
    }

    return *instance_;
    }

private:
    FileSystem() {}
    static FileSystem* instance_;
}​
instance_ 정적 멀버 λ³€μˆ˜λŠ” 클래슀 μΈμŠ€ν„΄μŠ€λ₯Ό μ €μž₯ν•œλ‹€. μƒμ„±μžκ°€ private이기 λ•Œλ¬Έμ— λ°–μ—μ„œλŠ” 생성할 수 μ—†λ‹€. instance() 정적 λ©”μ„œλ“œλŠ” μ½”λ“œ μ–΄λ””μ—μ„œλ‚˜ μ‹±κΈ€ν„΄ μΈμŠ€ν„΄μŠ€μ— μ ‘κ·Όν•  수 있게 ν•˜κ³ , 싱글턴을 μ‹€μ œλ‘œ ν•„μš”λ‘œ ν•  λ•ŒκΉŒμ§€ μΈμŠ€ν„΄μŠ€ μ΄ˆκΈ°ν™”λ₯Ό λ―Έλ£¨λŠ” μ—­ν• (게으λ₯Έ μ΄ˆκΈ°ν™”)도 ν•œλ‹€.
μš”μ¦˜μ—λŠ” μ΄λ ‡κ²Œλ„ λ§Œλ“ λ‹€.
class FileSystem 
{
public:
    static FileSystem& instance() 
    {
        static FileSystem* instance = new FileSystem();
        return *instance;
    }

private:
    FileSystem() {}
}
C++ 11μ—μ„œλŠ” 정적 μ§€μ—­ λ³€μˆ˜ μ΄ˆκΈ°ν™” μ½”λ“œκ°€ λ©€ν‹°μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œλ„ λ”± ν•œλ²ˆ μ‹€ν–‰λ˜μ–΄μ•Ό ν•œλ‹€. 즉, μ΅œμ‹  C++ 컴파일둜 μ»΄νŒŒμΌν•˜λ©΄ 이 μ½”λ“œλŠ” 이전 μ˜ˆμ œμ™€λŠ” 달리 μŠ€λ ˆλ“œ μ•ˆμ „ν•˜λ‹€.
 
 
좜처: https://boycoding.tistory.com/109 [μ†Œλ…„μ½”λ”©]

 

μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)

'λ””μžμΈνŒ¨ν„΄' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[λ””μžμΈνŒ¨ν„΄] μ»΄ν¬μ§€νŠΈ(Composite) νŒ¨ν„΄  (1) 2024.08.25
[λ””μžμΈνŒ¨ν„΄] μ „λž΅(Strategy) νŒ¨ν„΄  (0) 2024.08.24
[λ””μžμΈνŒ¨ν„΄] λ°μ½”λ ˆμ΄ν„° νŒ¨ν„΄  (0) 2024.08.23
좔상 싱글톀 νŒ¨ν„΄(Abstract Singleton)  (3) 2023.03.20
'λ””μžμΈνŒ¨ν„΄' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [λ””μžμΈνŒ¨ν„΄] μ»΄ν¬μ§€νŠΈ(Composite) νŒ¨ν„΄
  • [λ””μžμΈνŒ¨ν„΄] μ „λž΅(Strategy) νŒ¨ν„΄
  • [λ””μžμΈνŒ¨ν„΄] λ°μ½”λ ˆμ΄ν„° νŒ¨ν„΄
  • 좔상 싱글톀 νŒ¨ν„΄(Abstract Singleton)
μ„œμ•„λž‘πŸ˜ƒ
μ„œμ•„λž‘πŸ˜ƒ
Just Do ItπŸ’ͺ
  • μ„œμ•„λž‘πŸ˜ƒ
    G-Stack
    μ„œμ•„λž‘πŸ˜ƒ
  • 전체
    였늘
    μ–΄μ œ
    • 전체보기 (144)
      • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ (78)
        • C++ 기초 (28)
        • C++ μ‘μš© (18)
        • Python (18)
        • JavaScript & NodeJS (0)
        • Go (12)
        • React & NextJS (2)
        • Java (0)
      • AI (2)
      • 컴퓨터 ꡬ쑰 & 운영체제 (31)
      • μ•Œκ³ λ¦¬μ¦˜ (12)
      • λ°μ΄ν„°λ² μ΄μŠ€ (5)
      • λ„€νŠΈμ›Œν¬ (3)
      • λ””μžμΈνŒ¨ν„΄ (5)
      • μ„œλΉ„μŠ€ & 툴 (7)
      • νŠΈλ Œλ“œ&이슈 (1)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

    • GμŠ€νƒμ˜ 기술 λΈ”λ‘œκ·Έ
  • 인기 κΈ€

  • νƒœκ·Έ

    μ•Œκ³ λ¦¬μ¦˜
    pointer
    λ””μžμΈνŒ¨ν„΄
    ν•˜λ“œλ””μŠ€ν¬
    반볡문
    λ°μ΄ν„°λ² μ΄μŠ€
    λ³€μˆ˜
    init
    νŒ¨ν‚€μ§€
    RAM
    STD
    상속
    component
    쑰건문
    cpu
    ν•¨μˆ˜
    컴퓨터
    c++
    c
    μŠ€νƒ
    파이썬
    go
    λ°°μ—΄
    νŒŒμΌμž…μΆœλ ₯
    포인터
    μž¬κ·€
    가상메λͺ¨λ¦¬
    Thread
    fork
    λ©”λͺ¨λ¦¬
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.6
μ„œμ•„λž‘πŸ˜ƒ
싱글톀 νŒ¨ν„΄
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”