๐ŸŽ iOS & Swift

[iOS] ๋ฐ˜๋‚˜์ ˆ๋™์•ˆ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ 91% ๊ฐ์†Œ์‹œํ‚ค๊ธฐ

taeeekki 2023. 9. 7. 23:32

๋“ค์–ด๊ฐ€๋ฉฐ

https://apps.apple.com/kr/app/%EB%B9%84%EB%A7%88%EC%9D%B4%ED%94%8C%EB%9E%9C-%EC%97%AC%ED%96%89-%EC%BD%94%EC%8A%A4-%EC%8A%A4%ED%86%A0%EC%96%B4/id1627682568

(๐Ÿ‘‡ ์•ฑ ์Šคํ† ์–ด ๋งํฌ)

 

‎๋น„๋งˆ์ดํ”Œ๋žœ - ์—ฌํ–‰ ์ฝ”์Šค ์Šคํ† ์–ด

‎์—ฌํ–‰ ์ฝ”์Šค ์Šคํ† ์–ด, ๋น„๋งˆ์ดํ”Œ๋žœ ํ˜„์ง€์ธ ํฌ๋ฆฌ์—์ดํ„ฐ๋“ค์ด ๋งŒ๋“  ๋‹ค์–‘ํ•œ ์ปจ์…‰์˜ ์—ฌํ–‰ ์ฝ”์Šค ์ฝ˜ํ…์ธ ๋กœ ์—ฌํ–‰ ๊ณ„ํš ์‹œ๊ฐ„์„ ํ™• ์ค„์—ฌ๋ณด์„ธ์š”! ํฌ๋ฆฌ์—์ดํ„ฐ๊ฐ€ ์—„์„ ํ•œ ์žฅ์†Œ๋“ค์„ ํšจ์œจ์ ์ธ ๋ฃจํŠธ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์ผ

apps.apple.com

๋‚˜๋Š” ํ˜„์žฌ ์—ฌํ–‰ ์ฝ”์Šค ์Šคํ† ์–ด ๋น„๋งˆ์ดํ”Œ๋žœ์˜ ์œ ์ง€, ๋ณด์ˆ˜, ์‹ ๊ทœ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ๋งก๊ณ  ์žˆ๋‹ค.
.
๊ทธ๋™์•ˆ ํŒ€์— ํ•ฉ๋ฅ˜ํ•˜๊ณ  ํฌ๊ณ  ์ž‘์€ 5-6์ฐจ๋ก€์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด์™”๋Š”๋ฐ, ์งง์€ ํ˜ธํก์œผ๋กœ ์ œํ•œ๋œ ์‹œ๊ฐ„ ๋™์•ˆ์˜ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋‹ˆ ๋†“์น˜๊ณ  ์žˆ๋Š” ๋ถ€๋ถ„๋“ค์ด ์žˆ์—ˆ๋‹ค.
.
ํŠนํžˆ ์ด๋ฒˆ ์Šคํ”„๋ฆฐํŠธ ๋™์•ˆ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๊ฐ€ ํฌ๊ฒŒ ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ์„ ํ™•์ธํ–ˆ๋‹ค. ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๊ฐ€ ๋””๋ฒ„๊น…์„ ํ•˜๋‹ค๋ณด๋‹ˆ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๋๋„ ์—†์ด ์˜ฌ๋ผ๊ฐ€๊ณ  ์žˆ๋˜ ๊ฒƒ์ด๋‹ค. ํ™”๋ฉด ์ „ํ™˜์„ ์ข€ ๋งŽ์ด ํ•˜๋‹ค๋ณด๋‹ˆ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๋†’์•„์ง€๊ณ  ๊ฒฐ๊ตญ์—๋Š” ์•ฑ์ด ์ข…๋ฃŒ๋˜๋Š” ์ƒํ™ฉ์„ ๊ฒช์—ˆ๋‹ค.

 

๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด 1.93GB..?

 

