๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS/Architecture

[iOS ๋ฉด์ ‘์งˆ๋ฌธ] ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์ด๋ž€? (Swift Singleton Pattern)

by Fomagran ๐Ÿ’ป 2020. 12. 11.
728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค!

 

์˜ค๋Š˜ ์•Œ์•„๋ณผ ์ฃผ์ œ๋Š” ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด ์ž…๋‹ˆ๋‹ค.

 

๊ฐ„๋‹จํ•œ ์ฃผ์ œ์ด๋ฏ€๋กœ ๋ฐ”๋กœ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค~

 

Singleton


"์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ ํŒจํ„ด์—์„œ ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด์„ ๋”ฐ๋ฅด๋Š” ํด๋ž˜์Šค๋Š”, ์ƒ์„ฑ์ž๊ฐ€ ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ํ˜ธ์ถœ๋˜๋”๋ผ๋„ ์‹ค์ œ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด๋Š” ํ•˜๋‚˜์ด๊ณ  ์ตœ์ดˆ ์ƒ์„ฑ ์ดํ›„์— ํ˜ธ์ถœ๋œ ์ƒ์„ฑ์ž๋Š” ์ตœ์ดˆ์˜ ์ƒ์„ฑ์ž๊ฐ€ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. ์ด์™€ ๊ฐ™์€ ๋””์ž์ธ ์œ ํ˜•์„ ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด์ด๋ผ๊ณ  ํ•œ๋‹ค." - ์œ„ํ‚ค๋ฐฑ๊ณผ

 

๋ง ๊ทธ๋Œ€๋กœ ํด๋ž˜์Šค๊ฐ€ ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ํ˜ธ์ถœ๋˜์–ด๋„ ๋”ฑ ํ•œ ๊ฐ์ฒด๋งŒ ์ƒ์„ฑ๋˜๋„๋ก ํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ด์—์š”.

 

์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ์š”? ์‰ฝ๊ฒŒ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด์„œ ์•Œ์•„๋ด…์‹œ๋‹ค.

 

์ž ์—ฌ๊ธฐ Foma ๋ผ๋Š” ์œ ์ €๊ฐ€ ์žˆ๊ณ  ๋กœ๊ทธ์ธ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

ViewController1์—์„œ๋Š” Foma ์˜ ์ด๋ฆ„์ด ํ•„์š”ํ•˜๊ณ 

 

ViewController2์—์„œ๋Š” Foma ์˜ ๋‚˜์ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด

 

ViewController1์—์„œ Foma ๋ผ๋Š” ์œ ์ €์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ์ด๋ฆ„์„ ๋ถˆ๋Ÿฌ์˜ค๊ณ 

 

ViewController2์—์„œ Foma ๋ผ๋Š” ์œ ์ €์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ๋‚˜์ด๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ์ด 2๊ฐœ์˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋ ๊ฑฐ์—์š”.

 

์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ณณ์ด ๋งŽ์„์ˆ˜๋ก ์‹ฌํ•ด์งˆ๊ฒ๋‹ˆ๋‹ค!

 

์ด ๋•Œ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด์„œ ํ•œ ๊ณณ์— Foma ์ •๋ณด๋ฅผ ๋‹ด์•„๋†“์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ViewController1๊ณผ ViewController2์—์„œ ์›ํ•  ๋•Œ ๋นผ์„œ ์“ฐ๋Š” ๊ฒƒ์ด์ฃ !

 

"์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”๋ฐ?"

 

1. class ์•ˆ์— static ์ „์—ญ ๋ณ€์ˆ˜๋กœ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šค๋กœ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

 

2. init() private๋กœ ์„ ์–ธํ•ด์ฃผ์–ด์„œ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. (์ด๊ฒƒ์„ Thread-safe๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.)

 

์•ž์„  ์˜ˆ์ œ๋ฅผ ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด์œผ๋กœ ๋งŒ๋“ค์–ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋งŒ๋“ค์–ด์ค„์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด CurrentUser ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด์„œ ๋กœ๊ทธ์ธํ–ˆ์„ ๋•Œ ์ด๋ฆ„๊ณผ ๋‚˜์ด๋ฅผ ์ •ํ•ด์ค์‹œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์•ž์„œ ์ •ํ•ด์ค€ ์ด๋ฆ„์„ ViewController1์—์„œ ์‚ฌ์šฉํ•˜๊ณ 

๋‚˜์ด๋ฅผ ViewController2์—์„œ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•„๊ปด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์ •ํ•ด์ง„ ๊ฐ’์„ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ๊ณต์œ 

 

ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€