๐ ์ด๊ธฐํ์ ๋ํด์ AppDelegate() init() AppDelegate๋ฅผ ์ด์ฉํ ์ด๊ธฐํ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ค AppDelegate์ ์ญํ (์ง์ ์ )์ ํ๋ ๊ฒ์ด ๋ฐ๋ก ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๊ถ์ฅ๋์ง๋ ์๋ ๋ฐฉ๋ฒ์ด๋ค. @main struct PushMessageApp: App { var body: some Scene { WindowGroup { ContentView() } } } ์ ์ฝ๋์์ ๋ณด์ด๋ App ํ๋กํ ์ฝ ์์ฒด๊ฐ ์ฑ์ ๊ตฌ์ฑ์ ๋ด๋นํ๋ ๊ตฌ์กฐ์ฒด์ ํ๋กํ ์ฝ์ ์ง์ ํด์ฃผ์ด์ ์ฑ์ ์์(Presenting) ์ง์ ์ ์ ํด์ฃผ๋ ์ญํ ์ ํ๊ฒ ๋๋ค. ๋ํ @main์ ํตํ์ฌ ์ฑ์ด ์์๋๊ณ ๊ฐ์ฅ ๋จผ์ ๋ค์ด๊ฐ์ผํ๋ ๋ถ๋ถ์ ๋ช ์ํด์ฃผ๊ณ ์๊ธฐ ๋๋ฌธ์ AppDelegate๊ฐ ํ์ํ์ง ์๋ค. ๊ทธ๋ฌ๋ ์ฑ์ ์ด๊ธฐํ ์ด์ธ์๋ AppDele..
์ฝ๋๋ก Navigation ์์ญ ์์ ์ ๋ฐ๋ณตํ๋ค๊ฐ ์๊ฒ ๋ ์ฌ์ค .. ์๋๋ Navigation Back ๋ฒํผ์ ํตํด ํ๋ฉด์ ์ ํํ๋ค๊ฐ ๋์์ค๋ฉด, ํด๋น ๋ฒํผ์ด ๋ณด์ด์ง ์๋ ํ์๋๋ฌธ์ ์์ ์ ํ๋ ค๊ณ ํ์๋๋ฐ, ์ด๋ฅผ ์์ ํ๋ค ์ฐ์ฐํ ํ์ํ๋ ๊ตฌํ์ ํ๊ฒ ๋์๋ค. Navigation Back Button A ํ๋ฉด์์ Navigation ๋ฒํผ์ ํตํด B ํ๋ฉด์ผ๋ก ์ ํํ์ ๋, Bํ๋ฉด์์ ๋ค์ A ํ๋ฉด์ผ๋ก ๋์๊ฐ๋ Navigation ์์ญ์ Back ๋ฒํผ์ ์ปจํธ๋กค๋ฌ์ ํ์ดํ์ ๋ณด์ด์ง ์๊ณ , ํ์ดํ ๋ชจ์๋ง ๋ณด์ด๊ฒ ํ๊ณ ์ถ์๋ค. ์ผ๋จ ๋ค๋ก๊ฐ๋๋ฒํผ์ด ์ฌ๋ผ์ง๋ ํ์์ ์์ธ ๋ค๋น๊ฒ์ด์ ๋ฐ์ ์คํ์ผ๊ณผ ๋ฒํผ ์์ฑ์ด ์ ํํ๊ฒ ์ค์ ๋์ด์๋์ง ํ์ธํด์ผ ํ๋ค. ๊ทธ๋์ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์ฌ์ฉํด์ ๋ค๋น๊ฒ์ด์ ๋ฐ์ ์คํ์ผ๊ณผ ๋ฒํผ ์์ฑ์..
๐ GCD ( Grand Central Dispatch) ๋? ๋ค์์ Thread์ ์ ์ ํ๊ฒ ์์ ์ ๋ถ๋ฐฐํ๊ธฐ ์ํด ํด์ผ ํ ์ผ์ ๋ฌด์์ผ๊น ? ๋ฐ๋ก ํ ์ผ(task)๋ฅผ Queue์ ๋ฃ๋ ๊ฒ์ด๋ค. ๋ฃ์ด์ผ ๋๋ ๊ฒ์ด๋ผ๋ฉด ๋ค์์ Thread์ ์ ์ ํ๊ฒ ์์ ์ ๋ถ๋ฐฐํ๋ ์ผ์ ๋๊ฐ ํ ๊ฒ์ธ๊ฐ ? ๋ฐ๋ก GCD๋ Queue์ ๋ฃ์ผ๋ฉด ๊ทธ์ ๋ฐ๋ฅธ ์ค๋ ๋๋ฅผ ์ ์ ํ๊ฒ ์์ฑํด ๋ถ๋ฐฐํด์ฃผ๋ ์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ GCD์์ ์ฌ์ฉํ๋ Queue ์ด๋ฆ์ด Dispatch Queue์ด๋ค. ๊ทธ๋ผ Dispatch Queue์ ์์ ์ด ์ถ๊ฐ๋๋ฉด GCD๋ ์์ ์ ๋ง๋ ์ค๋ ๋๋ฅผ ์๋์ผ๋ก ์์ฑํด์ ์คํํ๊ณ , ์์ ์ด ์ข ๋ฃ๋๋ฉด ์ค๋ ๋๋ฅผ ์ ๊ฑฐํ๊ฒ ๋๋ค. ๐ Dispatch Queue๋? ์ฑ์ ๋ฉ์ธ ์ค๋ ๋๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋์์ ์์ฐจ์ ์ผ๋ก ๋๋ ๋์์ ์..
QoS ( Quality of Service ) QoS๋ ์๋น์ค์ ํ์ง์ด๋ค. DispatchQueue์ ์์ ์ ์ฐ์ ์ ์ผ๋ก ๋ถ๋ฅํ๋๋ฐ ๋์์ ์ค๋ค. ๊ฐ๋ฐ์๋ ์ค์๋์ ๋ฐ๋ผ ์ฑ ์์ ์ ๋ถ๋ฅํด ์์คํ ์ ์ฐ์ ์์๋ฅผ ๋ณด๋ค ํจ๊ณผ์ ์ผ๋ก ์ง์ ํ ์ ์๋ค. ์ต์ ์ ์๊ฐ๊น์ง ์์ ์ ์ฐ๊ธฐํ๋ ๊ฒ๊ณผ ๋น์ทํ๊ฒ ๋ค๋ฅธ ํจ์จ์ฑ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ ๊ฒฝ์ฐ์๋ ์์คํ ์ ์ฌ์ ํ ์ผ์ ์์ค์ ์ฐ์ ์์๋ฅผ ์ํํด์ผ ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฑ์ด ์ํํ๋ ์์ ์ ๋ถ๋ฅํ๋ ๊ฒ์ ์ค์ํ๋ค. QoS์ class ์ ๋ณด ์๋น์ค ํ์ง(QoS) ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ํํ ์์ ์ NSOperation, NSOperationQueue, NSThread๊ฐ์ฒด, ๋์คํจ์น ๋๊ธฐ์ด ๋ฐ pthread(POSIX ์ค๋ ๋)๋ก ๋ถ๋ฅํ ์ ์๋ค. ์์ ์ QoS๋ฅผ ํ ๋นํ์ฌ ์ค์๋๋ฅผ ํ์ํ๋ฉด..
SnapKit SnapKit์ ์ฌ์ฉํด๋ณด๋ฉด์ ํท๊ฐ๋ ธ๋ ๋ถ๋ถ ์ ๋ฆฌ - offset/inset - translateAutoresizingMaskIntoContraints ๐ offset / inset ๐กoffset ์ฌ์ฉ์ 'ํ์ฌ ๋ทฐ constraint = ์ํผ๋ทฐ constraint + offset ๊ฐ'์ ์๊ฐํ๊ณ ์ค์ ํ๋ค. label.snp.makeConstraints { make in make.top.equalToSuperview().offset(50) make.left.equalToSuperview().offset(50) make.right.equalToSuperview().offset(-50) make.bottom.equalToSuperview().offset(-50) } ๊ธฐ์ค์ด ๋๋ View์ ๋ง์ถฐ์ ..
ํ๋กํ ์ฝ ์งํฅ ํ๋ก๊ทธ๋๋ฐ Protocol - Oriented Programming ํ๋กํ ์ฝ ์งํฅ ํ๋ก๊ทธ๋๋ฐ ํํ ์๊ณ ์๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ : ์ฌ๋ฌผ์ ๊ฐ์ฒด๋ก ํ์ฑํ์ฌ ๊ณตํต์ ์ ๊ฐ๋ ๋ชจ๋ ๊ณณ์์ ์์๋ฐ๋ ๊ฐ์ฒด ๋ด๋ถ์ ๋ชจ๋ ๋ก์ง์ ์บก์ํํ๋ค. ์๋ ํ์ง ์์๋ ์์ํ๋ค๋ ์ด์ ๋ก ๋ชจ๋ ์์ฑ๊ณผ ํ์๋ฅผ ๊ณต์ ํด์ผํ๋ฉฐ, ๋ณต์กํ ์์ ๊ตฌ์กฐ๋ฅผ ์ง๋ ํด๋์ค๋ฅผ ์์ํ๋ค๋ฉด ์ํ๋ ํด๋์ค๋ฅผ ์ฐธ์กฐํด์ผ ํ ๋ ๋ค์ด์บ์คํ ์ ํด์ผ ํ๋ค. ๋ํ ํฐ ๋จ์ ์ ๋จ ํ๋์ SuperClass๋ง ์์ํ ์ ์๋ค๋ ์ ์ด๋ค. ์๊ฐ์ด ํ๋ฅด๋ฉด ๊ธฐ๋ฅ๋ ํ์ฅํ๊ธฐ ๋ง๋ จ์ด๋ฏ๋ก ๋ณต์ก๋๋ ๋์์ง๊ณ ๊ด๋ฆฌ๋ ์ด๋ ค์์ง๋ค. ํ๋กํ ์ฝ ์งํฅ ํ๋ก๊ทธ๋๋ฐ : ํ์ํ ๋ถ๋ถ๋ง ํ๋กํ ์ฝ๋ก ๋ถ๋ฆฌํด์ ๋ง๋ค ์ ์๊ณ ๋ค์ค ํ๋กํ ์ฝ์ ๊ตฌํํ ์ ์๋ค. ๊ฒ๋ค๊ฐ ํ๋กํ ์ฝ ๊ท์น์ clas..
์์ฃผ ๋ฐ์ํ๋ iOS ์ฑ ์ฌ์ฌ ๋ฆฌ์ ์ฌ์ 1. ์์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ์ ์ฉ ์ ์ ํ ๋ก๊ทธ์ธ ์ ์ฉ ์นด์นด์ค ๋ก๊ทธ์ธ๊ฐ์ SNS ๋ก๊ทธ์ธ๊ธฐ๋ฅ์ด ์ฑ์ ๋ค์ด๊ฐ๋ค๋ฉด ์ ํ ๋ก๊ทธ์ธ๋ ๊ฐ์ด ๊ตฌํ ํ ๊ฒ ex) firebase Auth๋ก ๊ฐ๋จํ ์ด๋ฉ์ผ ๋ก๊ทธ์ธ ๊ตฌํ์ ์ ํ ๋ก๊ทธ์ธ ๊ตฌํ ํ์ X 2. ํ ํ๋ซํผ ๋ฌธ๊ตฌ๋ ์์ด์ฝ ์ฌ์ฉ ๊ธ์ง iOS ์ฑ์ ๊ตฌ๊ธ์ด๋ผ๋ ๋จ์ด๋ ๊ตฌ๊ธ ํ๋ ์ด์คํ ์ด ๋ฑ์ ์ปจํ ์ธ ๊ฐ ์๋ค๋ฉด ๋ฆฌ์ ์ฌ์ ๊ฐ ๋๋ค. ์๋ฅผ ๋ค๋ฉด ์ด๋ฒคํธ ํ์ ์ผ๋ก ๊ตฌ๊ธ ํ๋ ์ด ์คํ ์ด ๋งํฌ๋ ์๋๋ก์ด๋ ์ฑ ์ถ์ ์๋ฃ ๊ฐ์ ๋ฌธ๊ตฌ๋ฅผ ๋์ด์ค๋ค๋ฉด ๋ฆฌ์ ์ฌ์ ๋ค. 3. ๊ตฌํ๋์ง ์์ ๊ธฐ๋ฅ, ์ฑ ๋ฒ๊ทธ ( ํ๊น ) ๊ตฌํ๋์ง ์๋ ๊ธฐ๋ฅ์ ๋ฃ์ด๋ ๋ฆฌ์ ์ฌ์ ์ด๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ง ์ดฌ์ ๋ฒํผ์ด ์๋๋ฐ ํด๋น ๋ฒํผ์ ๋๋ฌ๋ ์๋ฌด ๋ฐ์์ ํ์ง ์์ผ๋ฉด ๋ฆฌ์ ์ฌ์ ๊ฐ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฑ์ด..
๐ Shadow & cornerRadius ์ผ๋ฐ์ ์ผ๋ก Shadow๋ Radius๋ฅผ ๊ฐ์ดํ๋ฉด ์ ์ฉ์ด ์๋๋๋ฐ, Cell์ ์ฝ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค. func setUpLayout() { layer.shadowColor = UIColor.black.cgColor layer.shadowOpacity = 0.5 layer.shadowRadius = 10 contentView.layer.cornerRadius = 10 contentView.layer.masksToBounds = true } Cell ์์์ Layout ํ ๋ ์ด๋ ๊ฒ Cell์ Shadow๋ฅผ ๋ฃ๊ณ corner Radius๋ฅผ ์ ์ฉํด์ฃผ๋ฉด ๋๋ค. ๐ก CollectionView Cell์ ํ ๋๋ฆฌ ๋ฅ๊ทผํจ๊ณผ๋ง ์ ์ฉ ๐ก Button์ด๋ View์ ํ ๋๋ฆฌ ๋ฅ๊ธ๊ฒ l..