๋ญ๊ฐ€ ๋ฌธ์ œ์ง€.. ๊ทธ๋ƒฅ ๋ชป ๋ณธ ์ฒ™ ํ• ๊นŒ?
๋Š” ๋ฌด์Šจ .. ใ…Žใ…Ž ์™œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š”์ง€ ์ƒ๊ฐํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

์ƒ๊ฐ์˜ ์‹œ์ž‘

๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ no, ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ yes

์ฒซ ๋ฒˆ์งธ๋Š” Memory Leak์ด๋‹ค. ์ € ์ •๋„์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด๋ฉด 200% ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์—์„œ ๋ฌธ์ œ๊ฐ€ ์‹œ์ž‘๋˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
(๋ˆ„๊ตฌ๋‚˜ ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ• ๊ฑฐ๋‹ค )

๊ทธ๋Ÿผ ๊ณผ์—ฐ ์–ด๋””์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋Š”์ง€๊ฐ€ ํ•ต์‹ฌ์ด๋‹ค.
์ด ์ˆœ๊ฐ„๋ถ€ํ„ฐ๋Š” ์ •๋ง ๋ง‰๋ง‰ํ•˜๋‹ค.

ํšŒ์‚ฌ์—์„œ ์šด์˜ํ•˜๋Š” ์„œ๋น„์Šค๋ณด๋‹ค๋Š” ์•ฑ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ž‘๊ธฐ์— ๊ดœ์ฐฎ์•„๋ณด์ด์ง€๋งŒ ๊ทธ๋ž˜๋„ ๋ง‰๋ง‰ํ•˜๋‹ค.
๋ชจ๋“  ํŒŒ์ผ๊ณผ ํ™”๋ฉด์„ ๋‹ค ์‚ดํŽด๋ด์•ผ ํ•˜๋‹ˆ๊นŒ..

์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์ž. ์–ด์ฐจํ”ผ ๋Œ์•„๊ฐˆ ๊ณณ์€ ์—†๋‹ค.

์ ‘๊ทผ 1) Instruments ์‚ฌ์šฉ

Xcode์—์„œ๋Š” ์ข‹์€ ํˆด์ธ Instruments๋ฅผ ์ œ๊ณตํ•œ๋‹ค. 100ํผ์„ผํŠธ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋งŒ์„ ์ œ๊ณตํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ์ด๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์ ‘๊ทผ์„ ์‹œ์ž‘ํ•œ๋‹ค. (์‚ฌ์šฉ๋ฒ•์€ ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”..!)

์‚ฌ์‹ค ๋‚˜๋Š” ํฐ ๊ธฐ๋Œ€๋ฅผ ์•ˆ๊ณ  Instruments ์ผฐ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ชจ๋“  ๋ˆ„์ˆ˜๋ฅผ ์žก์•„๋‚ด๊ธฐ๋ฅผ..

์˜ค, ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๊ฒฝ๊ณ ๊ฐ€ ๋‚˜์˜ค๊ณ  ์žˆ์—ˆ๋‹ค. Log๋ฅผ ์‚ดํŽด๋ณด๋‹ˆ๊นŒ ์ € ๋ถ€๋ถ„์€ Firebase SDK๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๊ทธ ๋‚ด๋ถ€์˜ ๋ฌธ์ œ์˜€๋‹ค.

 


FirebaseSDK ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ์— ๊ฐ€๋ณด๋ฉด Memory Leak์„ ์ˆ˜์ •ํ–ˆ๋‹ค๊ณ  ๋˜์–ด์žˆ๋‹ค. SDK ๋ฒ„์ „์„ ์˜ฌ๋ฆฌ๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

์ €๊ฒƒ์ด ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค.

