Struct์ Class๊ตฌ์กฐ์ฒด์ ํด๋์ค๋ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ ๊ฐ์ง ์ ์์ต๋๋ค. ํ๋์ ์๋ก์ด ์ฌ์ฉ์ ์ ์ ๋ฐ์ดํฐ ํ์
์ ๋ง๋ค์ด ์ฃผ๋ ๊ฒ์
๋๋ค. ๊ณตํต์ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.์ด๊ธฐํ ์ํ ์ค์ ์ ์ํ ์ด๊ธฐํ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.extension๊ณผ ๊ฐ์ ๊ธฐ๋ฅ ํ์ฅ์ด ๊ฐ๋ฅํฉ๋๋ค.Protocol์ ์ฑํํ์ฌ ๊ธฐ๋ฅ ์ค์ ํ ์ ์์ต๋๋ค. ์ฐจ์ด์ Struct๊ตฌ์กฐ์ฒด๋ ๊ฐ ํ์
์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์คํ ์์ญ์ ์ ์ฅ๋ฉ๋๋ค.์คํ ์์ญ์ ์ปดํ์ผ ํ์์ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๋ฏ๋ก ๊ฐ์ ์ฐพ๊ธฐ ๋น ๋ฆ
๋๋ค.๊ฐ ํ์
์ ๊ฐ์ฒด๊ฐ ๋ณ์์ ํ ๋น๋๋ฉด ํด๋น ๊ฐ์ฒด์ ๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ์ ๊ทธ๋๋ก ์ ์ฅ๋ฉ๋๋ค. ํด๋น ๋ณ์๋ฅผ ๋ ๋ค๋ฅธ ๋ณ์์ ํ ๋นํ์ ๋ ๊ฐ์ด ๋ณต์ฌ๋์ด, ๋ณต์ฌ๋ ๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ฉ๋๋ค. Classํด๋์ค๋ ์ฐธ์กฐ ํ์
..
๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ
@Observable Macro@Observable ๋งคํฌ๋ก๋ ObservableObject ๋ฐ ํด๋น @Published ๋งค๊ฐ๋ณ์๋ฅผ ๋์ฒดํ๊ธฐ ์ํด WWDC 2023์์ ์ฒ์ ๋์
๋์์ต๋๋ค.๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฒ์๋ ๋ชจ๋ ์์ฑ์ ์ ๊ฑฐํ๋ ๋์์ ๋ณ๊ฒฝ์ด ์๋์ผ๋ก ๋ฐ์ํ ๋ View๋ฅผ ๋ค์ ๊ทธ๋ฆด ์ ์์ต๋๋ค.์ด์ ๋ฐฉ์ ObservableObject@Observable Macro@State, @Binding, @Environment๋ณํ ์์ObservableObject ํ๋กํ ์ฝ@Observable ๋งคํฌ๋ก๋ก ๋์ฒด@Published, @ObservedObject์ญ์ @StateObject, @EnvironmentObject@State, @Environment๋ก ๋์ฒด h..
Property Wrapper ํ๋กํผํฐ ๋ํผ๋ ํ๋กํผํฐ๋ฅผ ํน์ ํ์
์ผ๋ก ๊ฐ์ธ์ ์ถ๊ฐ์ ์ธ ๋์์ด๋ ๊ธฐ๋ฅ์ ๊ฐ์ง ํ๋กํผํฐ๋ฅผ ์ ์ธํ ๋ ์ฌ์ฉํฉ๋๋ค. ์ฆ, ํด๋น ๋ณ์์ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ๋ถ์ฌ์ฃผ๋ ๋ฌธ๋ฒ์
๋๋ค. ์๋ ๋ค์ฏ ๊ฐ์ง ํ๋กํผํฐ ๋ํผ์ ๋ํด์ ๊ณต๋ถํด๋ณด์์ต๋๋ค. State Binding ObservableObject EnvironmentObject Environment @State State ํ๋กํผํฐ ๋ํผ๋ ๊ตฌ์กฐ์ฒด(Struct) ๋ด์ ํ๋กํผํฐ๋ฅผ ์์ ํ ์ ์๊ฒ ๋์์ค๋๋ค. ๋ํ State๋ก ์ ์ธ๋ ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ์ ๋ ํด๋น ๋ณ์๋ฅผ ๊ฐ์ ธ๋ค ์ด View๊ฐ ํฌํจ๋ body ์ ์ฒด๋ฅผ ๋ค์ ๊ทธ๋ ค์ค๋๋ค. struct PlayButton: View { @State private var isPlaying: Bool = fa..
๋ฌธ์ ์ํฉ ๋ด๋น๊ฒ์ด์
์์ญ์ ๋ด๋น๊ฒ์ด์
๋ฐ ๋ฒํผ๊ณผ ํ์ดํ์ ํจ๊ป ์ฌ์ฉํ๋๊น ๋ค๋ฅธ ํญ์ผ๋ก ์ด๋ ์ ๋ฒํผ ์์ญ์ด ์ฌ๋ฐฑ์ผ๋ก ์๊ธฐ๋ ์ด์๊ฐ ๋ฐ์ํ์ต๋๋ค. ์๋์ ๊ฐ์ ํ๋ฉด์์๋ ๋ฒํผ๋, ํ์ดํ๋ ํจ๊ป ์ฐ์ด๊ธฐ ๋๋ฌธ์ ์ฌ๋ฐฑ์ด ์์ด ๋ณด์ด์ง๋ง ํ์ดํ์ด ๋๋ฌด ์ปค์ ํ๋ฉด์ ๋๋ฌด ๋ง์ ์์ญ์ ์ฐจ์งํ๋ ์ด์๋ ๋ณด์์ต๋๋ค. ๋ฌธ์ ํด๊ฒฐ ๋ด๋น๊ฒ์ด์
ํ์ดํ์ ์์ ๊ณ UIBarButtonItem์ UILabel์ ์ถ๊ฐํ์ฌ ํ๋ฉด์ ๋ณด์ด๋ ์ฌ๋ฐฑ์ ์์จ ์ ์์์ต๋๋ค. let titleLabel: UILabel = { let label = UILabel() label.text = "๋ง์ดํ์ด์ง" label.font = .systemFont(ofSize: 24, weight: .bold) return label }() let titleButt..
์ต์
๋ (Optional)์ต์
๋์ ๊ฐ์ด ์์ ์๋ ์๊ณ , ์์ ์๋ ์๋ ์ํฉ์ ๋ํ๋
๋๋ค. ์ต์
๋์ ํน์ ํ์
์ ๊ฐ์ ํฌํจํ ์๋ ์๊ณ , nil๊ณผ ๊ฐ์ด ์๋ฌด ๊ฐ๋ ํฌํจํ์ง ์์ ์๋ ์์ต๋๋ค.์ต์
๋์ด ํ์ํ ์ด์ ๋ ๊ฐ์ด ํ ๋น๋์ง ์์ ์ํฉ์ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํจ์
๋๋ค. Swift์์๋ ํ์
์ ์์ ์ฑ์ ์ค์์ํ๊ธฐ ๋๋ฌธ์ ์ต์
๋์ ํตํด ๊ฐ์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ๋ช
์์ ์ผ๋ก ํํํฉ๋๋ค.์ต์
๋์ nil์ ์ฌ์ฉํ ์ ์๋ ํ์
๊ณผ ์๋ ํ์
์ ๊ตฌ๋ถํฉ๋๋ค. nil์ ์ฌ์ฉํ ์ ์๋ ํ์
์ ์ต์
๋ ํ์
์ด๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ์๋์ ๊ฐ์ด ๋ณ์ ์ ์ธํ ๋, ๋ฐ์ดํฐ ํ์
์ ์ธ ๋ค์์ ?๋ฌธ์๋ฅผ ๋์ด ์ต์
๋ ํ์
์ด ๋๊ฒ ํฉ๋๋ค.var number: Int? = 5 ์ต์
๋ ๋ฐ์ธ๋ฉ (Optional Binding)์ต์
๋ ๋ฐ์ธ๋ฉ์ if, gu..
์ปดํจํฐ ์์คํ
๊ตฌ์กฐMemory: CPU์ ์์
๊ณต๊ฐdevice controller: I/O device์ ๋ถ์ด ์๋ ์์ CPUlocal buffer: device controller์ ์์
๊ณต๊ฐCPUmode bit: ์คํ์ค์ธ ํ๋ก๊ทธ๋จ์ด ์ด์์ฒด์ ์ธ์ง ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ธ์ง ๊ตฌ๋ถinterrupt line: ๋งค์๊ฐ ๋๋ค๋ฅธ ๊ธฐ๊ณ์ด๋ฅผ ์ฝ๊ธฐ ์ ์, interrupt๊ฐ ๋ฐ์ํ ๊ฒ์ด ์๋์ง ํ์ธregister: ๊ธฐ๊ณ์ด ์ฐ์ฐ์ ์ ์ฅํ๊ธฐ ์ํ ์์ฃผ ๋น ๋ฅด๊ณ ์์ ์ ์ฅ ๊ณต๊ฐtimerํน์ ํ๋ก๊ทธ๋จ์ด CPU์ ๋
์ ํ๋ ๊ฒ์ ๋ง๊ธฐ ์ํด ์ผ์ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก interrupt๋ฅผ ๋ฐ์์ํดํ๋์ ์ด์์ฒด์ ๊ฐ CPU ์ค์ผ์ค๋ง์ ํ ๋ timer์ ๋์์ ๋ฐ์์ CPU๋ฅผ ๊ฐ์ ๋ก ๋นผ์์์ค๋ ๋ฐฉ์์ผ๋ก ์ด์๋จ Mode bit์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ์๋ชป๋ ..
์ด์์ฒด์ ๋ ์ปดํจํฐ ํ๋์จ์ด ๋ฐ๋ก ์์ ์ค์น๋์ด ์ฌ์ฉ์ ๋ฐ ๋ค๋ฅธ ๋ชจ๋ ์ํํธ์จ์ด์ ํ๋์จ์ด๋ฅผ ์ฐ๊ฒฐํ๋ ์ํํธ์จ์ด ๊ณ์ธต ํ์์ ์ด์์ฒด์ (์ปค๋): ์ด์์ฒด์ ์ ํต์ฌ ๋ถ๋ถ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผํ๋ ๋ถ๋ถ ๊ด์ญ์ ์ด์์ฒด์ : ์ปค๋ ๋ฟ๋ง ์๋๋ผ ๊ฐ์ข
์ฃผ๋ณ ์์คํ
์ ํธ๋ฆฌํฐ๋ฅผ ํฌํจํ ๋ถ๋ถ ์ด์์ฒด์ ์ ๋ชฉ์ (1) ์ปดํจํฐ ์์คํ
์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋ ํ๊ฒฝ ์ ๊ณต ์ด์์ฒด์ ๋ ๋์ ์ฌ์ฉ์/ํ๋ก๊ทธ๋จ๋ค์ด ๊ฐ๊ฐ ๋
์์ ์ปดํจํฐ์์ ์ํ๋๋ ๊ฒ ๊ฐ์ ํ๊ฒฝ(illusion)์ ์ ๊ณต ํ๋์จ์ด๋ฅผ ์ง์ ๋ค๋ฃจ๋ ๋ณต์กํ ๋ถ๋ถ์ ์ด์์ฒด์ ๊ฐ ๋ํ (2) ์ปดํจํฐ ์์คํ
์ ์์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ ํ๋ก์ธ์, ๊ธฐ์ต์ฅ์น, ์
์ถ๋ ฅ ์ฅ์น ๋ฑ์ ํจ์จ์ ๊ด๋ฆฌ ์ฌ์ฉ์ ๊ฐ์ ํํ์ฑ์๋ ์์ ๋ถ๋ฐฐ → ํํ์ฑ ์ฃผ์ด์ง ์์์ผ๋ก ์ต๋ํ์ ์ฑ๋ฅ์ ๋ด๋๋ก → ํจ์จ์ฑ ์ฌ์ฉ์ ๋ฐ ์ด์์ฒด..
ํ(Heap) ์์ ์ด์ง ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์๋ฃ๊ตฌ์กฐ๋ก, ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ๊ธฐ ์ํด ๋ง๋ค์ด์ก๋ค. ๋ฐ์ ๋ ฌ ์ํ(๋์จํ ์ ๋ ฌ ์ํ)๋ฅผ ์ ์งํ๋ค. ์ฆ, ๋ชจ๋ ๋
ธ๋๊ฐ ์ ๋ ฌ๋์ด ์๋ ๊ฑด ์๋๋ผ๋ ์๋ฏธ์ด๋ค. ๋ถ๋ชจ ๋
ธ๋์ ์์ ๋
ธ๋ ๊ฐ์ ๋์ ๊ด๊ณ๋ฅผ ์ด์ฉํ์ฌ ๊ตฌ์ฑํ๋ค. ์ด์ง ํ์ ํธ๋ฆฌ์ ๋ฌ๋ฆฌ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ ์์ ๋
ธ๋ ๊ฐ์ ํฌ๊ธฐ๋ ์๊ด์ด ์๋ค. ํ์ ์ค๋ณต ๊ฐ์ด ํ์ฉ๋๋ค. ํ์ ๋๋์ ์ต๋๊ฐ์ด๋ ์ต์๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ์์ผํ ๋ ๋งค์ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฐ์ ์์ ํ๋ฅผ ๊ตฌํํ๊ฑฐ๋, ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ ๋ฑ์ ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ์์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ๋ ์ฌ์ฉ๋๋ค. ์์ ์ด์ง ํธ๋ฆฌ(Complete Binary Tree) ์ผ์ชฝ์์๋ถํฐ ์ฑ์์ ธ ์๋ ์ด์ง ํธ๋ฆฌ ๋ง์ง๋ง ๋ ๋ฒจ์ ์ ์ธํ๊ณ ๋ ๋ชจ๋ ๋ ๋ฒจ์ด ์ฑ์์ ธ ์๋ ํํ ๋ง์ง..
๋ฌธ์ ์ํฉ UIKit์ ์ด์ฉํ์ฌ ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๋ ๊ณผ์ ์์ Firebase Auth์์ ์ ๊ณตํ๋ Google Login๋ฅผ ๊ตฌํํ๋ค๊ฐ ๋ฌธ์ ๋ฅผ ๋ง์ฃผํ๊ฒ ๋์์ต๋๋ค. ํ๋ฉด ๋์์ ์ ๊ตฌํ ๋์์ง๋ง ๊ตฌ๊ธ ๋ก๊ทธ์ธ ๋ฒํผ์ ๋๋ฅด์ ์๋์ ๊ฐ์ ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ณด๊ฒ ๋์์ต๋๋ค. API๋ฅผ ํตํด ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ก UI๋ฅผ ์
๋ฐ์ดํธํ ๋๋ Main Thread์์ ๋์ํด์ผํฉ๋๋ค. ํ์ง๋ง ํ์ฌ Background Thread์์ ์คํํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ ์ด์์์ต๋๋ค. MainActor์ ์ฌ์ฉํ์ฌ ๋ฌธ์ ํด๊ฒฐ ์ฒ์์๋ ๊ตฌ๊ธ ๋ก๊ทธ์ธ ๋ก์ง์ ViewModel์์ async/await์ ViewController์์ Task๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ ํ๊ณ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. Completion Handler๋ ์ฌ์ฉํ์ง ์..
์ด์ง ํ์ ํธ๋ฆฌ(Binary Search Tree) ์ด์ง ํ์๊ณผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๊ฒฐํจํ ์๋ฃ๊ตฌ์กฐ์ ์ผ์ข
์ผ๋ก, ํ์ ์์
์ ํจ์จ์ ์ผ๋ก ํ ์ ์๋ค. ์ด์ง ํ์ ํธ๋ฆฌ์ ํน์ง ์ด์ง ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋
ธ๋์ ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ์๋ ๋
ธ๋ ๊ฐ๋ณด๋ค ์์ ๊ฐ์ด ํฌํจ๋์ด ์๊ณ , ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ์๋ ๋
ธ๋ ๊ฐ๋ณด๋ค ํฐ ๊ฐ์ด ํฌํจ๋์ด ์๋ค. ์๋ธ ํธ๋ฆฌ ๋ํ ์ด์ง ํ์ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋ชจ๋ ์์์ ํค๋ ์ ์ผํ ํค๋ฅผ ๊ฐ์ง๋ค. (์ค๋ณต ๊ฐ์ด ์๋ค.) ์ด์ง ํ์ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ํ์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. ์ ํ ์๋ฃ๊ตฌ์กฐ์์๋ ํ๋์ ๋ฐ์ดํฐ ๋ค์ ์ค์ง ํ๋์ ๋ฐ์ดํฐ๋ง ์กด์ฌํ๋ค. ๋๋ฌธ์ ํน์ ๊ฐ์ ํ์ํ ๋ ๋งจ ๋๊น์ง ์์ฐจ์ ์ผ๋ก ํ์ํ๋ ์ต์
์ ๊ฒฝ์ฐ์ ์๊ฐ ๋ณต์ก๋๊ฐ O(n)..