reason: 'Don't know about flushed view

iOS์—์„œ addSubView ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ทฐ ๊ณ„์ธต ๊ตฌ์กฐ์—์„œ ๋ทฐ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ์„œ๋ธŒ๋ทฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜์—ˆ๊ฑฐ๋‚˜, ์ด์ „์— ๋‹ค๋ฅธ ๋ทฐ์— ์ถ”๊ฐ€๋˜์—ˆ์„ ๊ฒฝ์šฐ, addSubView๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ด๋ฏธ ์ œ๊ฑฐ๋œ ๋ทฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๋ทฐ๊ฐ€ ์•„์ง ํ™”๋ฉด์— ํ‘œ์‹œ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋ทฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— ์Šˆํผ ๋ทฐ์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋ทฐ๋ฅผ ๋ณด์ด๊ฒŒ ํ•˜๊ฑฐ๋‚˜ setNeedsDisplay ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ทฐ๋ฅผ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋„๋ก ์ง€์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๋ทฐ๊ฐ€ ์Šˆํผ ๋ทฐ์™€ ์ด๋ฏธ ์„œ๋กœ ๋‹ค๋ฅธ ๊ณ„์ธต ๊ตฌ์กฐ์— ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ทฐ๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์Šˆํผ ๋ทฐ์™€ ์ƒ๊ด€์—†๋Š” ๋ทฐ๋ฅผ ๋งŒ๋“ค๋ ค๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๋ทฐ..

  • textsms

๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด(Decorator Pattern)

๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด(Decorator Pattern)์ด๋ž€? ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์€ ๊ฐ์ฒด ์ง€ํ–ฅ ๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ, ๊ธฐ์กด์˜ ๊ฐ์ฒด์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด, ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฐ์ฒด์˜ ์ฑ…์ž„๊ณผ ์—ญํ• ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์–ด ์œ ์—ฐ์„ฑ์ด ๋†’์€ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์˜ ๊ตฌ์„ฑ์š”์†Œ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. Component: ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด์—์„œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•  ๊ฐ์ฒด์˜ ์ธํ„ฐํŽ˜์ด์Šค ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ConcreteComponent: Component ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌ์ฒด์ ์ธ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. Decorator: Component ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ , ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๋ถ€์—ฌํ•  ๊ฐ์ฒด์˜ ์ถ”์ƒ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ConcreteDecorator: Decorator ํด..

  • textsms

์–ด๋Œ‘ํ„ฐ ํŒจํ„ด(Adapter Pattern)

์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์€ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง„ ํด๋ž˜์Šค๋ฅผ ํด๋ผ์ด์–ธํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ํŒจํ„ด์œผ๋กœ, ์‹ค์ œ๋กœ ๋งŽ์€ ๊ฒฝ์šฐ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. 1. ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํด๋ผ์ด์–ธํŠธ์—์„œ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. // ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ธํ„ฐํŽ˜์ด์Šค class ExternalLib { func doSomethingComplicated() { // ... } } // ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•  ์ธํ„ฐํŽ˜์ด์Šค protocol MyLib { func doSomethingSimple() } // ์–ด๋Œ‘ํ„ฐ..

  • textsms

์ž„์‹œ๋ณ€์ˆ˜ ๋ถ„๋ฆฌ (Split Temporary Variable)

์ž„์‹œ ๋ณ€์ˆ˜ ๋ถ„๋ฆฌ๋Š” ๋ฆฌํŒฉํ† ๋ง ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, ํŠน์ • ํ‘œํ˜„์‹์ด ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ๊ธธ์–ด์„œ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์ด ๋‚˜๋น ์ง€๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ํ‘œํ˜„์‹์„ ์ž„์‹œ ๋ณ€์ˆ˜๋กœ ์ถ”์ถœํ•˜์—ฌ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ Swift ์˜ˆ์‹œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋Š” ํ•™์ƒ๋“ค์˜ ์ˆ˜ํ•™ ์‹œํ—˜ ์„ฑ์ ์„ ํ‰๊ท  ๋‚ด๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ์ฝ”๋“œ์—์„œ๋Š” ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์„ ๋ชจ๋‘ ๋”ํ•œ ๊ฐ’์„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜์—ฌ ๊ณ„์‚ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. func calculateAverageScore(scores: [Int]) -> Double { var totalScore = 0 for score in scores { totalScore += score } return Double(totalScore) / Double(scores.count) } ์œ„ ์ฝ”๋“œ๋ฅผ ์ž„์‹œ ๋ณ€์ˆ˜ ๋ถ„๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋จผ..

  • textsms

์ง๊ด€์  ์ž„์‹œ๋ณ€์ˆ˜ ์‚ฌ์šฉ (Introduce Explaining Variable)

์ง๊ด€์  ์ž„์‹œ๋ณ€์ˆ˜ ์‚ฌ์šฉ (Introduce Explaining Variable)์€ ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์žกํ•œ ์‹์ด๋‚˜ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ณ , ์ด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์ด๋ฆ„์œผ๋กœ ๋ช…๋ช…ํ•˜์—ฌ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๋Š” ๋ฆฌํŒฉํ† ๋ง ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. func calculateTotalPrice(price: Double, count: Int) -> Double { var totalPrice = price * Double(count) if count > 10 { totalPrice *= 0.9 } return totalPrice } ์œ„ ์ฝ”๋“œ์—์„œ totalPrice๋Š” price์™€ count๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐ๋˜๋ฏ€๋กœ, ์ด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ง๊ด€์ ์ธ ์ž„์‹œ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€๋…์„ฑ์„..

  • textsms

๋ฉ”์„œ๋“œ ๋‚ด์šฉ ์ง์ ‘ ์‚ฝ์ž…

๋ฉ”์„œ๋“œ ๋‚ด์šฉ ์ง์ ‘ ์‚ฝ์ž… (Inline Method)์€ ๋ฉ”์„œ๋“œ ๋‚ด์šฉ์„ ํ˜ธ์ถœํ•œ ๊ณณ์— ์ง์ ‘ ์‚ฝ์ž…ํ•˜์—ฌ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฆฌํŒฉํ† ๋ง ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜๋ฉด ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์— ๋”ฐ๋ฅธ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฝ”๋“œ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. func calculateTotalPrice(price: Double, count: Int) -> Double { var totalPrice = price * Double(count) if count > 10 { totalPrice *= 0.9 } return totalPrice } ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š” ์ฝ”๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ตฐ๋ฐ์— ์‚ฌ์šฉ๋œ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฉ”์„œ๋“œ ๋‚ด์šฉ์„ ์ง์ ‘ ์‚ฝ์ž…ํ•  ..

  • textsms