์‹ค์ œ๋กœ Instruments๋ฅผ ์ผœ๊ณ  ๊ณ„์†ํ•ด์„œ ๋””๋ฒ„๊น…์„ ์ง„ํ–‰ํ•˜๊ณ  ํ™•์ธ์„ ํ•˜๋ฉด ๋” ์ด์ƒ ๊ฒฝ๊ณ  ํ‘œ์‹œ๋Š” ํ™•์ธํ•  ์ˆ˜ ์—†์—ˆ๋Š”๋ฐ ์—ฌ์ „ํžˆ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๋„ˆ๋ฌด ๋†’์•˜๋‹ค. ์ด์ „์ด๋ž‘ ์ฐจ์ด๊ฐ€ ์—†์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

์ ‘๊ทผ 2) Memory Object Graph์™€ deinitializer ํ™•์ธ

๊ทธ๋ ‡๋‹ค. ์ด๊ฒŒ ์–ด์ฐŒ๋ณด๋ฉด ์ •์„๊ณผ๋„ ๊ฐ™๋‹ค.

์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

์ผ๋‹จ ์ฒซ ํ™”๋ฉด๋ถ€ํ„ฐ ์‹œ์ž‘์„ ํ–ˆ๋‹ค. ๊ธฐ๊ธฐ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ Main(ํ™ˆ ํ™”๋ฉด)์—์„œ NewPlanPreview(์ฝ”์Šค ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ™”๋ฉด)์„ ๋ช‡ ๋ฒˆ ๋ฒˆ๊ฐˆ์•„์„œ ์™”๋‹ค ๊ฐ”๋‹ค ํ•ด๋ณด์•˜๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ค„์ง€ ์•Š๊ณ  ๊ณ„์†ํ•ด์„œ ๋Š˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

์ฒ˜์Œ ๋“œ๋Š” ์ƒ๊ฐ์€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ deinit ๋˜๋Š”์ง€ ๋จผ์ € ์‚ดํŽด๋ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.

NewPlanPreviewViewController๋กœ ๊ฐ€์„œ deinit ๋ฉ”์„œ๋“œ์— ๋กœ๊ทธ๋ฅผ ์ฐ์–ด๋ณด์•˜๋Š”๋ฐ Main ํ™”๋ฉด์œผ๋กœ ๋Œ์•„์˜ฌ ๋•Œ ๋„ค๋น„๊ฒŒ์ด์…˜ ์Šคํƒ์—์„œ pop์€ ๋˜์ง€๋งŒ deinit ๋ฉ”์„œ๋“œ๋Š” ํ˜ธ์ถœ๋˜์ง€ ์•Š๊ณ  ์žˆ์—ˆ๋‹ค.

 

์‹ค์ œ๋กœ ๋” ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ทธ๋ž˜ํ”„๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ์Šคํƒ์— VC๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ 7๊ฐœ๋‚˜ ์Œ“์—ฌ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
A ↔ B๋ฅผ ์™”๋‹ค๊ฐ”๋‹ค ํ•˜๋Š” ๊ฒƒ์„ 7๋ฒˆ ์ •๋„ ํ•˜๋‹ˆ๊นŒ 7๊ฐœ ์Œ“์—ฌ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์™œ deinit์ด ๋˜์ง€ ์•Š์„๊นŒ?

์›์ธ ๊ฐ€์ • 1)

์ฒ˜์Œ ์ƒ๊ฐํ–ˆ๋˜ ์ง€์ ์€ A(MainVC) ๊ณผ B(NewPlanPreviewVC)๊ฐ€ ์„œ๋กœ ๊ฐ•ํ•˜๊ฒŒ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์–ด์„œ๊ฐ€ ์•„๋‹๊นŒ? ๋ผ๋Š” ๋ถ€๋ถ„์ด์—ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์„œ๋กœ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ํ˜•ํƒœ๋‚˜ ์ฝ”๋“œ๋Š” ์—†์—ˆ๊ธฐ์— ์ด ๋ถ€๋ถ„์€ ์›์ธ์ด ์•„๋‹ˆ์—ˆ๋‹ค.

์›์ธ ๊ฐ€์ • 2)

