์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[Design Patterns] ์‹ฑ๊ธ€ํ†ค(Singleton) ํŒจํ„ด

๐ŸŽ iOS/Patterns & Arch

by AHN.Jihyeon 2024. 6. 3. 18:01

๋ณธ๋ฌธ


 

๐Ÿ”Ž  1 . ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด 


์œ ์ผํ•˜๊ฒŒ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ

ํŠน์ • ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์•ฑ์ „์ฒด์—์„œ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๊ณ  

์•ฑ ์ „์—ญ์—์„œ ๋ชจ๋‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค. 

 

1. ๊ฐœ๋ณ„์ ์ธ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Œ

2. ๋‹จ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์žฌํ™œ์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ํ™œ์šฉํ•  ๋•Œ ์ ํ•ฉ. 

 

์œ„์น˜์„œ๋น„์Šค, ๋กœ๊น… ์„œ๋น„์Šค, UserDefaults ์ „์ฒด ๊ด€๋ฆฌ ํด๋ž˜์Šค, ๋„คํŠธ์›Œํฌ ์ค‘๋ณต ๋กœ์ง ๊ด€๋ฆฌ ํด๋ž˜์Šค ๋“ฑ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ 

 

static ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์œผ๋ฉด ์ œ์ผ ๋จผ์ € ํ˜ธ์ถœ๋  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ„๋‹ค. 

์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๊ฐ€ ๋ถˆ๋ฆฌ๊ณ  ๋‚œ ๋’ค ์•ฑ์ด ์ข…๋ฃŒ๋  ๋–„๊นŒ์ง€ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š” ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์—

ํ˜ธ์ถœํ•˜๋Š” ๋ชจ๋“  ๋ถ€๋ถ€์€ ๋‹จ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  ์ ‘๊ทผํ•œ๋‹ค. 

์ด๋•Œ, ๋ฉ”๋ชจ๋ฆฌ์ ์œผ๋กœ ์†ํ•ด๋ฅผ ๋ณด์ง€ ์•Š๋Š”์ง€ ๋ฐ˜๋“œ์‹œ ๊ณ ๋ คํ•ด๋ณผ ๊ฒƒ.  

 

class Singleton {
	//static let์œผ๋กœ ์„ ์–ธ 
	static let shared = Singleton()  //static let ์ด๋ฆ„ = ๊ฐ์ฒด ์ƒ์„ฑ()
    var mbti = ""
    
    private init(){}   //์ถ”๊ฐ€์ ์ธ ๊ฐ์ฒด ์ƒ์„ฑ ๋ชปํ•จ. ์ž๊ธฐ ์ž์‹ ์„ ์ดˆ๊ธฐํ™”ํ•ด์„œ static let ๋ณ€์ˆ˜์— ํ• ๋‹น
    
    func printInfo() {
        print("mbti = \(mbti)")  
    }
}


Singleton.shared.printInfo()  // ์ถœ๋ ฅ: "" - ํด๋ž˜์Šค์—์„œ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ํž™ ์˜์—ญ์— ์กด์žฌ  

Singleton.shared.mbit = "ENFP"   
Singleton.shared.printInfo()     //์ถœ๋ ฅ: "ENFP"

 

 

 

 

 

 

 

๐Ÿ”Ž  2. ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด๊ณผ ์˜์กด์„ฑ ์ฃผ์ž… ๋น„๊ต


์‹ฑ๊ธ€ํ†ค ํŒจํ„ด

์žฅ์ 

์ „์—ญ ์ ‘๊ทผ: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด ๊ณตํ†ต ๋ฆฌ์†Œ์Šค๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์›€.

๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ: ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์ƒ์„ฑ๋˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ.

๊ตฌํ˜„ ์šฉ์ด์„ฑ: ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ .

 

๋‹จ์ 

ํ…Œ์ŠคํŠธ ์–ด๋ ค์›€: ์ „์—ญ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ต๋‹ค. ํŠนํžˆ, ์ƒํƒœ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ฑฐ๋‚˜ ๊ฒฉ๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ค์›Œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ.

์˜์กด์„ฑ ์ˆจ๊น€: ํด๋ž˜์Šค ๊ฐ„์˜ ์˜์กด์„ฑ์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์•„ ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Œ.

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ์ด์Šˆ: ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ํ™˜๊ฒฝ์—์„œ ์ ์ ˆํžˆ ์„ค๊ณ„๋˜์ง€ ์•Š์œผ๋ฉด ๋™๊ธฐํ™” ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ.

 

 

์˜์กด์„ฑ ์ฃผ์ž… (Dependency Injection)

์žฅ์ 

ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ: ์˜์กด์„ฑ์ด ๋ช…ํ™•ํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚˜๋ฏ€๋กœ ๋ชจ์˜ ๊ฐ์ฒด(mock)๋ฅผ ์‚ฌ์šฉํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์‰ฌ์›€.

์œ ์—ฐ์„ฑ ์ฆ๊ฐ€: ์˜์กด์„ฑ์„ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์•„์ง€๊ณ , ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ ๋†’์Œ.

๋ช…ํ™•ํ•œ ์˜์กด์„ฑ: ํด๋ž˜์Šค ๊ฐ„์˜ ์˜์กด์„ฑ์ด ๋ช…ํ™•ํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚˜ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋†’์Œ.

 

๋‹จ์ 

๊ตฌํ˜„ ๋ณต์žก์„ฑ: DI ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์„ค์ •ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋‹ค์†Œ ๋ณต์žก.

๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜ ๊ฐ€๋Šฅ์„ฑ: ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ ๊ฐ€๋Šฅ.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

๐Ÿ”— Reference 


 

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