์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- XCTest
- rxcocoa
- TCA
- Lv2
- BOJ
- Xcode
- designpattern
- Flutter
- combine
- arkit
- ํ๋ก๊ทธ๋๋จธ์ค
- CollectionView
- ios
- SnapKit
- BFS
- UIKit
- swift
- raywenderlich
- RxSwift
- SwiftUI
- Swfit
- MVVM
- Kuring
- reactorkit
- ๋ฐฑ์ค
- realm
- visionOS
- tableView
- node.js
- ํจ์คํธ์บ ํผ์ค
- Today
- Total
lgvv98
iOSInterviewquestions - Swift ๋ณธ๋ฌธ
iOSInterviewquestions - Swift
๐ฅ ์บ๋ฟ๋งจ 2022. 4. 2. 03:02iOSInterviewquestions - Swift
๋ชฉ์ : ๋ฐฐ์ธ๋๋ ์ํ๋๋ฐ, ๋์ด๊ฐ ๋จน์ผ๋๊น ์๊พธ ๊น๋จน์ด์ ์๋ ๊นํ๋ธ ๊ธ์ ๋ฐํ์ผ๋ก ๊พธ์คํ ์ด๋ก ๊ณต๋ถ๋ฅผ ํ๊ณ ์ ํจ. ๋ฌผ๋ก ์ค๋ช ์ ๋ด๊ฐ ์ ์๋๊ฒ ๋ชฉ์ ์ด๋ผ ์ฒ ์ ํ ๋๋ฅผ ์ดํด์ํฌ ์ ์๋ ๋์ ์ธ์ด๋ก ์์ฑ.
์์ฑ์ผ : 2022๋ 4์ 2์ผ
- README: ์ถํ์ ์์ ์ด ์์ ๊ฒฝ์ฐ ์๋์ ๋ ์ง์ ์๊ฐ์ ์์ฑํ๊ณ , ์์ ๋ด์ฉ์ ๊ฐ๋ตํ ์ ๋ฆฌํด์ฃผ์ธ์.
์์)
(์์ ) oooo๋ oo์ oo์ผ oo์ oo๋ถ
- ๋ณ๊ฒฝ๋ด์ฉ : xxx์ ๋ํ ์๋ฃ๋ฅผ ๋ณด๊ฐ
โ ๊ณต๋ถ์ ๊ธฐ์ค์ด ๋๋ ๊นํ๋ธ ๊ธ
https://github.com/JeaSungLEE/iOSInterviewquestions
โ Swift
- struct์ class์ enum์ ์ฐจ์ด๋ฅผ ์ค๋ช
ํ์์ค.
- class : ์์์ด ๊ฐ๋ฅํ๋ฉฐ, call by ref ๋ฐ์ดํฐ ์ ๋ฌ, ๋ฉ๋ชจ๋ฆฌ์ ์์น๋ฅผ ์ ๋ฌํ๋ค. ์ฐธ์กฐํ๋ ๊ฐ์ด ์กด์ฌํ๋ ์์น๋ฅผ stack ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฐธ์กฐ๋๋ ๊ฐ์ heap ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ์ฅ.
- struct : ์์์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ, call by value๋ก ๋ฐ์ดํฐ ์ ๋ฌ, ๊ฐ์ด ๋ณต์ฌ๋์ด ์๋ก์ด ์ธ์คํด์ค๊ฐ ์์ฑ๋๊ณ ์ด ์ธ์คํด์ค๊ฐ stack ์์ญ์ ์ ์ฅ
- enum : ๋ค๋ฅธ ์ธ์ด์ enum๊ณผ๋ ์กฐ๊ธ์ ๋ค๋ฅด๋ฉฐ, ๊ฐ์ธ์ ์ผ๋ก๋ ๊ธฐ๋ฅ์ด ๋งค์ฐ ์ฐ์ํจ. enum์์ฒด๊ฐ ํ๋์ ๋ฐ์ดํฐ ํ์ ์ด๋ฉฐ, ๊ธฐ์กด ํ๋กํผํฐ๋ ๊ฐ์ ์ ์ฅํ๋ ์ญํ ์ ํ๋, ์ฐ์ฐ ํ๋กํผํฐ๋ ํน์ ํ ์ฐ์ฐ์ ํตํด ๊ฐ์ ๋ฆฌํดํด์ค
- class์ ์ฑ๋ฅ์ ํฅ์ ์ํฌ์ ์๋ ๋ฐฉ๋ฒ๋ค์ ๋์ดํด๋ณด์์ค.
- ์ค์ํํธ๋ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ๋ฅผ ์ฒ๋ฆฌํ๋ค. ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ๋ Stack ๋๋ Heap์์ ์ฒ๋ฆฌํ๋ค.
- Stack์ LIFO์ ๋จ์ํ ๊ตฌ์กฐ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ๊ฐ ํธ๋ฆฌํ๋ค. ์๊ฐ๋ณต์ก๋๋ O(1)๋ก ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๋ฉฐ Stack Pointer๋ก ์ฌ์ฉํ์ฌ ํ ๋น๊ณผ ํด์ ๋ฅผ ์ฒ๋ฆฌํ๋ค.
- Heap์ Stack๋ณด๋ค ์ข ๋ ๋ณต์กํ๋ค. ๋ค์ด๋๋ฏนํ ํ ๋น ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋๋ฐ, Heap์์ญ์์ ์ฌ์ฉํ์ง ์๋ ๋ธ๋ก์ ์ฐพ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ฒ๋ฆฌํ๋ค. ํ ๋น์ ํด์ ํ๊ธฐ ์ํด, ํด๋น ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ ํ ์์น๋ก ๋ค์ ์ฝ์ ํ๋ค. ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ Heap์ ์ ๊ทผํ ์ ์๊ธฐ์ Locking ๋๋ ๋ค๋ฅธ ๋๊ธฐํ ๋งค์ปค๋์ฆ์ผ๋ก ๋ฌด๊ฒฐ์ฑ์ ๋ณดํธํด์ผ ํ๋ค.
- ๋ ํผ๋ฐ์ค ์นด์ดํ
์ธ๋ฐ Struct์์๋ ๋ ํผ๋ฐ์ค ์นด์ดํ
์ด ์ผ์ด๋๋ค. Stringํ์
์ ๊ฐ๊ณ ์์ผ๋ฉด ์ด๋ ํ ์์ญ์ ์ ์ฅ๋๋ฉฐ, UIFont๋ ํด๋์ค๋ก ๋ง๋ค์ด์ง ๊ฐ์ฒด์ด๋ฏ๋ก ๋ ํผ๋ฐ์ค ์นด์ดํธ๊ฐ ํ์ํ๋ค.
- ์ด๋ฅผ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ผ๋ก๋ Stringํ์ ์ด ์๋ structํ์ ์ ์๋ก์ด ํ์ ์ ๋ง๋ค๋๊ฐ, enum์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ ์๋ ์๋ค.
- Method Dispatch๋ ํ๋ก๊ทธ๋จ์ด ์ด๋ค ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฒ์ธ์ง ๊ฒฐ์ ํ์ฌ ๊ทธ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ณผ์ ์ ๋ปํจ. ์ด๋ค ๋ฉ์๋์ธ์ง ๊ฒฐ์ ๋๋ ์์ ์ ๋ฐ๋ผ static๊ณผ dynamic์ผ๋ก ๋๋จ.
- static method dispatch๋ ์ปดํ์ผ ์์ ์ ์ปดํ์ผ๋ฌ๊ฐ ๋ฉ์๋์ ์ค์ ์ฝ๋ ์์น๋ฅผ ํ์ ํ ์ ์์ด ๋ฐํ์์ ์ฐพ๋ ๊ณผ์ ์์ด ๋ฐ๋ก ์ฝ๋๋ฅผ ์คํํ๋ค. ๊ตฌํ๋ ์ฝ๋๋ค์ด ์ด๋์ ์คํ๋๋์ง ์ ์ ์๊ธฐ์ ๋ฉ์๋ ์ธ๋ผ์ด๋๊ณผ ๊ฐ์ ์ฝ๋ ์ต์ ํ๋ฅผ ์คํํ๋ค. ๋ฉ์๋ ์ธ๋ผ์ด๋์ด๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋, ํด๋น ๋ฉ์๋๋ก ์ด๋ํ์ง ์๊ณ , ๋ฉ์๋์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐ๋ก ๋ฐํํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค.
- dynamic method dispatch๋ ์ปดํ์ผ ์์ ์ ์ด๋ค ๋ฉ์๋๋ฅผ ํธ์ถํ๋์ง ์ ์ ์์ด์, ๋ฐํ์์ table์ ์ฐธ์กฐํ์ฌ, ํด๋น ๋ฉ์๋์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ ์ฝ๋๋ฅผ ์คํํ๋ค. static ๋ฐฉ์๋ณด๋ค ๋ง์ ๋น์ฉ์ ํ์๋ก ํ์ง ใ ๋ณ๊ณ , ๋ ํผ๋ฐ์ค ์นด์ดํ , ํํ ๋น๊ณผ ๊ฐ์ ์ฐ๋ ๋ ๋๊ธฐ ์ค๋ฒํค๋๊ฐ ์๋ค. ํ์ง๋ง ์ปดํ์ผ๋ฌ๋ static์ ์ต์ ํ ์์ ์ด ๊ฐ๋ฅํ์ง๋ง dynamic์ ์ถ๋ก ํ ์ ์๋ค. ๊ทธ๋ ์ง๋ง ํ์ํ ์ด์ ๊ฐ ์๋๋ฐ, ๋ฐ๋ก ๋คํ์ฑ ๋๋ฌธ์ด๋ค. ๋คํ์ฑ์ด๋ ํ๋์ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ํ์ ์ ๊ฐ์ง ์ ์๋ ๊ฒ์ ์๋ฏธํ๋ค.
-
class Drawable { func draw() {} } class Point: Drawable { var x, y: Double override func draw() { ... } } class Line: Drawable { var x1, y1, x2, y2: Double override func draw() { ... } } var drawables: [Drawable] for d in drawables { d.draw() }
- ์์ ์ฝ๋์์ ๋ณด๋ฉด Point์ Line ํด๋์ค๊ฐ Drawable๋ฅผ ์์ํ๊ณ ์๋ค. ์ด ์ํฉ์์ d.draw์ d๊ฐ Point์ธ์ง Line์ธ์ง ์๊ธฐ ํ๋ค๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ์ปดํ์ผ๋ฌ๋ ํด๋์ค์ ํ์ ์ ๋ณด์ ๋ํ ํฌ์ธํฐ๋ฅผ ์ ์ฅํ๋ virtual method table์ ์ถ๊ฐํ๋ค. static memory์ ์ ์ฅํ๋ฉฐ, ์ด ํ ์ด๋ธ์ ํตํด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
- final class : ์๋ธ ํด๋์ค๋ฅผ ๋ง๋ค์ง ์๋๋ค๋ฉด final์ ์ ์ธํ๋ค. ๊ทธ๋ฌ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ staticํ๊ฒ dispatchํ ์ ์๋ค. ๋ํ ์๋ธํด๋์ค๋ฅผ ๋ง๋ค์ง ์๋๋ค๋ ์๋๋ ๋ณด์ฌ์ค ์ ์๋ค.
- ํ์ผ ๋ด์์๋ง ์ ๊ทผํด๋ ๋ ๊ฒฝ์ฐ private์ ์ธ
- private๋ก ์ ์ธํ ๊ฒฝ์ฐ ์ฐธ์กฐ ๊ฐ๋ฅํ ๋ฒ์๊ฐ ํ์ฌ ํ์ผ๋ก ์ ํ๋๋ฉฐ ์ด์ ์ปดํ์ผ๋ฌ๋ ํด๋น ํ๋กํผํฐ๊ฐ ์ฐธ์กฐ๋ ์ ์๋ ๊ตฌ์ญ ๋ด์์ ์ค๋ฒ๋ผ์ด๋ฉ ๋ ์ง, ์๋ ์ง๋ฅผ ์์์ ํ๋จํ ์ ์๊ฒ ๋๋ค. ๋ง์ฝ ์ค๋ฒ๋ผ์ด๋ฉ๋๋ ๊ณณ์ด ์๋ค๋๊ฒ ํ๋จ๋ ๊ฒฝ์ฐ ์ปดํ์ผ๋ฌ๊ฐ ์ค์ค๋ก final๋ก ์ถ๋ก ํด์ static dispatch๋ก ๋์์ํจ๋ค.
- WMO(whole module optimization) ์ฌ์ฉํ๊ธฐ.
- ๋ชจ๋ ์ ์ฒด๋ฅผ ํ๋์ ๋ฉ์ด๋ฆฌ๋ก ์ปดํ์ผํ๊ธฐ ๋๋ฌธ์ internal level์ ๋ํด์ ์ค๋ฒ๋ผ์ด๋ฉ์ด ๋๋์ง, ์๋์ง๋ฅผ ์ถ๋ก ๊ฐ๋ฅํ๊ณ , ์ค๋ฒ๋ผ์ด๋ฉ์ด ์์ ๊ฒฝ์ฐ final์ ์ ์ธํด์ฃผ๋ ๊ฒ์ด whole module์ด๋ฉฐ Xcode์ compilation Mode์ release์์ ์ค์ ๊ฐ๋ฅํ๋ค.(์๋์ผ๋ก whole module์ด ์ผ์ ธ ์๋ค.)
- ์ปดํ์ผ์ ํ์ผ ๋จ์๋ก ํ๊ฒ ๋๋ฉด ํ์ฌ ํ์ผ์ class๊ฐ ์์์ด ์์์๋ ๋ถ๊ตฌํ๊ณ ๋ค๋ฅธ ํ์ผ์์๋ ์ด๋ป๊ฒ ํ์ฉ๋ ์ง ์ ์๊ฐ ์์ผ๋ฏ๋ก, ์๋์ผ๋ก final์ผ๋ก ๋์์์ผ์ค ์ ์๋ค. ์ด๋ฌํ ๋จ์ ์ ๊ทน๋ณตํ ๊ฒ์ด WMO๋ผ๋ ๊ฒ์ด๋ค. ๋ค๋ง internal๋ณด๋ค ์์ ์ ๊ทผ ์ ์ด์(public, open)์ด ์ ์ธ๋ ๊ฒฝ์ฐ์๋ ์ธ๋ถ ๋ชจ๋์์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ฏ๋ก WMO๋ฅผ ์ฌ์ฉํด๋ Dynamic Dispatch๋ก ์๋ํ๋ค.
- (์ฐธ๊ณ ) https://velog.io/@wnsxor1993/Class%EC%9D%98-%EC%84%B1%EB%8A%A5-%ED%96%A5%EC%83%81-%EB%B0%A9%EB%B2%95
- (์ฐธ๊ณ ) https://velog.io/@leeesangheee/iOS.-class%EC%9D%98-%EC%84%B1%EB%8A%A5%EC%9D%84-%ED%96%A5%EC%83%81-%EC%8B%9C%ED%82%AC%EC%88%98-%EC%9E%88%EB%8A%94-%EB%B0%A9%EB%B2%95%EB%93%A4%EC%9D%84-%EB%82%98%EC%97%B4%ED%95%B4%EB%B3%B4%EC%8B%9C%EC%98%A4
- ์ค์ํํธ๋ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ๋ฅผ ์ฒ๋ฆฌํ๋ค. ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํด์ ๋ Stack ๋๋ Heap์์ ์ฒ๋ฆฌํ๋ค.
- Copy On Write๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋์ํ๋์ง ์ค๋ช
ํ์์ค.
- ์ค์ ์๋ณธ์ด๋ ๋ณต์ฌ๋ณธ์ด ์์ ๋๊ธฐ ์ ๊น์ง๋ ๋ณต์ฌ๋ฅผ ํ์ง ์๊ณ , ์๋ณธ ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํจ. ์๋ณธ์ด๋ ๋ณต์ฌ๋ณธ์์ ์์ ์ด ์ผ์ด๋ ๊ฒฝ์ฐ ๊ทธ ๋, ๋ณต์ฌํ๋ ์์ ์ ํจ. ์ด ์์ ์ด swift์์๋ Collection Type์ ๋ณต์ฌํด์ ์ฌ์ฉํ ๋ ์ผ์ด๋จ.
- (์ฐธ๊ณ ) https://babbab2.tistory.com/18
-
int array1 = [1,2,3] // array1์ ์ฃผ์: AA int array2 = array1 // array2์ ์ฃผ์: AA array1[0] = 1 // COW !! array2์ ์ฃผ์: BB // COW๋ ์๋ณธ์ด๋ ๋ณต์ฌ๋ณธ์ ์์ ์ด ์์ ๋, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํจ
method dispatch
static method dispatch
static method dispatchstatic method dispatch
- Convinience init์ ๋ํด ์ค๋ช
ํ์์ค.
- ์ด๊ธฐํ์ ์ข ๋ฅ์ใ ๋ ํฌ๊ฒ Designated, convenience๊ฐ ์กด์ฌํ๋ค. ๋ชจ๋ ๋ฉค๋ฒ๋ฅผ ์ด๊ธฐํํ๊ณ ์ปค์คํฐ๋ง์ด์งํ๊ธฐ ์ํจ.
- swift์ ์ด๊ธฐํ ์ด๋์ ๋ผ์ด์ ๋ก ๋ณธ Designated init(์ง์ ์ด๋์ ๋ผ์ด์ )๋ ๋ชจ๋ ํ๋กํผํฐ๊ฐ ์ด๊ธฐํ๋ ์ ์๋๋ก ํฉ๋๋ค. ์งํค์ง ์์๊ฒฝ์ฐ error๋ฐ์
- convenience init์ ๋ณด์กฐ ์ด๋์ ๋ผ์ด์ ๋ก ํด๋์ค์ ์๋ ์ด๋์ ๋ผ์ด์ ์ init์ ๋์์ฃผ๋ ์ญํ . convenience init์ ๊ฐ์ ํด๋์ค์์ ๋ค๋ฅธ ์ด๋์ ๋ผ์ด์ ๋ฅผ ํธ์ถํด์ผํ๋ค๋ ๊ท์น์ด ์์.
-
class Person { var name: String var age: Int var gender: String init(name: String, age: Int, gender: String) { self.name = name self.age = age self.gender = gender } convenience init(age: Int, gender: String) { self.init(name: "zedd", age: age, gender: gender) } }
- AnyObject์ ๋ํด ์ค๋ช
ํ์์ค.
- Swift๋ Type์ ๋ฏผ๊ฐํ์ฌ ํน์ ํ์ง ์์ ํ์ ์ ๋ํด ๋์ํ๋๋ก ํน๋ณํ ํ์ 2๊ฐ์ง ์ ๊ณตํ๋ค. ์๋๋ ํ์ ์บ์คํ ์ ์ํํ ๋, ์ผ๋ฐ์ ์ผ๋ก ์์ ๊ด๊ณ์ ์๋ ํด๋์ค๋ผ๋ฆฌ๋ง ์บ์คํ ์ด ๊ฐ๋ฅํ์ง๋ง, Any, AnyObject ํ์ ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์์ ๊ด๊ณ์ ์์ง ์์๋ ํ์ ์บ์คํ ์ด ๊ฐ๋ฅํ๋ค.
- Any : ํจ์ ํ์ ์ ํฌํจํ์ฌ ๋ชจ๋ ํ์ ์ ์ธ์คํด์ค๋ฅผ ๋ํ๋ผ ์ ์์ต๋๋ค. Valueํ์ (struct, class), referenceํ์ (class, closure) ๋ ๋ค ์ ์ฅ์ด ๊ฐ๋ฅํฉ๋๋ค. ํ๋ง๋๋ก ๋ชจ๋ ํ์ ์ ํฌํจํ ์ ์์ต๋๋ค.
- AnyObject๋ ๋ชจ๋ ํด๋์ค ํ์ ์ ์ธ์คํด์ค๋ฅผ ๋ํ๋ผ ์ ์๋ ํ๋กํ ์ฝ์ ๋๋ค. AnyObject๋ก ์ ์ธ ์, ํด๋์ค ํ์ ๋ง ์ ์ฅํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํด๋์ค ํ์ ์ด ์๋ ๊ตฌ์กฐ์ฒด ์ด๊ฑฐํ ref ํ์ ์ธ ํด๋ก์ ๋ AnyObject์ ํด๋นํ์ง ์์ต๋๋ค.
- (Any, AnyObject์ ๋จ์ ) ๋งค๋ฒ ํ์ ์ฒดํฌ ๋ฐ ํ๋ณํ์ ํด์ผํ๋ค. as๋ as? ๋ฑ์ผ๋ก ๋ค์ด ์บ์คํ ํ์ฌ ์ฌ์ฉํ๋ค.
-
var name: Any = "lgvv" // error // String ํ์ ์ Any๋ก ์ ์ธํด์ฃผ์ด๋ name์ String ๋ฉ์๋๋ ํ๋กํผํฐ์ ์ ๊ทผํ๋ ค๊ณ ํ๋ฉด ์๋ฌ๊ฐ ๋๋ค. // ์ด์ ๋ Any, AnyObject๋ ๋ฐํ์ ์์ ์ ํ์ ์ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ์์ ์๋ ํด๋น ํ์ ์ ์ ์ ์์ด์ // ๋ฐ๋ผ์ ์ ๊ทผํ ์๋ ์๋ค. // ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ๋ฒ if var name = name as? String { name.append("๋ค์ด์บ์คํ ") }
- Optional ์ด๋ ๋ฌด์์ธ์ง ์ค๋ช
ํ์์ค.
- ์ฅ์ : ๊ฐ๋ฐ์๊ฐ ๋ฐํ์์ nil๋ก ์ธํ ๋ฌธ์ ๋ฅผ ์ปดํ์ผ ๋จ๊ณ์์ ์๋ฐฉ ๊ฐ๋ฅ
- ์ต์ ๋ ๋ฐ์ธ๋ฉ : ์ต์ ๋ ํ์ ์ผ๋ก ์ ์ธ๋ ๋ณ์์ ๊ฐ์ด ์๋์ง ์๋์ง๋ฅผ ์ฒดํฌ
- ์ต์ ๋ ์ฒด์ด๋: ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ํผํฉํด์ ์ฌ์ฉ ์ ์ต์ ๋๋ผ๋ฆฌ ์ฐ์ฐ์ด ํ์ํ ๋ if๊ฐ ๋๋ฌด ๋ง์ด ํ์ํ๊ฒ ๋๋๋ฐ, ?ํตํด์ ํด๊ฒฐํจ. ์ข ๋ ๊ฐ๋จํ๊ฒ ์ต์ ๋์ ์์ธ์ฒ๋ฆฌํ ์ ์์.
- obj-c์์ ์์ง nilํ์ ์ด ์กด์ฌํ๋ฉฐ obj-c์ swift์ ์ํธ ์ด์์ฑ์ ์ํด ์ฌ์ฉ
- Struct ๊ฐ ๋ฌด์์ด๊ณ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์ค๋ช
ํ์์ค.
- ๊ตฌ์กฐ์ฒด์ด๊ณ ํด๋์ค์ ๊ตฌ์กฐ์ฒด์ ์ ํ์ ๊ด์ ์์ ์ค๋ช ํด๋ณด์๋ฉด, ์บก์ํํ๊ธฐ ์ํ ๊ฒ์ด๋ ์ฐธ์กฐ๋๊ธฐ๋ณด๋ค ๋ณต์ฌ๋๊ธธ ์ํ๋ ๊ฒฝ์ฐ, ์์ํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค.
- (์ฐธ๊ณ ) https://jusung.gitbook.io/the-swift-language-guide/language-guide/09-classes-and-structures
- Subscripts์ ๋ํด ์ค๋ช
ํ์์ค.
- ํด๋์ค, ๊ตฌ์กฐ์ฒด ๊ทธ๋ฆฌ๊ณ ์ด๊ฑฐํ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์ ์ํด ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ธ์คํฌ๋ฆฝํธ๋ ์ฝ๋ ์ , ๋ฆฌ์คํธ, ์ํ์ค ๋ฑ ์งํฉ์ ํน์ ๋ฉค๋ฒ ์๋ฆฌ๋จผํธ์ ๊ฐ๋จํ๊ฒ ์ ๊ทผํ ์ ์๋ ๋ฌธ๋ฒ์ ๋๋ค
-
struct TimesTable { let multiplier: Int subscript(index: Int) -> Int { return multiplier * index } } let threeTimesTable = TimesTable(multiplier: 3) print("six times three is \(threeTimesTable[6])") // "six times three is 18" ์ถ๋ ฅ
- (์ฐธ๊ณ ) https://jusung.gitbook.io/the-swift-language-guide/language-guide/12-subscripts
- String์ ์ subscript๋ก ์ ๊ทผ์ด ์๋๋์ง ์ค๋ช
ํ์์ค.
- Swift์ String์ Struct ํ์ ์ด๊ณ , characters์ collection ํ์ ์ด๋ค. ์ฆ Array<Element>์ element๊ฐ Character์ธ ๋ฐฐ์ด์ด๋ค.
- ํ์ง๋ง Swift์์ String์ subscript, ์ฆ str[0]๊ฐ์ด Int๋ก ์ ๊ทผํ์ง ๋ชปํ๊ณ , String.index๋ก ์ ๊ทผํด์ผํ๋ค. ๊ทธ ์ด์ ๋ Swift์์ Character๋ 1๊ฐ ์ด์์ Unicode Scalar๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์ฆ ํฌ๊ธฐ๊ฐ ๊ฐ๋ณ์ ์ด๋ค.
-
let test = "๐คก๐ค123" let index = test.index(text.startIndex, offsetBy: 1) print(index) // Index(_rawBits: 1180673) print(test[index]) // ๐ค
- (์ฐธ๊ณ ) https://velog.io/@hansangjin96/Swift-String%EC%9D%80-%EC%99%9C-subscriptInt%EB%A1%9C-%EC%A0%91%EA%B7%BC%EC%9D%B4-%EC%95%88%EB%90%A0%EA%B9%8C
- instance ๋ฉ์๋์ class ๋ฉ์๋์ ์ฐจ์ด์ ์ ์ค๋ช
ํ์์ค.
- instance ๋ฉ์๋์ ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ ํํ์ ์ธ์คํด์ค์ ์ํ ๋ฉ์๋๋ฅผ ์๋ฏธํจ. ํด๋์ค๋ฅผ ํตํด ํธ์ถํ ์ ์๊ณ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด์ ์ค์ฒดํ(์ธ์คํด์ค)ํ์ฌ ์์ฑ๋ ์ธ์คํด์ค๋ฅผ ํธ์ถ
- class ๋ฉ์๋๋ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด์ ์ค์ฒดํ ํ์ง ์์๋ ํด๋์ค๋ฅผ ํตํด ์ง์ ์ ์ผ๋ก ํธ์ถํ ์ ์๋ค.
-
class func methodName() { }
- ์ธ์คํด์ค ๋ฉ์๋์ ๋ฌ๋ฆฌ struct์ enum์์ ์ฌ์ฉํ ์ ์๋๋ฐ, ์๋ํ๋ฉด ์ด ๋์ ์์ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. class ๋ฉ์๋๋ static๋ฉ์๋๋ฅผ ์์ํ ์ ์๋๋ก ๋ง๋ ๋ฉ์๋์ด๊ธฐ ๋๋ฌธ์ด๋ค. swift์์๋ static ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ ์ ์๋๋ก ํด๋์ค ๋ฉ์๋๋ฅผ ์ถ๊ฐํ์๋ค. ์ฆ, ํด๋์ค์์ ํํด์ ์คํํฑ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
- (instance ๋ฉ์๋์ class ๋ฉ์๋์ ์ฐจ์ด ์ ๋ฆฌ)
- ์ ์๋ Class, struct, enum ์ ์ค์ฒดํ(์ธ์คํด์ค) ํ์ฌ ์ฌ์ฉํ๋๋
- ์ค์ฒดํ(์ธ์คํด์ค) ํ์ง์๊ณ ์ง์ ์ ์ผ๋ก ํธ์ถ ํ๋๋
- Class ๊ฐ ์๋ struct, enum ์์ ์ ์ธ๋ ์ ์๋๋ ์๋๋
- class ๋ฉ์๋์ static ๋ฉ์๋์ ์ฐจ์ด์ ์ ์ค๋ช
ํ์์ค.
-
class SwiftClass() { static func staticMethod() { } class func classMethod() { } } class DerivedSwiftClass: SwiftClass { override static func staticMethod() { } // ๋ถ๊ฐ๋ฅ Cannot override static method override class func staticMethod() { } // ๊ฐ๋ฅ }
- class๋ฉ์๋์ static ๋ฉ์๋๋ ํ์ ๋ฉ์๋์ ์ํ๋ฉฐ, static ๋ฉ์๋๋ ์ค๋ฒ๋ผ์ด๋๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
- (์ฐธ๊ณ ) https://babbab2.tistory.com/122
-
- Delegate ํจํด์ ํ์ฉํ๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฅผ ๋ค์ด ์ค๋ช
ํ์์ค.
- ๊ฐ์ธ์ ์ธ ๊ฒฝํ์์ ํ ์ด๋ธ ๋ทฐ๊ฐ ์๊ณ ์ ์ด ์ฌ๋ฌ๊ฐ ์๋ค๊ณ ์น์. ๊ทธ๋ผ ํ ์ด๋ธ ์ ์ ๋ฒํผ์ ๊ฐ๊ณ ์๋ค๊ณ ๊ฐ์ ํ ๋, ๋ด๋ถ ํน์ ๋ฒํผ์ ๋๋ ์ ๋, ํน์ ์ ์ ๋ฐ์ดํฐ ์ ๋ณด๋ฅผ ๊ฐ๊ณ ์ฒ๋ฆฌํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ custom Delegate๋ฅผ ๋ง๋ค์ด์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
- (์ฐธ๊ณ )https://prod.velog.io/@hayeon/Delegate-%ED%8C%A8%ED%84%B4%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%98%EB%8A%94-%EA%B2%BD%EC%9A%B0%EB%A5%BC-%EC%98%88%EB%A5%BC-%EB%93%A4%EC%96%B4-%EC%84%A4%EB%AA%85%ED%95%98%EC%8B%9C%EC%98%A4
- Singleton ํจํด์ ํ์ฉํ๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฅผ ๋ค์ด ์ค๋ช
ํ์์ค.
- ํน์ ์ฉ๋๋ก ๊ฐ์ฒด๋ฅผ ํ๋๋ง ์์ฑํด์ ๊ณต์ฉ์ผ๋ก ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- ์ฆ, ์ธ์คํด์ค๊ฐ ํ๋๋ง ์กด์ฌํ๋ ๊ฒ์ ๋ณด์ฆํ๊ณ ์ถ์ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋๋ฐ ํ๊ฒฝ์ค์ , ๋คํธ์ํฌ, ๋ก๊ทธ์ธ ์ ๋ณด ๋ฑ์ ํน์ ์ฉ๋๋ก ์์ฑํด๋ ๊ฐ์ฒด์ ๋ฃ์ด๋๊ณ ์ฌ๋ฌ ๊ฐ์ฒด์์ ์ ๊ทผํ๋๋ก ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ.
- (์ฅ์ ) ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ๋ง๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์๋ ์ฅ์ ์ด ์์
- (์ฃผ์) ํ๋ฒ ํ ๋น ๋ ๋ฉ๋ชจ๋ฆฌ๋ ๋๋ ๋๊น์ง ํ ๋น๋์ด ์๋ค.(ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ๋จ์ ์์ -> ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น ์กด์ฌ) ์ต์ด ํ ๋น ์์ ์ ์ ๊ทผํ๊ธฐ ์์ ์ ์ด๊ธฐํ ๋๋ฉฐ, ๋์ด์ ์ฌ์ฉํ์ง ์์ ๋๋ ๋ฆด๋ฆฌ์ฆํ๋ค. ex) ํ ํฑ๋งค๋์ ๊ตฌํ ์๊ฐํ๊ธฐ
- KVO ๋์ ๋ฐฉ์์ ๋ํด ์ค๋ช
ํ์์ค.โ
- KVO๋ A๊ฐ์ฒด์์ B๊ฐ์ฒด์ ํค์ ๊ฐ์ด ๋ณํ๋จ์ ๊ฐ์งํ ์ ์๋ ํจํด์ ๋๋ค. KVO ํจํด์ ๊ฐ์ฒด์ ๊ฐ์ฒด ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๋ค๋ฃฐ ๋ ์ ํฉํฉ๋๋ค. ๋ฉ์๋๋ ๋ค๋ฅธ ์ก์ ์์ ๋ํ๋๋ ๊ฒ์ด ์๋ ํ๋กํผํฐ์ ์ํ์์ ๋ฐ์ํ๋ ํํ
- ๋์๋ฐฉ์ : ๋ชจ๋ธ ๊ฐ์ฒด์ ์ด๋ค ๊ฐ์ด ๋ณ๊ฒฝ๋์์ ๊ฒฝ์ฐ ์ด๋ฅผ UI์ ๋ฐ์ํ๊ธฐ ์ํด์ ์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ธ ๊ฐ์ฒด์ Observing์ ๋์ ํ์ฌ ๋ธ๋ฆฌ๊ฒ์ดํธ์ ํน์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๋ ๊ฒ
- ์ฆ, ๋ณ์์ ์ฝ๋๋ฅผ ๋ถ์ฌ ๋ณ์๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ฝ๋๊ฐ ์คํ๋๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ์๋ฏธํ๋ค. property observers(willset , didSet)๊ณผ ์์ฃผ ์ ์ฌํ๋ฐ KVO๋ ํ์ ์ ์ ๋ฐ์์ observe๋ฅผ ์ถ๊ฐํ๋ค๋ ์ ์ด ๋ค๋ฅด๋ค. KVO๋ ์์ ์ค์ํํธ ์ฝ๋๋ก๋ ๊ทธ๋ฆฌ ์ข์ง ์์๋ฐ, ๊ทธ ์ด์ ๋ Objective-c ๋ฐํ์์ ์์กด ํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ NSObject๋ฅผ ์์๋ฐ๊ธฐ ์ํด @objc ๋ฅผ ๋ฐ๋์ ๋ถ์ฌ์ค์ผ ํ๋ค. ํนํ KVO๋ ์์ฑ ๊ฐ๊ฐ์ @objc dynamic ์ ๋ถ์ฌ์ค์ผ ํ๋ค.
- Delegates์ Notification ๋ฐฉ์์ ์ฐจ์ด์ ์ ๋ํด ์ค๋ช
ํ์์ค.
- ๋ ๊ฐ์ฒด ๋ชจ๋ ๊ฐ์ฒด๊ฐ์ ์ํต์ ์ํด ๋ง๋ค์ด์ง. ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์ํ๋ ๊ฐ์ฒด์ ํด๋น ์ฌํญ์ ์ ๋ฌํด์ ํน์ ์ฒ๋ฆฌ ์ํํ๋๋ก ๊ตฌ์ฑ๋๋ค.
- delegate ๋ฐฉ์์ ์ฃผ๋ก ์ด๋ฒคํธ๋ฅผ 1:1๋ก ์ ๋ฌํ ๋ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ฃผ๋ก protocol์ ์ ์ํ๊ณ ์ด๋ฅผ ์ด๋ฒคํธ๋ฅผ ๋์ ์ฒ๋ฆฌํ ๊ฐ์ฒด๊ฐ ์ฑํํ์ฌ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. ์ด์ ๋ฐ๋ผ ์ 3 ๊ฐ์ฒด๋ฅผ ํ์๋ก ํ์ง ์์ผ๋ฉฐ ํ์คํ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ์ง๋ง, ๋ง์ ์ค์ ์ฝ๋๋ฅผ ํ์๋ก ํ๋ฉฐ ๋ง์ ๊ฐ์ฒด์๊ฒ ์ด๋ฒคํธ๋ฅผ ์๋ฆฌ๊ณ ์ถ์ ๊ฒฝ์ฐ ๋นํจ์จ์ ์ด๋ผ๋ ๋จ์ ์ด ์์ต๋๋ค.
- notification ๋ฐฉ์์ ์ด๋ฒคํธ๋ฅผ 1:N์ผ๋ก ์ ๋ฌํ ๋ ์ฉ์ดํฉ๋๋ค. NotificationCenter๋ผ๋ ์ฑ๊ธํค๊ฐ์ฒด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฒคํธ ๋ฐ์์ฌ๋ถ๋ฅผ ์ต์ ๋ฒ๋ฅผ ๋ฑ๋กํ ๊ฐ์ฒด์๊ฒ ์ ๋ฌํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ค์์ ๊ฐ์ฒด์๊ฒ ์์ฝ๊ฒ ์ด๋ฒคํธ ์ ๋ฌ์ด ๊ฐ๋ฅํฉ๋๋ค. ํ์ง๋ง ์ 3 ๊ฐ์ฒด๋ฅผ ํ์์ ์ผ๋ก ํ์๋ก ํ๋ฉฐ, key๊ฐ์ผ๋ก Notification์ ์ด๋ฆ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ์ค ๊ตฌ๋ ์ด ์ ๋๋ก ์ด๋ฃจ์ด์ ธ์๋์ง ํ์ธํ ์ ์๋ค๋ ๋จ์ ์ด ์กด์ฌํฉ๋๋ค.
- (์ฐธ๊ณ ) https://github.com/lunchScreen/Interview_Questions/issues/59
- ๋ฉํฐ ์ฐ๋ ๋๋ก ๋์ํ๋ ์ฑ์ ์์ฑํ๊ณ ์ถ์ ๋ ๊ณ ๋ คํ ์ ์๋ ๋ฐฉ์๋ค์ ์ค๋ช
ํ์์ค.
- ๋ฉํฐ ์ค๋ ๋ฉ์ ์ฌ์ฉํ๋ ์ด์ : ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์งํ ์, ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํ์ ๋ฐฉํดํ์ง ์๊ณ ๋ฉํฐ ์ฝ์ด์์ ํฐ ์์ ์ ์ฌ๋ฌ๊ฐ๋ก ๋ถํ ํ์ฌ ์งํํด์ผ ํ๊ธฐ์, ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ๊ณผ ์์คํ ์์ ์ ์ฝํ๊ธฐ ์ํด์.
- ์ด๋ค ์์ ์ ๊ธ๋ก๋ฒ ํ์ ๋ฃ์ด์ผ ํ๋์ง ์ ํํ ์์๋ฌ์ผ ํ๊ณ , ๊ธ๋ก๋ฒ ํ์ ๋ฐฐ์นํ ๋์๋ QoS๋ฅผ ์ ์ ํ๊ฒ ์ฌ์ฉํด์ผํฉ๋๋ค. ๋ํ ๋๊ธฐ ๋ฐ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํ ์ง ๋ช ํํ๊ฒ ์ ์ํ๊ณ ์ํฉ์ ์ธ๊ณผ๊ด๊ณ๋ฅผ ์ค์ ํ๊ฑฐ๋ ํน์ ์๊ฐ ์ดํ์ ์ฒ๋ฆฌํ๋๋ก ์ค์ ํฉ๋๋ค.
- ์ง์ ์ ์ผ๋ก ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํ์ง ์๊ณ ํ๋ฅผ ํ์ฉํ์ฌ ์์ ์ ๋ถ์ฐ์ฒ๋ฆฌํ๊ณ GCD, Operation์ ์ด์ฉํ์ฌ iOS์์ ์์์ ์ค๋ ๋ ์ซ์๋ฅผ ๊ด๋ฆฌํ๊ณ ๋ค๋ฅธ ์ค๋ ๋๋ค์ด ๋น๋๊ธฐ์ ์ผ๋ก ๋์ํ๋๋ก ๋ง๋ญ๋๋ค.
- (์ฐธ๊ณ ) https://velog.io/@hayeon/Delegate-%ED%8C%A8%ED%84%B4%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%98%EB%8A%94-%EA%B2%BD%EC%9A%B0%EB%A5%BC-%EC%98%88%EB%A5%BC-%EB%93%A4%EC%96%B4-%EC%84%A4%EB%AA%85%ED%95%98%EC%8B%9C%EC%98%A4
- MVC ๊ตฌ์กฐ์ ๋ํด ๋ธ๋ก ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ณ , ๊ฐ ์ญํ ๊ณผ ํ๋ฆ์ ์ค๋ช
ํ์์ค.
- MVC ํจํด Model - Controller - View ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- Model : ์ฑ์ ์ ๋ณด์ ๋ฐ์ดํฐ(DB, ๋ณ์, ์ด๊ธฐํ ๊ฐ ๋ฑ) ์ฌ์ฉ์๊ฐ ํธ์งํ๊ณ ์ํ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณ ์์ด์ผ ํ๋ฉฐ view๋ controller์์๋ ์ด๋คํ ์ ๋ณด๋ ์๋ฉด ์๋๋ค. ๋ํ, ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ฉด ๋ณ๊ฒฝ ํต์ง์ ๋ํ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ๊ตฌํํด์ผ ํ๋ค.
- Controller : ๋ชจ๋ธ์ด๋ ๋ทฐ์ ๋ํด์ ์์์ผ ํ๋ค. ๋ชจ๋ธ์ด๋ ๋ทฐ์ ๋ณ๊ฒฝ์ ๋ชจ๋ํฐ๋ง ํด์ผํ๋ค. (Model๊ณผ View๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ )
- View : ๋ชจ๋ธ์ด ๊ฐ์ง ์ ๋ณด๋ฅผ ๋ฐ๋ก ์ ์ฅํด์๋ ์๋๋ฉฐ, ๋ชจ๋ธ์ด๋ ์ปจํธ๋กค๋ฌ์ ๊ฐ์ด ๋ค๋ฅธ ๊ตฌ์ฑ์์๋ค์ ๋ชฐ๋ผ์ผ ํ๋ค. ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ฉด ๋ณ๊ฒฝ ํต์ง์ ๋ํ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ๊ตฌํํด์ผ ํ๋ค. ( UI๋ด๋น )
- [Controller - Model]
- Controller๋ Model์๊ฒ ์ธ์ ๋ ์ง ์ด์ผ๊ธฐ ํ ์ ์์ต๋๋ค.
- ๋ชจ๋ธ์ ๋ชจ๋ ๊ฒ์ ์๊ณ ์๊ณ , ๋ณด๋ด๊ณ ์ถ์ ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค.
- Model์ Controller์๊ฒ ์ด์ผ๊ธฐํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- ์ด์ ๋ ์ปจํธ๋กค๋ฌ๋ UI๋ก์ง์ ๋ค๋ฃจ๋๋ฐ ๋ชจ๋ธ๊ณผ UI๋ ๋ณ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ํ์ง๋ง UI์ ์๊ด์๋ ๋ชจ๋ธ์ด ๊ฐ์ด ๋ฐ๋๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด Notification ๊ณผ KVO ๋ฅผ ์ด์ฉํ์ฌ ์ปจํธ๋กค๋ฌ์ ์ํตํ ์ ์์ต๋๋ค.
- ์ฆ ์ด ๋ํ ์ปจํธ๋กค๋ฌ์๊ฒ ์ง์ ๋งํ๋ ๋ฐฉ์์ด ์๋ ๋ฐฉ์ก์ฒ๋ผ ๊ทธ๋ค์๊ฒ ์ ๋ฌํด์ค๋๋ค.
- Controller๋ Model์๊ฒ ์ธ์ ๋ ์ง ์ด์ผ๊ธฐ ํ ์ ์์ต๋๋ค.
- [Controller - View]
- Controller์ View ์ฐ๊ฒฐ์ ๋๋ถ๋ถ Outlet์ ํตํด ์ด๋ฃจ์ด์ง๋๋ค.
- View์ Controller ์ญ์ ์ด์ผ๊ธฐํ ํ์๊ฐ ์์ต๋๋ค.
- ์ด์ ๋ ๋ทฐ๋ ์ปจํธ๋กค๋ฌ์ ํ์์ข ์์์ด๊ณ , UI์์์ ์ผ์ด๋๋ ๊ฒ๋ค์ Controller์๊ฒ ์ ๋ฌํด์ผํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ๋ฐ๋ผ์ ๋ทฐ๋ ์ปจํธ๋กค๋ฌ์๊ฒ ์ด์ผ๊ธฐํ ๋ ๋์ ๋ณด์ด์ง ์๊ณ ๊ตฌ์กฐํ๋์ด์ผํฉ๋๋ค.
- ๋์ ๋ณด์ด์ง ์๋๋ค๋ ๊ฑด ๋ทฐ์ ์๋ ๊ฐ์ฒด๋ ์์ ์ด ์ด๋ค ํด๋์ค์๊ฒ ์ด์ผ๊ธฐํ๊ณ ์๋์ง ๋ชจ๋ฅธ๋ค๋ ๋ป
- ๊ตฌ์กฐํ๋์ด์ผ ํ๋ค๋ ๊ฑด ๊ฐ์ฒด์ ๋ํด ์๋ ๋ฐ๊ฐ ์๊ธฐ์ ์ ๋๋ก ๋ฏธ๋ฆฌ ์์ ๋์ด ์๋ ๋ฐฉ์์ผ๋ก ์์ฌ์ํต ํด์ผํ๋ค๋ ๋ป
- target-action
- ์ปจํธ๋กค๋ฌ๊ฐ @IBAction ์ฝ๋๋ก ๋ฉ์๋๋ฅผ ์์ฑํฉ๋๋ค(ํ๊ฒ).
- ๋ทฐ์ ํ์์ข ์์ ๊ฐ์ฒด๊ฐ ์ปจํธ๋กค๋ฌ๊ฐ ์์ฑํ ํ๊ฒ๋ฉ์๋์ ์ฐ๊ฒฐํ๋ฉด ๋ทฐ๊ฐ ์ปจํธ๋กค๋ฌ์ ์ด์ผ๊ธฐํ๊ณ ์ถ์ ๋ ๊ฐ๋จํ๊ฒ ํ๊ฒ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ๋ฉ๋๋ค.
- ๋ทฐ๋ก๋ถํฐ ์ปจํธ๋กค๋ฌ๋ก ๋ณด๋ด์ง๊ณ ์๋ ์ก์ ์ ๋ณดํต ์ปจํธ๋กค + ๋๋๊ทธ๋ก ์ฐ๊ฒฐํฉ๋๋ค
- delegate
- ๊ฐ๋ ๋ทฐ๋ ๋จ์ํ ํฐ์น๋๋ ๊ฒ ์ด์์ผ๋ก ๋ ๋ณต์กํ ์์ฌ์ํต์ ํ๊ธฐ๋ ํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด ๋ทฐ์ ํ์์ข ์์์ธ ์คํฌ๋กค ๋ทฐ๋ ๋ค์ํ ์ ๋ณด๋ค์ ์ปจํธ๋กค๋ฌ์๊ฒ ์ด์ผ๊ธฐํฉ๋๋ค. ์๋ํ๋ฉด ์ปจํธ๋กค๋ฌ๋ ๊ทธ๊ฒ์ ๋ํด ์๊ณ ๋ฐ์ํด์ผ ํ๊ณ , ์ ๋ณด๊ฐ ๋ชจ๋ธ์ ์ํฅ์ ์ค ์๋ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ๋ฐ๋ผ์ ์ฃผ๊ณ ๋ฐ๋ ์ ๋ณด๋ค์ด ๋ง์ ๊ฒ์ด๊ณ , should, will, did ๊ฐ์ ๋ง์ด ํฌํจ๋ ๊ฒ์ ๋๋ค.
- ๋ทฐ์ ํ์์ข
์์๋ค์ ์ปจํธ๋กค๋ฌ์๊ฒ ๋ค์ํ ์ง๋ฌธ์ ํ๊ณ ์ถ์ดํ๋๋ฐ should, will, did ๊ฐ์ ๋ง์ด ํฌํจ๋ ์ง๋ฌธ๋ค์ ๋ธ๋ฆฌ๊ฒ์ดํธ๋ผ๋ ๊ฒ์ ํตํด ์ด๋ค์ง๊ฒ ๋ฉ๋๋ค.
- delegate๋ ์์์ด๋ผ๋ ๋ป์ธ๋ฐ, ๋ทฐ์ ํ์์ข ์์๋ค์ด ์ปจํธ๋กค๋ฌ์๊ฒ ์ด๋ค ์ฑ ์์ ์์ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๋จ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ธ๋ฆฌ๊ฒ์ดํธ๋ ๋ทฐ ์์ ์๋ ํ๋กํผํฐ์ ๋๋ค.
- datasource
- ๋ทฐ๋ ์์ ์ด ๋ณด์ฌ์ฃผ๊ณ ์๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ์์ต๋๋ค.
- ๋ทฐ๋ ์ปจํธ๋กค๋ฌ์๊ฒ ๋งค๋ฒ ๋ฌผ์ด๋ณด๊ณ , ์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ ํ์ํฉ๋๋ค.
- ์ด๊ฒ์ ๋ธ๋ฆฌ๊ฒ์ดํธ์ ๋ค๋ฅธ์ข ๋ฅ์ ํ๋กํ ์ฝ์ ๋๋ค.
- should, will, did ๋์ ๋ค๋ฅธ ํ๋กํ ์ฝ์ ๋ฉ์์ง๋ฅผ ๋ฐ์ต๋๋ค.
- ๋ทฐ๋ ๋ฐ์ดํฐ์ ๋ํด ์ด๊ณณ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฌ๋ผ๊ณ ํ๊ฑฐ๋, ๋ฐ์ดํฐ์ ๊ฐ์๊ฐ ๋ช๊ฐ์ธ์ง ๋ฌผ์ด๋ด์ ๋ฌด์จ ์ผ์ด ์๊ธฐ๊ณ ์๋์ง ์๊ฒ๋๊ณ , ๊ทธ๊ฑธ ํ๋ฉด์ ๋ณด์ฌ์ค ๊ฒ์ ๋๋ค.
- ์ด๊ฒ ๋ํ ๋ธ๋ฆฌ๊ฒ์ด์ ๊ณผ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ฐ ์ฌ๊ธฐ์ ์ฐ์ด๋ ๋ธ๋ฆฌ๊ฒ์ดํธ๊ฐ ๋ฐ๋ก ๋ฐ์ดํฐ์์ค์ ๋๋ค.
- ํ๋กํ ์ฝ์ด๋ ๋ฌด์์ธ์ง ์ค๋ช
ํ์์ค.
- ํน์ ์ญํ ์ ํ๊ธฐ ์ํ ๋ฉ์๋, ํ๋กํผํฐ, ๊ธฐํ ์๊ตฌ์ฌํญ ๋ฑ์ผ๋ก ์กฐ๊ฑด์ ์ ์๋ฅผ ํ ๋ฟ ์ค์ค๋ก ๊ธฐ๋ฅ์ ๊ตฌํํ์ง ์๋๋ค.
- ํ์ง๋ง ํ๋กํ ์ฝ์ ์ ์ํ ํ๋กํผํฐ, ๋ฉ์๋๋ ํ์๋ก ์ ์ํด์ผํ๋ ์กฐ๊ฑด์ ๋๋ค.
- ํ๋กํผํฐ๋ฅผ ์ ์ํ ๋๋ get / set ํค์๋๋ฅผ ์ฌ์ฉํด ๋ฐ๋์ ๋ช ์ํ๊ณ , ๋ฉ์๋๋ฅผ ์ ์ํ ๋ ๊ตฌํ์ด ์๊ฒ๋ ์์ฑํ๊ณ , staticํค์๋๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ์ธ์คํด์ค ๋ฉ์๋๋ ํ์ ๋ฉ์๋๊ฐ ๋๋๋ก ์ ์ํ ์๋ ์์.
- ๊ตฌ์กฐ์ฒด, ํด๋์ค ,์ด๊ฑฐํ์ ํ๋กํ ์ฝ์ ์ฑํํด์ ์๊ตฌ์ฌํญ์ ์ค์ ๋ก ๊ตฌํํ ์ ์์.
- valueํ์ ์ธ ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ์ผ ๊ฒฝ์ฐ, ๋ฉ์๋๊ฐ ๋ฉ์๋ ์์ ์ด ์ํด ์๋ ์ธ์คํด์ค๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ ์๋ํ๋ ๊ฒฝ์ฐ์๋ ๋ฐ๋์ ๋ฉ์๋ ์ ์๋ถ ์ ๋ถ๋ถ์ mutating ํค์๋๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค.
- class๋ง @objc ์์ฑ์ ์ฌ์ฉํ๋ ํ๋กํ ์ฝ ์ฑํ์ด ๊ฐ๋ฅํฉ๋๋ค.
protocol testDelegate { var test: Int { get } var test2: Int? { get } func textFunction(hello: String) -> String } extension testDelegate { var text: Int { return 3 } func textFunction(hello: String) -> String { return "test \(hello)" } } class testClass: testDelegate { var text2: Int? } let example: testClass = testClass() print(example.test) // 3 print(example.test2) // nil print(example.textFunction(hello: "hi")) // test hi
- ํ๋กํ ์ฝ์๋ extension์ ์ ์ฉํ ์ ์๋ค. extension์์ ์ต์ ๋ ๋ถ๋ถ์ ์ ์ํด์ฃผ๊ณ ์๋ค.
- Protocol Oriented Programming๊ณผ Object Oriented Programming์ ์ฐจ์ด์ ์ ์ค๋ช
ํ์์ค.
- Protocol Oriented Programming์ ํ๋กํ ์ฝ ์ค์ฌ ํ๋ก๊ทธ๋๋ฐ, Object Oriented Programming์ ๊ฐ์ฒด ์ค์ฌ ํ๋ก๊ทธ๋๋ฐ์ ๋๋ค. POP๋ ํ๋กํ ์ฝ ํ์ฅ์ ํตํ์ฌ ์ํ ๊ตฌ์กฐ๋ก ํ์ ์ ํ์ฅํ๊ณ , OOP๋ ์ํผํด๋์ค์ ์์์ ํตํ์ฌ ์์ง ๊ตฌ์กฐ๋ก ํ์ ์ ํ์ฅํ๋ ๋ฐฉ์์ผ๋ก ๋คํ์ฑ์ ๊ตฌํ ํฉ๋๋ค.
- OOP๋ ์์์ ๊ธฐ๋ณธ ์ ์ ๋ก ๊ฐ์ ธ๊ฐ๊ธฐ ๋๋ฌธ์ Super Class์ Sub Class๊ฐ ์์ฑ๋ฉ๋๋ค. ์ด ๋ Sub Class๋ Super Class๋ฅผ ๊ทธ๋๋ก ์์๋ฐ๊ธฐ ๋๋ฌธ์ ์์ ์๊ฒ ํ์ํ์ง ์์ property๋ method๋ฅผ ๊ฐ์ง์ ์์ต๋๋ค. ํ์ง๋ง POP๋ protocol์ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ์ง์ ๊ตฌํํ๋ ๊ฒ์ด ์ ์ ์ ๋๋ค. ๋ฐ๋ผ์ ํ์ํ์ง ์์ property๋ method๋ฅผ ๊ฐ์ง ์๋๋ก ๊ตฌํํ ์ ์์ต๋๋ค. ๋ํ ์์์์๋ ํ๋์ Sub Class๋ ํ๋์ Super Class๋ง์ ๊ฐ์ง ์ ์์ง๋ง Protocl์ ๊ทธ๋ ์ง ์์ต๋๋ค.
- (์ฐธ๊ณ ) https://github.com/lunchScreen/Interview_Questions/issues/28
- Hashable์ด ๋ฌด์์ด๊ณ , Equatable์ ์ ์์ํด์ผ ํ๋์ง ์ค๋ช
ํ์์ค.
- Hashable์ด๋ Set, Dictionary ๋ฑ Collection ๊ตฌ์กฐ์์ ์์์ ์๋ฃํ์ ์ ์์ ๊ฐ์ผ๋ก ๋ณํํ์ฌ Key๊ฐ์ ํตํ์ฌ ๊ฐ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์ ๊ทผํ ์ ์๋๋ก ํด์ค๋ค. ๋ํ Hashable์ Equatable์ ํ๋กํ ์ฝ์ ์ค์ํ์ฌ์ผ ํ๋๋ฐ, ์ด๋ Hashable์ ํตํด์ ๋ณํ๋ ์ ์์ ๊ฐ์ ๋ฐํ์ผ๋ก ์ธ์คํด์ค๋ฅผ ๋น๊ตํ์ฌ ์ฐพ์์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
- Hashable์ ๋์ ๋๋ฆฌ์์ Key๊ฐ์ ์ค์ ํ ๋ ์์ฃผ ์ธ๊ธ๋๋ค.
- (์ฐธ๊ณ ) https://dev-dream-world.tistory.com/68
- mutating ํค์๋์ ๋ํด ์ค๋ช
ํ์์ค.
- ํด๋์ค๋ ref ํ์ ์ด๊ณ struct์ enum์ value type์ด๋ค. value ํ์ ์ ์์ฑ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉ์๋ ๋ด์์ ์์ ํ ์ ์๋ค. ๋ง์ฝ ์์ ํด์ผ ํ๋ ๊ฒฝ์ฐ mutating์ ๋ถ์ฌ์ฃผ๋ฉด ๋ฉ๋๋ค. mutating์ ์ ์ธํ ๋ฉ์๋๋ ๋ฉ์๋ ๋ด์์ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค. mutating์ ์ ์ธํ ๋ฉ์๋๋ ๋ฉ์๋ ๋ด์์ ํ๋กํผํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๊ณ , ๋ฉ์๋๊ฐ ์ข ๋ฃ๋ ๋ ๋ณ๊ฒฝํ ๋ชจ๋ ๋ด์ฉ์ ์๋ struct์ ๋ค์ ๊ธฐ๋กํฉ๋๋ค. ๋ํ ๋ฉ์๋๋ self property์ ์ ์ธ์คํด์ค๋ฅผ ํ ๋นํ ์๋ ์๋ค.
- mutating ํค์๋๋ ํด๋น ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค๋ฉด ์ค์ ๋ณต์ฌ๋ฅผ ํด์ผํ๋ค๊ณ ์๋ ค์ฃผ๋ ์ญํ
- ํ์ถ ํด๋ก์ ์ ๋ํ์ฌ ์ค๋ช
ํ์์ค.
- ํจ์์ ์ธ์๋ก ์ ๋ฌ๋ ํด๋ก์ ๊ฐ ํจ์๊ฐ ๋ฐํ๋ ํ ์คํ๋๋ ํด๋ก์ , ์ ๋ฌ์ธ์๋ก ๋ฐ์ ํด๋ก์ ๊ฐ ํจ์ ์ข ๋ฃ ํ์ ํธ์ถ๋ ๊ฒฝ์ฐ "ํด๋ก์ ๊ฐ ํจ์๋ฅผ ํ์ถํ๋ค"๋ก ํํ
- (์ฌ์ฉ๋ฒ) @escaping ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ช ์
- (์ธ์ ํ์ถํ ๊น?) ์ ๋ฌ ๋ฐ์ ํด๋ก์ ๊ฐ ํด๋ก์ ํจ์ ์ธ๋ถ๋ก ๋ค์ ๋ฐํ๋๋ ๊ฒฝ์ฐ, ์ธ๋ถ ๊ธ๋ก๋ฒ ๋ณ์์ ์ ์ฅ๋๋ ๊ฒฝ์ฐ
-
// @escaping ์ ์ธ์ด ์๋ค๋ฉด ๊ตฌ๋ฌธ ๋ฐ์์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์, ๋ฐฐ์ด์ ํ ๋น์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. var completionHandlers: [() -> Void] = [] func withEscaping(completion: @escaping () -> Void) { completionHandlers.append(completion) }
- (์ ํ์ถ ์ํฌ๊น?) ๋ณดํต์ ๋น๋๊ธฐ ์์ ์ ์ํด์ ์ฌ์ฉ
-
private func requestSignup(_ url: String, _ headers: HTTPHeaders?, _ parameters: Parameters?, _ completion: @escaping (NetworkResult<Codable>) -> Void) { guard let url = try? url.asURL() else { return } AF.request(url, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers) .validate(statusCode: 200...500) .responseDecodable(of: APIResponseData<APICantSortableDataResult<SignupResponse>, APIError>.self) { response in switch response.result { case .success(let signupResponse): guard let statusCode = response.response?.statusCode else { return } if statusCode == 200 { completion(.success(signupResponse.data?.result)) } else { completion(.requestErr(signupResponse.error?.errorMessage)) } case .failure: completion(.networkFail) } } }
- ์ด๋ ๊ฒ ํ์ถ ํด๋ก์ ๋ฅผ ์ฌ์ฉํด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ค๊ณ ๊ฒฐ๊ณผ์ ๋ง๋ ๋ถ๊ธฐ์ฒ๋ฆฌ๋ก ํด๋น ํจ์ ๊ตฌ๋ฌธ ๋ฐ์์๋ ์ ์ ํ ๋์์ ํ ์ ์๋๋ก ์ค๊ณํ ์ ์๋ค
- Extension์ ๋ํด ์ค๋ช
ํ์์ค.
- ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ, ํ๋กํ ์ฝ ํ์ ์ ์๋กญ๊ฒ ๊ธฐ๋ฅ ๋ฑ์ ์ ์, ํน์ ํ์ ์ ๊ธฐ๋ฅ ๋ฐ ์ค์ํ๋ ํ๋กํ ์ฝ๋ณ ๊ตฌํ๋ถ๋ฅผ ๋ถ๋ฆฌํด์ ๋ณด๋ค ์ฝ๋ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์์.
- ์ ์ฅ ํ๋กํผํฐ๋ฅผ ์ ์ธํ ์ ์์.
- Extension ๋ด๋ถ์์ ํจ์๋ฅผ overrideํ ์ ์๋์ง ์ค๋ช
ํ์์ค.
- ์ ํ ๊ณต์ ๋ฌธ์์์๋ "extension์ ํ์ ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์์ผ๋, ๊ธฐ์กด์ ์กด์ฌํ๋ ๊ธฐ๋ฅ์ Overrideํ ์ ์๋ค"๊ณ ๋ช ์๋์ด ์์ผ๋, ๊ฐ๋ฐ์์๋ extension์ ํตํด override๊ฐ ๊ฐ๋ฅํ๋ค. ๊ทธ ์ด์ ๋ obj-c์ ํธํ์ฑ์ ์ํด์ ๊ทธ๋ฌ๋, ์ ํ์์๋ ์ต์คํ ์ ์ ๊ธฐ๋ฅ์ ์ถ๊ฐ๋ฅผ ์ํด์ ์ฌ์ฉํ๋ผ๊ณ ํ๋ ์ต์คํ ์ ์์ ์ค๋ฒ๋ผ์ด๋๋ ์ง์ํ์.
- (์ฐธ๊ณ ) https://feather.tistory.com/2
- ์ ๊ทผ ์ ์ด์์ ์ข
๋ฅ์ ์ด๋ค๊ฒ ์๋์ง ์ค๋ช
ํ์์ค.
- 1. private : ๊ตฌํํ ๋ฒ์ ๋ด์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- 2. fileprivate : ๊ตฌํ๋ ์์คํ์ผ ๋ด์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- 3. internal(default) : ์์คํ์ผ์ด ์ํด ์๋ ๋ชจ๋ ์ด๋์๋ ์ฌ์ฉํ ์ ์์, ์ธ๋ถ ๋ชจ๋์์๋ ์ ๊ทผ ๋ถ๊ฐ
- 4. public : ์ด๋์๋ ์ฌ์ฉ๋ ์ ์๊ณ , ์ฃผ๋ก ํ๋ ์์ํฌ์์ ์ธ๋ถ์ ์ฐ๊ฒฐ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋๋ฐ ๋ง์ด ์ฐ์
- 5. open : ํด๋์ค์ ํด๋์ค ๋ฉค๋ฒ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ, ๋ชจ๋ ๋ฐ์ ๋ค๋ฅธ ๋ชจ๋์์๋ ์ฌ์ ์ ๊ฐ๋ฅ, open์ ๋ช ์ํ๋ ๊ฒ์ ํด๋์ค๋ฅผ ๋ค๋ฅธ ๋ชจ๋์์๋ ๋ถ๋ชจ ํด๋์ค๋ฅผ ์ฌ์ฉํ ๋ชฉ์ ์ผ๋ก ์ค๊ณํ๋ค๋ ๊ฒ์ ์๋ฏธ
- (1,2,3)์ Application development (4,5) Framework develpment์์ ์ฌ์ฉ
- defer๋ ๋ฌด์์ธ์ง ์ค๋ช
ํ์์ค.
- defer๋ ํ์ฌ ์ฝ๋ ๋ธ๋ก์ ๋๊ฐ๊ธฐ ์ ์ ๊ผญ ์คํํด์ผ ํ๋ ์ฝ๋
- defer๊ฐ ํธ์ถ๋๋ ์์๋ ์ด๋ป๊ฒ ๋๊ณ , defer๊ฐ ํธ์ถ๋์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ์ค๋ช
ํ์์ค.
- defer๋ ์ ์ธ๋ ์ญ์์ผ๋ก ์คํ๋๋ค. ์ฆ ์๋ -> ์, ์ค์ฒฉ์ ๊ฒฝ์ฐ๋ defer์์ ๋ด๋ถ -> ์ธ๋ถ ์์์ด๋ค.
- ํธ์ถ๋์ง ์๋ ๊ฒฝ์ฐ๋
- 1. throw๋ฅผ ์ด์ฉํด์ ์ค๋ฅ๋ฅผ ๋์ง ๊ฒฝ์ฐ
- 2. guard๋ฌธ์ ์ฌ์ฉํ์ฌ ์ค๊ฐ์ ํจ์๋ฅผ ์ค๋จํ๋ ๊ฒฝ์ฐ
- 3. ๋ฆฌํด๊ฐ์ด never(๋น๋ฐํํจ์)์ ๊ฒฝ์ฐ
- property wrapper์ ๋ํด์ ์ค๋ช
ํ์์ค.
- ๋ฐ๋ณต์ ์ผ๋ก ๋ํ๋๋ property ๊ตฌํ ํจํด์ ๋ํ ์งํฉ์ ์ปดํ์ผ๋ฌ์ ํ๋์ฝ๋ฉ ํ๋ ๋์ , ์ด๋ฌํ ํจํด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ ์ํ ์ ์๋ ์ผ๋ฐ์ ์ธ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋๊ฒ.
- @ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ SwiftUI์์ @State @Binding @EnvironmentObject ๋ฑ์ ๋ง์ Property wrapper๋ฅผ ์ฌ์ฉํ๋ค.
- Generic์ ๋ํด ์ค๋ช
ํ์์ค.
- ํฌ๊ด์ ์ธ์ด๋ ์๋ฏธ๋ฅผ ๊ฐ์ง ๋ป์ผ๋ก Swift์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ ์ค ํ๋.
- ์ ๋ค๋ฆญ์ ์ด์ฉํ๋ค๋ฉด ํ์ ์ ์ ์ฐํ๊ฒ ๋์ฒํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๋ค. ์ ๋ค๋ฆญ์ผ๋ก ๊ตฌํํ ๊ธฐ๋ฅ๊ณผ ํ์ ์ ์ฌ์ฌ์ฉ์ ์ฉ์ดํ๋ฉฐ, ์ฝ๋์ ์ค๋ณต์ ์ค์ผ ์ ์์ด ๊น๋ํ ํํ์ด ๊ฐ๋ฅํ๋ค. ๋ํ ์ ๋ค๋ฆญ์ ํ์ ์ ์ฝ์ ๊ฑธ์ด์ค ์๋ ์๋ค. ํ์ ์ ์ฝ์ ํด๋์ค ํ์ ๋๋ ํ๋กํ ์ฝ๋ง ๊ฐ๋ฅํ๋ค. (๊ตฌ์กฐ์ฒด ํน์ ์ด๊ฑฐํ ๋ฑ์ ํ์ ์ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅ)
-
func swap<T>(_ a: inout T, _ b: inout T) { let temp: T = a a = b b = temp } var first = 1 var second = 2 swap(1,2) print("\(first) \(second)") // 2 1 var str1 = "str1" var str2 = "str2" swap(str1, str2) print("\(str1) \(str2)") // str2 str1 // ํ์ ์ ์ ์ฝํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ func substract<T: BinaryInteger>(_ a: inout T, _ b: inout T) -> T { return a - b }
- some ํค์๋์ ๋ํด ์ค๋ช
ํ์์ค.
- swiftUI์์ body์ ์์นํ someํค์๋๋ฅผ ์์ฃผ ๋ณด์๋๋ฐ ์ฐ์ body ํ๋กํผํฐ๋ computed property๋ก์จ view์ contents๋ฅผ returnํ๋ค. some ํค์๋๋ ๋ฆฌํด ํ์ ์ ์๋์ผ๋ก ๊ทธ๋ฆฌ๊ณ ๋น ๋ฅด๊ฒ ์ถ๋ก ํ ์ ์๋ ์ค์์น ๊ธฐ๋ฅ
- some์ด๋ผ๋ ํค์๋๋ ๋ช ํํ์ง ์์ ํ์ ์ผ๋ก ํ๋กํ ์ฝ์ ์ ์๋์ด ์๊ณ , ํจ์๋ ์ฐ์ฐ ํ๋กํผํฐ๋ฅผ ๋ง๋ค์ด์ ์ด ํ๋กํ ์ฝ์ ๋ฐํ ํ์ ์ผ๋ก ๊ฐ๊ณ ์ถ์ ๋ ์์ง ๋ช ํํ์ง ์์ ํ์ ์ด๋ผ์ ์ปดํ์ผ ๊ณผ์ ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฒ ๋๋๋ฐ ๊ทธ ์ค๋ฅ๋ฅผ ์์ ๊ธฐ ์ํด ๊ทธ ์ญํ ์ ๋ช ํํ๊ฒ ๋ง๋ค์ด์ฃผ๊ณ ์ ์ฌ์ฉํ๋ ๊ฒ์ด someํค์๋์ด๋ค. ์ด๋ฅผ ํตํด ์ปดํ์ผ๋ฌ์๊ฒ ํจ์ ํน์ ํ๋กํผํฐ๋ ๋์ผํ ๋ช ํํ ํ์ ์ ๊ฐ์ง ๊ฐ๋ง์ ๋ฐํํ๋ค๋ ๊ฒ์ ์๋ ค์ค๋ค.
- (์ ๋ฆฌ) ์ปดํ์ผ๋ฌ์์ concrete type์ ๋ฐํํ๋ค๊ณ ํ์ ์ ์ฃผ๋ ํค์๋
- (์ฐธ๊ณ ) https://peachberry0318.tistory.com/18
- Resultํ์
์ ๋ํด ์ค๋ช
ํ์์ค.
- Swift์์ ์ ๊ณตํด์ฃผ๋ ํ์ ์ผ๋ก success์ failure๋ก ๋๋์ด์ ธ ์๊ณ , ์ด ๋๊ฐ์ง ์ผ์ด์ค์ ๋ํ ์ฐ๊ด๋ ๊ฐ์ ํํํ๋ค. enum์ผ๋ก ๋ง๋ค์ด์ ธ ์๋ค.
- Codable์ ๋ํ์ฌ ์ค๋ช
ํ์์ค.
- swift4์์ ๋์์ Encodable๊ณผ Decodable์ด ํฉ์ณ์ง ๊ฒ.
- Encodable : data๋ฅผ Encoder๋ฅผ ํตํด ๋ณํํด์ฃผ๋ ค๋ ํ๋กํ ์ฝ๋ก ๋ฐ๊ฟ์ฃผ๋ ๊ฒ
- Decodable : data๋ฅผ ์ํ๋ ๋ชจ๋ธ๋ก Decodeํด์ฃผ๋ ๊ฒ
(์ฐธ๊ณ )
https://jusung.gitbook.io/the-swift-language-guide/
'โ ๏ธ deprecated โ ๏ธ > ๐ง๐ปโ๐ป iOSInterviewquestions' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
iOSInterviewquestions - iOS (0) | 2022.04.06 |
---|---|
iOSInterviewquestions - ARC (0) | 2022.04.02 |
iOSInterviewquestions - Rx (0) | 2022.04.02 |
iOSInterviewquestions - Autolayout (0) | 2022.04.02 |