B(NewPlanPreviewVC)๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๊ณ„์† ์‚ด์•„์žˆ๊ธฐ์—, 1๋ฒˆ์˜ ์›์ธ์ด ์•„๋‹ˆ๋ผ๋ฉด ๋‚ด๋ถ€์—์„œ ์ˆœํ™˜ ์ฐธ์กฐ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํด ๊ฒƒ์ด๋ผ๋Š” ํ•ฉ๋ฆฌ์ ์ธ ์˜์‹ฌ์„ ํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ฒœ์ฒœํžˆ ์‚ดํŽด๋ณด์•˜๋‹ค.

final class NewPlanPreviewVC: UIViewController {

...

@IBOutlet var topNavibar: NewPlanPreviewNaviBar!

...

topNavibar.backButton.press {
  self.postObserverAction(.navigationPop)
}

...

}
 

์ฝ”๋“œ๋ฅผ ์—„์ฒญ ๊ฐ„์†Œํ™”ํ–ˆ๋‹ค. ์ƒํ™ฉ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์š”์•ฝํ•˜๋ฉด ์ค‘๊ฐ„์— ๋ฒ„ํŠผ(backButton)์ด ์•ก์…˜ ํ•ธ๋“ค๋Ÿฌ ํด๋กœ์ € ๋ถ€๋ถ„์—์„œ self๋ฅผ ๊ฐ•ํ•˜๊ฒŒ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ฒ„ํŠผ์ด ์„œ๋กœ ๊ฐ•ํ•˜๊ฒŒ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ •์ƒ์ ์œผ๋กœ ํ•ด์ œ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ์ด๋‹ค.

 

๋ฌธ์ œ์˜ ์›์ธ ์ž์ฒด๋Š” ๊ฐ„๋‹จํ•ด๋ณด์ด์ง€๋งŒ, ๊ณผ์ •์€ ๊ฒฐ์ฝ” ์‰ฝ์ง€ ์•Š์•˜๋‹ค.

์ฝ”๋“œ๊ฐ€ ์•ฝ 1,000์ค„ ๊ฐ€๊นŒ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜ํ•˜๋‚˜ ๋ฌธ์ œ๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๊ฒƒ์€ ๋จธ๋ฆฌ ์•„ํ”ˆ ์ผ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ViewController์˜ ์ฝ”๋“œ๋ฅผ ์ข€ ๋ถ„๋ฆฌ์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ์ด ๊ฐ•ํ•˜๊ฒŒ ๋“ค์—ˆ๋‹ค..ใ…Ž

1+1 ๋ค์œผ๋กœ ๋ฌธ์ œ ๋ฐœ๊ฒฌ

๋˜ ์–ด๋”” ๋ˆ„์ˆ˜๋‚œ ๊ณณ์€ ์—†๋‚˜ํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๊ทธ๋ž˜ํ”„๋ฅผ ์ญ‰ ํ›‘์–ด๋ณด๋˜ ์ค‘์— ์ด์ƒํ•œ ๋ถ€๋ถ„์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๋‚ด์—๋Š” ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์„ ๋‹ด๋‹นํ•˜๋Š” ๊ฐ์ฒด์ธ ModuleFactory๊ฐ€ ์žˆ๋‹ค. ์ด ๊ฐ์ฒด๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฐ์ฒด์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์‹ฑ๊ธ€ํ†ค(- ์ ์ ˆํ•œ ์„ ํƒ์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ์œผ๋‚˜ -)์œผ๋กœ ๋งŒ๋“ค๊ฑฐ๋‚˜ ํ•˜๋Š” ๊ฒƒ์ด ๋งž๋‹ค. ํ”„๋กœ์ ํŠธ ๊ธฐ์กด์— ์ฝ”๋“œ๊ฐ€ ์งœ์—ฌ์žˆ๋˜ ๊ฒƒ๋„ ๊ทธ๋Ÿฌํ•œ ํ˜•ํƒœ๋กœ ์“ฐ์—ฌ์™”์—ˆ๋‹ค. ๋‚˜๋„ ๊ทธ๋™์•ˆ ์‹ฑ๊ธ€ํ†ค์ธ์ค„ ์•Œ์•˜๋Š”๋ฐ ๊ทธ๊ฒŒ ์•„๋‹ˆ์—ˆ๋‹ค. ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ๊ธฐ๊ณ  ์žˆ์—ˆ๋‹ค.

