λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

🍎 iOS/Swift

(13)
[Swift] Generic μ•ˆλ…•ν•˜μ„Έμš” μ œμΈμž…λ‹ˆλ‹€ :)μ˜ˆμ „μ— TIL둜 μ •λ¦¬ν–ˆλ˜ Generic에 λŒ€ν•œ λ‚΄μš©μ„ λΈ”λ‘œκ·Έμ—λ„ ν¬μŠ€νŒ…ν•΄λ‘λ©΄ 쒋을 것 κ°™μ•„ 쇽μƒ₯ ν•΄μ™”μŠ΅λ‹ˆλ‹€ γ…Žγ…ŽGeneric에 λŒ€ν•΄ Apple의 Swiftλ¬Έμ„œλ₯Ό μ°Έκ³ ν•΄μ„œ 정리해보렀 ν•©λ‹ˆλ‹€!Genericμ΄λž€? generic은 ν¬κ΄„적인, ν†΅μΉ­μ˜ μ •λ„μ˜ 사전적인 의미λ₯Ό κ°€μ§‘λ‹ˆλ‹€.κ·Έλ ‡λ‹€λ©΄, Appleμ—μ„œ μ†Œκ°œν•˜λŠ” generic에 λŒ€ν•΄ ν•œλ²ˆ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€!Genericμ΄λž€ νƒ€μž…μ— μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ” λ²”μš© μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€.Generic을 μ‚¬μš©ν•˜λ©΄ 쀑볡을 ν”Όν•˜κ³ , μœ μ—°ν•˜κ³  μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.Generic은 Swift의 κ°€μž₯ κ°•λ ₯ν•œ κΈ°λŠ₯ 쀑 ν•˜λ‚˜λ‘œ, Swift ν‘œμ€€ 라이브러리의 λŒ€λΆ€λΆ„μ€ Generic μ½”λ“œλ‘œ μž‘μ„±λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€.μ‹€μ œλ‘œ, Generic을 μ‚¬μš©ν–ˆλ‹€λŠ” 것을..
[Swift] Optional μ•ˆλ…•ν•˜μ„Έμš” μ œμΈμž…λ‹ˆλ‹€ :) TIL을 μž‘μ„±ν•˜λ‹€κ°€ μ˜΅μ…”λ„μ— λŒ€ν•΄ 정리λ₯Ό ν•˜κ²Œ λ˜μ—ˆλŠ”λ°μš”, κ·Έλƒ₯ μ˜΅μ…”λ„ λ½€κ°œκΈ°λ‘œ μ œλŒ€λ‘œ 정리λ₯Ό ν•˜μž μ‹Άμ–΄μ„œ Optional에 λŒ€ν•œ κ³΅μ‹λ¬Έμ„œμ™€ κΉƒν—ˆλΈŒμ— μ˜€ν”ˆλœ Optional λ‚΄λΆ€ ꡬ쑰 μ½”λ“œλ₯Ό ν† λŒ€λ‘œ μ˜΅μ…”λ„μ— λŒ€ν•΄ 정리λ₯Ό μ­‰ 해보렀 ν•©λ‹ˆλ‹€! Optional (μ˜΅μ…”λ„) μ˜΅μ…”λ„μ€ 값이 'μžˆμ„ μˆ˜λ„, 없을 μˆ˜λ„ 있음' 을 λ‚˜νƒ€λ‚΄λŠ” ν‘œν˜„μž…λ‹ˆλ‹€. μ΄λŠ” 'λ³€μˆ˜λ‚˜ μƒμˆ˜ 등에 κΌ­ 값이 μžˆλ‹€λŠ” 것을 보μž₯ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 즉, λ³€μˆ˜ λ˜λŠ” μƒμˆ˜μ˜ 값이 nil일 μˆ˜λ„ μžˆλ‹€'λŠ” 것을 의미 @frozen enum Optional: ExpressibleByNiliteral { case none // nil case some(Wrapped) // optional value } μ˜΅μ…”λ„μ€ μ œλ„€λ¦­μ΄ 적용된 μ—΄κ±°ν˜•..
[Swift] μ •λ ¬ λ©”μ„œλ“œ μ •λ³΅ν•˜κΈ° (sort(), sorted()) μ•ˆλ…•ν•˜μ„Έμš” μ œμΈμž…λ‹ˆλ‹€ :) 이번 κ²Œμ‹œκΈ€μ—μ„œλŠ” Swift의 μ •λ ¬ λ©”μ„œλ“œμ— λŒ€ν•΄ 정리해보렀고 ν•©λ‹ˆλ‹€. μ •λ ¬ λ©”μ„œλ“œμ— λŒ€ν•œ 기본적인 λ‚΄μš© 정리와 λ”λΆˆμ–΄ μ •λ ¬ 쑰건 μ„€μ •, 닀쀑 μ •λ ¬ λ“± ν™œμš© λ°©λ²•κΉŒμ§€ 총정리λ₯Ό ν•΄λ³΄κ³ μž 제λͺ©μ„ μ •λ³΅ν•˜κΈ°λ‘œ μ§€μ–΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€ πŸ˜€ μ •λ ¬ λ©”μ„œλ“œλŠ” μ•Œκ³ λ¦¬μ¦˜ 문제 풀이 μ‹œμ—λ„ 많이 ν™œμš©μ΄ λ˜λŠ” 만큼 ν™•μ‹€νžˆ 정리λ₯Ό 해두고 κΈ°μ–΅ν•΄λ‘‘μ‹œλ‹€!!! μ •λ ¬ λ©”μ„œλ“œ λ„€ 가지 비ꡐ λ¨Όμ €, 곡식 λ¬Έμ„œλ₯Ό 톡해 기본적인 λ‚΄μš©λΆ€ν„° 정리해보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€. μ •λ ¬ λ©”μ„œλ“œλŠ” κ³΅μ‹λ¬Έμ„œμ˜ Array 뢀뢄에 λ‚˜μ™€μžˆλŠ”λ°μš”, 곡식 λ¬Έμ„œμ— λ‚˜μ™€μžˆλŠ” λ„€ 가지 λ©”μ„œλ“œλ₯Ό ν•œλ²ˆ μ‚΄νŽ΄λ΄…μ‹œλ‹€. (μ •λ ¬ λ©”μ„œλ“œλŠ” Arrayμ—μ„œλ§Œ μ‚¬μš©κ°€λŠ₯ν•œ λ©”μ„œλ“œλŠ” μ•„λ‹ˆκ³ , RandomAccessCollection ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν•˜λŠ” μ»¬λ ‰μ…˜ νƒ€μž…μ΄λΌλ©΄ μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆ..
[Swift] ν”„λ‘œνΌν‹°(Properties) - νƒ€μž… ν”„λ‘œνΌν‹° μ•ˆλ…•ν•˜μ„Έμš” μ œμΈμž…λ‹ˆλ‹€:) ν”„λ‘œνΌν‹° μ‹œλ¦¬μ¦ˆ λ§ˆμ§€λ§‰!으둜 νƒ€μž… ν”„λ‘œνΌν‹°μ— λŒ€ν•΄ μ •λ¦¬ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. λ°”λ‘œ μ‹œμž‘ν• κ²Œμš”~! νƒ€μž… ν”„λ‘œνΌν‹° (Type Properties) 이전에 μ •λ¦¬ν–ˆμ—ˆλ˜ μ €μž₯ ν”„λ‘œνΌν‹°, μ—°μ‚° ν”„λ‘œνΌν‹°λŠ” λͺ¨λ‘ νŠΉμ • μΈμŠ€ν„΄μŠ€μ— μ†ν•œ μΈμŠ€ν„΄μŠ€ ν”„λ‘œνΌν‹°μž…λ‹ˆλ‹€. μΈμŠ€ν„΄μŠ€ ν”„λ‘œνΌν‹°λŠ” μ–΄λ– ν•œ νƒ€μž…(class, struct λ“±)의 μΈμŠ€ν„΄μŠ€κ°€ μƒμ„±λ˜μ—ˆμ„ λ•Œ μ‚¬μš©ν•  수 μžˆλŠ” ν”„λ‘œνΌν‹°λ‘œ, μΈμŠ€ν„΄μŠ€λ₯Ό μƒˆλ‘œ 생성할 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ ν”„λ‘œνΌν‹°λ„ 같이 μƒμ„±λ˜κ³ , μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ λ‹€λ₯Έ 값을 지닐 수 μžˆμŠ΅λ‹ˆλ‹€. 각각의 μΈμŠ€ν„΄μŠ€κ°€ μ•„λ‹Œ νƒ€μž… μžμ²΄μ— μ†ν•˜λŠ” ν”„λ‘œνΌν‹°λ₯Ό νƒ€μž… ν”„λ‘œνΌν‹°λΌκ³  ν•©λ‹ˆλ‹€. νƒ€μž… ν”„λ‘œνΌν‹°λŠ” νƒ€μž… μžμ²΄μ— 영ν–₯을 λ―ΈμΉ˜λŠ” ν”„λ‘œνΌν‹°λ‘œ, μΈμŠ€ν„΄μŠ€μ˜ 생성 여뢀와 상관없이 νƒ€μž… ν”„λ‘œνΌν‹°μ˜ 값은 ν•˜λ‚˜μž…λ‹ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— ν•΄λ‹Ή 타..
[Swift] ν”„λ‘œνΌν‹°(Properties) - ν”„λ‘œνΌν‹° μ˜΅μ €λ²„ μ•ˆλ…•ν•˜μ„Έμš” μ œμΈμž…λ‹ˆλ‹€! μ§€λ‚œ κ²Œμ‹œκΈ€μ— 이어 ν”„λ‘œνΌν‹° 2탄(lazyκΉŒμ§€ ν•©μΉ˜λ©΄ 3탄..)으둜 ν”„λ‘œνΌν‹° μ˜΅μ €λ²„μ— λŒ€ν•΄μ„œ 정리해보렀고 ν•©λ‹ˆλ‹€. ν”„λ‘œνΌν‹° μ˜΅μ €λ²„λŠ” UI μ—…λ°μ΄νŠΈκ°€ ν•„μš”ν•  λ•Œ μœ μš©ν•˜κ²Œ 많이 μ‚¬μš©ν•˜κ²Œ λ˜λŠ” 것 κ°™μ•„μ„œ(λ¬Όλ‘  Rx둜 λΉ„λ™κΈ°μ μœΌλ‘œ μ—…λ°μ΄νŠΈ λ˜λ„λ‘ μ²˜λ¦¬ν•΄μ€„ μˆ˜λ„ μžˆκ² μ§€λ§Œ..) 잘 정리해두면 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€!! ν”„λ‘œνΌν‹° μ˜΅μ €λ²„λ₯Ό μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ €μž₯ ν”„λ‘œνΌν‹°, μ—°μ‚° ν”„λ‘œνΌν‹°μ— λŒ€ν•œ 이해가 ν•„μš”ν•˜λ‹ˆ κ°œλ…μ΄ 잘 μ•ˆμž‘ν˜€μžˆλ‹€λ©΄ μ•„λž˜ κ²Œμ‹œκΈ€λ“€μ„ 읽고 μ˜€μ‹œλŠ” 것을 μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€~! 1) μ €μž₯ ν”„λ‘œνΌν‹°(Stored Properties)와 μ—°μ‚° ν”„λ‘œνΌν‹°(Computed Properties) 2) 지연 μ €μž₯ ν”„λ‘œνΌν‹°(Lazy Stored Properties) ν”„λ‘œνΌν‹° μ˜΅μ €λ²„ (Property Observe..
[Swift] ν”„λ‘œνΌν‹°(Properties) - μ €μž₯ ν”„λ‘œνΌν‹°, μ—°μ‚° ν”„λ‘œνΌν‹° μ•ˆλ…•ν•˜μ„Έμš” μ œμΈμž…λ‹ˆλ‹€ :) μ§€λ‚œ κ²Œμ‹œκΈ€μ—μ„œ 지연 μ €μž₯ ν”„λ‘œνΌν‹°μ— λŒ€ν•΄ μ •λ¦¬ν•΄λ³΄μ•˜λŠ”λ°μš”, μ‹œμž‘ν•œ 김에 ν”„λ‘œνΌν‹°μ— λŒ€ν•΄μ„œ μ­‰ 정리λ₯Ό 해보렀고 ν•©λ‹ˆλ‹€. ν”„λ‘œνΌν‹°λŠ” 크게 μ €μž₯ ν”„λ‘œνΌν‹°, μ—°μ‚° ν”„λ‘œνΌν‹°, νƒ€μž… ν”„λ‘œνΌν‹° μ΄λ ‡κ²Œ μ„Έ κ°€μ§€λ‘œ λ‚˜λˆŒ 수 μžˆλŠ”λ°μš”, 이번 κ²Œμ‹œκΈ€μ—μ„œλŠ” μ €μž₯ ν”„λ‘œνΌν‹°μ™€ μ—°μ‚° ν”„λ‘œνΌν‹°μ— λŒ€ν•΄ μ •λ¦¬ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€! ν”„λ‘œνΌν‹° (Properties) μ €μž₯ ν”„λ‘œνΌν‹°, μ—°μ‚° ν”„λ‘œνΌν‹°, νƒ€μž… ν”„λ‘œνΌν‹°μ— λŒ€ν•΄ μ•Œμ•„λ³΄λ €λ©΄ λ¨Όμ € ν”„λ‘œνΌν‹°κ°€ 무엇인지뢀터 μ•Œμ•„μ•Όκ² μ£ ?? propertyλŠ” μž¬μ‚°, 속성 μ •λ„λ‘œ λ²ˆμ—­ν•  수 μžˆλŠ”λ°μš”, Swiftμ—μ„œμ˜ ν”„λ‘œνΌν‹°λŠ” 클래슀, ꡬ쑰체, μ—΄κ±°ν˜• 등에 κ΄€λ ¨λœ 값을 λœ»ν•©λ‹ˆλ‹€. μ €μž₯ ν”„λ‘œνΌν‹° (Stored Properties) μ €μž₯ ν”„λ‘œνΌν‹°λŠ” λ‹¨μˆœνžˆ 값을 μ €μž₯ν•˜κ³  μžˆλŠ” ν”„λ‘œνΌν‹° μž…λ‹ˆλ‹€..
[Swift] lazy ν‚€μ›Œλ“œ μ•ˆλ…•ν•˜μ„Έμš” μ œμΈμž…λ‹ˆλ‹€ :) μš”μ¦˜μ€ μƒˆλ‘œμš΄ 것듀을 κ³΅λΆ€ν•˜κΈ° 보닀 λΆ€μ‘±ν•œ 것듀을 κΌΌκΌΌν•˜κ²Œ μ±„μ›Œλ³΄μžλŠ” μƒκ°μœΌλ‘œ κ·Έλ™μ•ˆ μ •ν™•νžˆ λͺ¨λ₯΄κ³  λ„˜μ–΄κ°”λ˜ κ΅¬λ©λ‚œ 뢀뢄듀을 μ±„μ›Œλ³΄λ €κ³  λ…Έλ ₯ν•˜κ³  μžˆλŠ”λ°μš”! κ·ΈλŸ¬λ‹€λ³΄λ‹ˆ Swift, iOS κΈ°λ³ΈκΈ°λ₯Ό 더 νƒ„νƒ„νžˆ, μžμ„Έν•˜κ²Œ κ³΅λΆ€ν•΄μ•Όκ² λ‹€λŠ” 생각이 λ“€λ”λΌκ΅¬μš”..(사싀 기본지식이 제일 μ€‘μš”ν•˜λ‹ˆκΉŒμš”) κ·Έλž˜μ„œ 생각날 λ•Œλ§ˆλ‹€ μ •λ¦¬ν•˜λŠ” 것듀을 ν‹°μŠ€ν† λ¦¬μ—λ„ 기둝해보렀고 ν•©λ‹ˆλ‹€. μ˜€λŠ˜μ€ lazy ν‚€μ›Œλ“œ, 지연 μ €μž₯ ν”„λ‘œνΌν‹°μ— λŒ€ν•΄μ„œ 정리해보렀고 ν•˜λŠ”λ°μš”, lazy ν‚€μ›Œλ“œλ₯Ό μ™œ μ‚¬μš©ν•˜λŠ”μ§€μ— μ΄ˆμ μ„ λ§žμΆ°μ„œ 정리해보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€! Lazy Stored Properties (지연 μ €μž₯ ν”„λ‘œνΌν‹°) The Swift Language Guide에 λ”°λ₯΄λ©΄, 지연 μ €μž₯ ν”„λ‘œνΌν‹°λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. 지연 μ €μž₯ ν”„λ‘œνΌ..
[Swift] enumerated() μ•ˆλ…•ν•˜μ„Έμš” μ œμΈμž…λ‹ˆλ‹€! μ˜€λŠ˜μ€ enumerated()에 λŒ€ν•΄ 정리해보렀고 ν•˜λŠ”λ°μš”, μ•Œκ³ λ¦¬μ¦˜ 문제λ₯Ό ν’€λ‹€ λ‹€λ₯Έ 풀이λ₯Ό 참고해보면 enumerated()λ₯Ό μ‚¬μš©ν•΄ 더 κΉ”λ”ν•˜κ²Œ μ²˜λ¦¬ν•œ 풀이가 λ§Žμ•„μ„œ enumerated() ν•¨μˆ˜κ°€ 무엇인지, 그리고 μ–΄λ–»κ²Œ ν™œμš©ν•˜λŠ”μ§€κΉŒμ§€ ν•œλ²ˆ 정리해보렀고 ν•©λ‹ˆλ‹€! μ œλŒ€λ‘œ 정리해두고 잘 μ¨λ¨Ήμ–΄λ΄…μ‹œλ‹€! enumerated() enumerateλŠ” μ‚¬μ „μ μœΌλ‘œ μ—΄κ±°ν•˜λ‹€, μ„Έλ‹€ λΌλŠ” 의미λ₯Ό κ°€μ§€λŠ”λ°μš”, Swiftμ—μ„œλŠ” μ–΄λ–€ 의미둜 μ‚¬μš©λ˜λŠ”μ§€ λ¨Όμ € 곡식 λ¬Έμ„œλ₯Ό 톡해 enumerated()의 μ •μ˜λΆ€ν„° μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€! (n, x)둜 이루어진 쌍의 μ‹œν€€μŠ€λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ n은 0λΆ€ν„° μ‹œμž‘ν•˜λŠ” 연속적인 μ •μˆ˜λ₯Ό λ‚˜νƒ€λ‚΄κ³  xλŠ” μ‹œν€€μŠ€μ˜ μš”μ†Œλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ •λ„λ‘œ 해석할 수 μžˆμ„ 것 κ°™μ€λ°μš”, μš”..