์ „์ฒด ๊ธ€

์ „์ฒด ๊ธ€

    [Flutter / Dart] What is Equatable?

    ๋ธ”๋กœ๊ทธ ๋‚ด์˜ ๊ฒŒ์‹œ๋ฌผ์€ PC ๋ฒ„์ „์— ์ตœ์ ํ™” ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ Equatable์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. BLoC์— ๋Œ€ํ•œ ๊ธ€์„ ์“ฐ๊ธฐ ์ „์— BLoC์—์„œ ์‚ฌ์šฉํ•˜๋Š” Equatable์— ๋Œ€ํ•œ ์ •๋ฆฌ๊ฐ€ ์šฐ์„ ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ๋ณธ๋ก ์œผ๋กœ ๋“ค์–ด๊ฐ€๋ณด์ฃ ! ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. class Person { final int pid; final String name; final int age; Person(this.pid, this.name, this.age); } void main() { Person p1 = new Person(20221234, "kodo", 25); Person p2 = new Person(20221234, "kodo", 25); (p1 == p2) ? print("same") : ..

    [Flutter] BLoC ํŒจํ„ด์œผ๋กœ ์ž๋™ ๋กœ๊ทธ์ธ, Splash Screen ๊ตฌํ˜„ํ•˜๊ธฐ - 1

    ๋ธ”๋กœ๊ทธ ๋‚ด์˜ ๊ฒŒ์‹œ๋ฌผ์€ PC ๋ฒ„์ „์— ์ตœ์ ํ™” ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ํ”Œ๋Ÿฌํ„ฐ์—์„œ ์ž๋™ ๋กœ๊ทธ์ธ์™€ Splash Screen์„ ๊ตฌํ˜„ํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ ๋กœ๊ทธ์ธ์€ ์•ฑ ๊ฐœ๋ฐœ์„ ์ ‘ํ•ด๋ดค๋‹ค๋ฉด ํ•œ ๋ฒˆ์ฏค์€ ๊ตฌํ˜„ํ•ด๋ดค์„ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. SharedPreference๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์˜ค๋Š˜์€ ์กฐ๊ธˆ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ BLoC๋ฅผ ํ†ตํ•ด์„œ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ์š”, BLoC๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™ ๋กœ๊ทธ์ธ๊ณผ Splash Screen์„ ํ•˜๋‚˜์˜ ๋กœ์ง์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ๋ฒˆ ์‹œ์ž‘ํ•ด๋ณด์ฃ . ๋ฐ”๋กœ BLoC๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด์˜ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  BLoC๋กœ ๋ฆฌํŽ™ํ† ๋งํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์™€ ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ค ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š”์ง€๊ฐ€ ์ค‘์š”ํ•˜๋‹ˆ๊นŒ์š”. ์ž๋™ ๋กœ๊ทธ์ธ ์•ž์„œ ๋ง์”€๋“œ๋ฆฐ ๊ฒƒ์ฒ˜๋Ÿผ SharedPrefer..

    [Flutter / Dart] What is Singleton?

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

    [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] 124 ๋‚˜๋ผ์˜ ์ˆซ์ž

    ๋ฌธ์ œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - 124 ๋‚˜๋ผ์˜ ์ˆซ์ž programmers.co.kr ํ’€์ด ์–ธ์–ด Python ํ’€์ด ๋ฐฉ๋ฒ• ์šฐ์„  ์ง„๋ฒ• ๋ณ€ํ™˜ ๋ฌธ์ œ์ด๋‹ค. ์ข€ ํŠน์ดํ•˜๊ธด ํ•œ๋ฐ 3๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ 3์ง„๋ฒ•์„ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ 10์ง„์ˆ˜ 3์„ ๋ณ€ํ™˜ํ–ˆ์„ ๋•Œ 10์ด ์•„๋‹ˆ๋ผ 4๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๋ณ€ํ™˜์„ ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ผ๊นŒ? ์šฐ์„  ๋ณ€ํ™˜ ์ „๊ณผ ๋ณ€ํ™˜ ํ›„๋ฅผ ํ‘œ๋กœ ๋‚˜ํƒ€๋‚ด๋ดค๋‹ค. 10์ง„๋ฒ• 3์ง„๋ฒ• 124 ๋‚˜๋ผ 1 1 1 2 2 2 3 10 4 4 11 11 5 12 12 6 20 14 3์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ์—๋งŒ ํŠน์ดํ•œ ๊ฐ’์„ ๊ฐ–๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ ์—ฌ๊ธฐ์—๋„ ๊ทœ์น™์ด ์žˆ๋‹ค. ๋งจ ์•ž ์ˆซ์ž์—์„œ -1 ์„ ํ•˜๊ณ  ๋’ค์˜ 0์„ 4๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค๋Š” ์ . ์ฆ‰, 3์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ ๋ชซ์—์„œ -1์„ ํ•ด์ค€๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ์ฝ”๋“œ def solu..

    [LeetCode] 167. Two Sum II - Input Array Is Sorted

    ์ž…๋ ฅ ์˜ˆ์‹œ ํ’€์ด ์–ธ์–ด Python ํ’€์ด ๋ฐฉ๋ฒ• ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ target์„ ๋งŒ์กฑํ•˜๋Š” ๋‘ ์›์†Œ์˜ index๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. ์˜ค๋ฆ„์ฐจ์ˆœ์„ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์ด์—ˆ๊ธฐ์— BST ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ์–ด๋ ต์ง€ ์•Š๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋‹ค. ์ฝ”๋“œ class Solution: def twoSum(self, numbers: List[int], target: int) -> List[int]: start = 0 end = len(numbers) - 1 while start target: end -= 1 elif mid < target: start += 1 else: return [start + 1, end + 1] ๊ฒฐ๊ณผ

    [Android] ์•Œ๋ฆผ ํด๋ฆญ์‹œ Activity, Fragment๋กœ ์ด๋™

    ๊ตฌํ˜„ ๋ฌธ์ œ ์•Œ๋ฆผ ํด๋ฆญํ•˜๋ฉด ํŠน์ • ํ™”๋ฉด์„ ๋„์–ด์ค˜์•ผ ํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• PendingIntent ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. Notification ์†์„ฑ์— Intent ์†์„ฑ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด ๋•Œ PendingIntent ๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค. ๋˜ํ•œ PendingIntent ๊ฐ์ฒด์— putExtra ๋กœ ํ™”๋ฉด ์ด๋™์œผ๋กœ ๋„์–ด์ค„ Fragment ์˜ ์‹๋ณ„์ž๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ MainActivity ๊ฐ€ onCreate ๋์„ ๋•Œ getStringExtra ๋กœ Fragment ์˜ ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ํ•ด๋‹น Fragment ๋กœ ์ „ํ™˜ํ•œ๋‹ค. ์ฝ”๋“œ - ReceiverService ์šฐ์„  ์ง€๋‚œ๋ฒˆ์— ๊ตฌํ˜„ํ–ˆ๋˜ ์ด๋ฒคํŠธ ์ˆ˜์‹  ์•Œ๋ฆผ์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™”๋‹ค. // ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ–ˆ์„ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆผ ์ „์†ก private fun occurEven..

    [Android] ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์†Œ์ผ“ ํ†ต์‹ ์œผ๋กœ ์ด๋ฒคํŠธ ์ˆ˜์‹  ํ›„ ์•Œ๋ฆผ

    ๊ตฌํ˜„ ๋ฌธ์ œ ์กธ์—…ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์„œ๋ฒ„์—์„œ ํŠน์ •ํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด ์ด๋ฒคํŠธ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ 2๊ฐœ์˜ ์•Œ๋ฆผ์„ ๋„์–ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ–ˆ๋‹ค. ์†Œ์ผ“ ํ†ต์‹ ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š”๋ฐ Activity ์ด๋™์ด๋‚˜ Fragment ์ด๋™์— ๊ด€๊ณ„ ์—†์ด ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•œ ์†Œ์ผ“ ํ†ต์‹ ์ด ํ•„์š”ํ–ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• MVVM๊ณผ ๋‹จ์ผ Activity๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ์— Activity๋Š” MainActivity ํ•œ ๊ฐœ ๋ฟ์ด์—ˆ๊ณ  MainActivity ์—์„œ ์†Œ์ผ“ ํ†ต์‹ ์„ ๊ตฌํ˜„ํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. ํ•˜์ง€๋งŒ ์•ฑ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์—์„œ๋„ ์•Œ๋ฆผ์„ ์ˆ˜์‹ ํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ์—ˆ๊ณ  ์ด๋ฅผ ์œ„ํ•ด Service๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ๋ฌผ๋ก  MainActivity ์•ˆ์— ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์†Œ์ผ“ ํ†ต์‹ ์ด MainActivity ์ž์ฒด์— ์ข…์†๋˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜๊ธฐ์— ..

    [TIL] 22.06.03

    iOS ์—์„œ ํ™”๋ฉด ์ด๋™์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” 4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ViewController ์—์„œ ํ™”๋ฉด ์ „ํ™˜ ViewController ๊ฐ€ ๋‹ค๋ฅธ ViewController ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ™”๋ฉด ์ „ํ™˜ NavigationViewController ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™”๋ฉด ์ „ํ™˜ ํ™”๋ฉด ์ „ํ™˜์šฉ ๊ฐ์ฒด Segue ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™”๋ฉด ์ „ํ™˜ 1. ViewController ์—์„œ ํ™”๋ฉด ์ „ํ™˜ ViewController ์œ„์˜ View ๋ฅผ ๋‹ค๋ฅธ View ๋กœ ๊ต์ฒดํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋กœ ์ธํ•ด ์‚ฌ์šฉ์„ ์ง€์–‘ํ•œ๋‹ค. ํŠน์ •ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•œ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ๋Š” View ์˜ Visibility ์†์„ฑ์„ ์ด์šฉํ•˜์—ฌ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ์‹์„ ์ž์ฃผ ์‚ฌ์šฉํ–ˆ์—ˆ๋Š”๋ฐ iOS ์—์„œ๋Š” ์ง€์–‘ํ•œ๋‹ค๊ณ  ํ•˜๋‹ˆ ์ข€ ์‹ ๊ธฐํ–ˆ๋‹ค. ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„  ์ข€ ๋” ์ฐพ์•„๋ณด๊ณ  ์ •๋ฆฌํ•ด๋ด์•ผ๊ฒ ๋‹ค. 2. ViewContr..

    [TIL] 22.05.27

    ๊ณต๋ถ€ํ•œ ๊ฒƒ Swift ๋ฌธ๋ฒ• ์•Œ๊ฒŒ๋œ ๊ฒƒ 1. Guard Guard ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์กฐ๊ฑด์— false์ธ ๊ฒฝ์šฐ์—๋Š” else ๊ตฌ๋ฌธ์ด ์‹คํ–‰๋˜์–ด ์ดํ›„์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•œ๋‹ค. continue ์™€ ๋น„์Šทํ•˜๋‹ค. import Foundation func guardTest(value : Int?) { guard let value = value else {return} print(value) } guardTest(value : 2) guardTest(value : nil) // ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅ๋˜์ง€ ์•Š์Œ ์กฐ๊ฑด๋ฌธ๊ณผ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ Guard ๋Š” else ๋ฅผ ๊ฐ•์ œํ•œ๋‹ค. // ์ผ๋ฐ˜์ ์ธ ์กฐ๊ฑด๋ฌธ if ์กฐ๊ฑด == true { // ์ฐธ์ธ ๊ฒฝ์šฐ์— ์‹คํ–‰ํ•  ์ฝ”๋“œ } else { // ๊ฑฐ์ง“์ธ ๊ฒฝ์šฐ์— ์‹คํ–‰ํ•  ์ฝ”๋“œ } // G..

    [TIL] 22.05.26

    ๊ณต๋ถ€ํ•œ ๊ฒƒ Swift ๋ฌธ๋ฒ• ์•Œ๊ฒŒ๋œ ๊ฒƒ 1. ํด๋ž˜์Šค์™€ ๊ตฌ์กฐ์ฒด์˜ ์ฐจ์ด 1. ๊ณตํ†ต์  ๊ฐ’์„ ์ €์žฅํ•  ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Œ ํ•จ์ˆ˜์  ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Œ ๋‚ด๋ถ€ ๊ฐ’์„ .๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•ด ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ Extension ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Œ Protocol ์„ ์ฑ„ํƒํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ 2. ์ฐจ์ด์  - ํด๋ž˜์Šค ์ฐธ์กฐ ํƒ€์ž… ARC ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌ ์ƒ์† ๊ฐ€๋Šฅ ํƒ€์ž… ์บ์ŠคํŒ… ์„ ํ†ตํ•ด ๋Ÿฐํƒ€์ž„์—์„œ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์˜ ํƒ€์ž…์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ deinit ์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Œ ๊ฐ™์€ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•œ ๋’ค์— ๊ฐ’์„ ๋ณ€๊ฒฝ์‹œํ‚ค๋ฉด ๋ชจ๋“  ๋ณ€์ˆ˜์— ์˜ํ–ฅ์„ ์คŒ (๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ณต์‚ฌ) - ๊ตฌ์กฐ์ฒด ๊ฐ’ ํƒ€์ž… ๊ฐ™์€ ๊ตฌ์กฐ์ฒด๋ฅผ ..