// before
static func resolve() -> ModuleFactory {
  ModuleFactory()
}
 

๊ธฐ์กด์—๋Š” resolve๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ModuleFactory์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ์—ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ƒ๊ฐํ•ด๋ณด๋ฉด ModuleFactory์ธ์Šคํ„ด์Šค 1๊ฐœ๋งŒ ์žˆ์–ด๋„ ๋œ๋‹ค. ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณ„์†ํ•ด์„œ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋ถˆํ•„์š”ํ•˜๋‹ค.
๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋งˆ๋‹ค ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋ฅผ ๋„˜๊ฒจ์ฃผ๊ณ  ์žˆ๋Š” ํ˜•ํƒœ๋„ ์•„๋‹ˆ๊ณ , ModuleFactory๋Š” ํŠน์ • ๊ณต๊ฐ„ ํ•œ ๊ณณ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๊ธฐ๋„ ํ–ˆ๋‹ค.

// after
static let shared = ModuleFactory()
 

๊ทธ๋ ‡๊ธฐ์— ํƒ€์ž… ์ €์žฅ ํ”„๋กœํผํ‹ฐ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‹ฑ๊ธ€ํ†ค ํ˜•ํƒœ๋กœ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝํ•ด์ฃผ์—ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ์ „์ฒด ํŒŒ์ผ ๊ณณ๊ณณ์— ๊ฐ•ํ•œ ์ฐธ์กฐ๋กœ ์—ฎ์–ด์žˆ๋Š” ๋ถ€๋ถ„์„ ์•ฝํ•œ ์ฐธ์กฐ๋กœ ์ˆ˜์ •ํ•ด์ฃผ์—ˆ๋”๋‹ˆ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ ๋“ฏ ํ•˜์˜€์œผ๋‚˜… ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์—ฌ์ „ํžˆ ๋งŽ์•˜๋‹ค. (์–ผ์ถ” ์ค„๊ธฐ๋Š” ํ–ˆ์ง€๋งŒ …)

๋Œ€์ฒด ๋ฌด์—‡์ด ๋ฌธ์ œ์ผ๊นŒ.. ๋ฌด์—‡์ด ๋‚˜๋ฅผ ์ดํ† ๋ก ํž˜๋“ค๊ฒŒ ํ•˜๋Š”๊ฐ€..

์ƒ๊ฐ์„ ํ•ด๋ณด์ž..

๋น„๋งˆ์ดํ”Œ๋žœ์ด๋ผ๋Š” ์„œ๋น„์Šค๋Š” ์ด๋ฏธ์ง€๊ฐ€ ์ •๋ง ๋งŽ์ด ์“ฐ์ด๋Š” ์„œ๋น„์Šค์ด๋‹ค.

๊ณฐ๊ณฐํžˆ ์ƒ๊ฐ์„ ํ•ด๋ณด์•˜๋‹ค. ์บ์‹ฑ์ด ๋ฌธ์ œ์ผ๊นŒ..?

์ด๋ฏธ์ง€ ์บ์‹ฑ์„ ์œ„ํ•ด์„œ ์ด๋ฏธ ์„œ๋น„์Šค ๋‚ด์—์„œ๋Š” Kingfisher๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ฐ๊ณ  ์žˆ๋‹ค.
๊ทผ๋ฐ ๊ณ ๋ฏผํ•ด๋ณด๋ฉด, ์บ์‹ฑ์€ ๊ฒฐ๊ตญ์— ๋†’์€ ์ฝ”์ŠคํŠธ์˜ ์ด๋ฏธ์ง€ ์š”์ฒญ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๊ณ 
๊ทผ๋ณธ์ ์œผ๋กœ๋Š” ์ด๋ฏธ์ง€ ์‚ฌ์ด์ฆˆ(์šฉ๋Ÿ‰)์„ ์ค„์ด๋Š” ๊ฒƒ์ด ํฌ๊ฒŒ ์ค‘์š”ํ•˜๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ด๋ฏธ์ง€์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ฐ์–ด๋ณด๋ฉด
1920 * 1080 ์ด์ •๋„ ์‚ฌ์ด์ฆˆ์˜ ๊ณ ํ™”์งˆ์˜ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

์ƒ๊ฐ๋ณด๋‹ค ์ด๋ฏธ์ง€๊ฐ€ ์žก์•„๋จน๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํฌ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋Š”๊ฐ€?

์•ฝ, ์ด๋ฏธ์ง€ ํ•ด์ƒ๋„ * 4byte๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค๋ฉด, 1920 * 1080 * 4 = 8,294,400 = ์•ฝ 8mb

์ด๋ฏธ์ง€๋„ ๋ฐ์ดํ„ฐ๋‹ค.

์ด๋ฏธ์ง€๋„ ํŠน์ • ํฌ๋งท์œผ๋กœ ์ธ์ฝ”๋”ฉ๋œ ๋ฐ์ดํ„ฐ์˜ ์ผ์ข…์ธ๋ฐ, ์ด๋ฅผ ํœด๋Œ€ํฐ์—์„œ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋””์ฝ”๋”ฉ์ด๋ผ๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ๋˜๊ณ  ๋””์ฝ”๋”ฉ ํ›„์—๋Š” ์ด๋ฏธ์ง€ ๋ฒ„ํผ๋ผ๋Š” ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ์— ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๊ฒŒ ๋œ๋‹ค. ์ด๊ฒƒ์ด ๋ Œ๋”๋ง๋˜์–ด์„œ ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๊ฒŒ ๋œ๋‹ค.

์ด๋ฏธ์ง€ ์‚ฌ์ด์ฆˆ๊ฐ€ ํฌ๋ฉด ๊ฒฐ๊ตญ์— ํฌํ•จ๋˜๋Š” ๋ฐ์ดํ„ฐ ์ •๋ณด๋„ ๋งŽ์•„์ง€๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๊ณ  ์ฐจ์ง€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋„ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

ํ™”๋ฉด์— ๋ณด์—ฌ์งˆ ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์€ ํ•œ์ •์ ์ธ๋ฐ ๊ตณ์ด ๊ณ ํ™”์งˆ ์‚ฌ์ง„์„ ํ•ด์ƒ๋„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์„ ํ•„์š”๊ฐ€ ์—†์—ˆ๋‹ค.
์‚ฌ์ด์ฆˆ ์ž์ฒด๋ฅผ ์ค„์—ฌ์ค˜์„œ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋˜๋Š” ํฌ๊ธฐ๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ด๋ณด์˜€๋‹ค.

๋ฆฌ์‚ฌ์ด์ง• / ๋‹ค์šด์ƒ˜ํ”Œ๋ง ํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋งŽ์ด ๋‚˜์™€์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ๊ณ ํ•ด์„œ ๊ตฌํ˜„์„ ํ–ˆ๋‹ค.

๊ฒฐ๋ก ..

ํ›„ ํž˜๋“ค๋‹ค.. ๊ธ€์ด ์ƒ๊ฐ๋ณด๋‹ค ๊ธธ์–ด์กŒ๋‹ค.

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ์ „์—๋Š”

๋ฌธ์ œ ์žˆ๋Š” ๋…€์„ x ๋ฌธ์ œ ์žˆ๋Š” ๋…€์„์˜ ์ฝœ๋ผ๋ณด๋กœ ๋ฌด์ง€๋ง‰์ง€ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๋ณด์ด๋‹ค๊ฐ€ ์•ฑ์ด ์ข…๋ฃŒ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๋ฐ

์ด๋ ‡๊ฒŒ ์œ„์˜ ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ์žก๊ณ , ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง•๊นŒ์ง€ ํ•ด์ฃผ๋‹ˆ๊นŒ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ํ˜„์ €ํžˆ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
์•ฑ ์‚ฌ์šฉ ์‹œ ํ‰๊ท  100 - 200 mb ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์œ ์ง€๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

๋๊นŒ์ง€์™€์„œ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์—„์ฒญ ํฐ ์›์ธ/๋ฌธ์ œ๋Š” ์•„๋‹ˆ์—ˆ์ง€๋งŒ, ์‚ฌ์†Œํ•˜๊ฒŒ ๋†“์น  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„๋“ค์ด ํฐ ์ด์Šˆ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์— ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ผผ๊ผผํžˆ ์ฝ”๋“œ๋ฅผ ์งœ์•ผ๊ฒ ๋‹ค๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

๋งˆ์ง€๋ง‰, ์Šคํฌ๋ฆฐ ์ƒท

๋ฉ”๋ชจ๋ฆฌ๋„ ์ค„์ค„ ์ƒˆ๊ณ , ๋‚ด ๋ˆˆ๋ฌผ๋„ ์ค„์ค„ ์ƒˆ๋Š” ์ƒํ™ฉ + ์ด๋ฏธ์ง€๋„ ์—„์ฒญ ํฐ ๊ฑฐ ์“ฐ๋Š” ์ƒํ™ฉ;;

๊ทธ๋ƒฅ ๋‹ค ํ‹€์–ด๋ง‰์•„๋ฒ„๋ฆฐ ๊ฒฝ์šฐ -> ์šฉ๊ฐํ–ˆ๋‹ค.

 

๊ฒฐ๋ก : ๊ธฐ์กด ๋Œ€๋น„ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ตœ๋Œ€ 91% ๊ฐ์†Œ ๐ŸŽ‰

 

์—ฌ๊ธฐ๊นŒ์ง€ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)

๋ ˆ์ด์•„์›ƒ์„ ๋‹ค๋“ฌ๊ณ  ์‹ถ์ง€๋งŒ,, ํž˜์— ๋ถ€์ณ์„œ ์ •๋ˆ๋œ ๊ธ€์„ ์ฝ๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š” ใ…Žใ…Ž

๊ทธ๋ฆฌ๊ณ  ์ž˜๋ชป๋œ ๋‚ด์šฉ์ด๋‚˜ ํ”ผ๋“œ๋ฐฑ ์žˆ์œผ๋ฉด ์–ธ์ œ๋“ ์ง€ ํ™˜์˜์ž…๋‹ˆ๋‹ค.

 

https://github.com/Taehyeon-Kim/Today-I-Learned/issues/104

 

[Memory] ๋ฐ˜๋‚˜์ ˆ๋™์•ˆ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ 91% ๊ฐ์†Œ์‹œํ‚ค๊ธฐ · Issue #104 · Taehyeon-Kim/Today-I-Learned

๋“ค์–ด๊ฐ€๋ฉฐ ๋‚˜๋Š” ํ˜„์žฌ ์—ฌํ–‰ ์ฝ”์Šค ์Šคํ† ์–ด ๋น„๋งˆ์ดํ”Œ๋žœ์˜ ์œ ์ง€, ๋ณด์ˆ˜, ์‹ ๊ทœ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ๋งก๊ณ  ์žˆ๋‹ค. . ๊ทธ๋™์•ˆ ํŒ€์— ํ•ฉ๋ฅ˜ํ•˜๊ณ  ํฌ๊ณ  ์ž‘์€ 5-6์ฐจ๋ก€์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด์™”๋Š”๋ฐ, ์งง์€ ํ˜ธํก์œผ๋กœ ์ œํ•œ๋œ ์‹œ๊ฐ„ ๋™

github.com