🍎 iOS/Swift

λ©”λͺ¨λ¦¬ λ¦­(λˆ„μˆ˜)μ•„λž˜ μ½”λ“œμ™€ 같이 μ°Έμ‘° νƒ€μž…μ˜ 객체가 λ³€μˆ˜μ— λ“€μ–΄κ°€λŠ” μˆœκ°„ κ°μ²΄λŠ” λ©”λͺ¨λ¦¬ νž™ μ˜μ—­μ— λ“€μ–΄κ°€κ³ , ν•΄λ‹Ήν•˜λŠ” μ£Όμ†Œκ°’μ΄ λ³€μˆ˜μ— ν• λ‹Ήλ©λ‹ˆλ‹€. μ΄λ•Œ λ³€μˆ˜λŠ” 객체λ₯Ό μ°Έμ‘°ν•˜κ³  μžˆλ‹€κ³  ν‘œν˜„ν•©λ‹ˆλ‹€.class Person { // ...}var john = Person() μ΄ν›„ 이 λ³€μˆ˜κ°€ ν•„μš”μ—†λŠ” 상황이 λ˜μ—ˆμ„ λ•Œ λ³€μˆ˜μ— nil을 ν• λ‹Ήν•˜μ—¬ 값을 μ—†μ• μ§€λ§Œ λ©”λͺ¨λ¦¬μ—λŠ” μ§€μ›Œμ§€μ§€ μ•Šκ³  남아 μžˆμŠ΅λ‹ˆλ‹€. λ§Œμ•½ 또 같은 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κ²Œ 되면 λ©”λͺ¨λ¦¬μ— κ³„μ†ν•΄μ„œ μŒ“μ΄κ²Œ λ©λ‹ˆλ‹€. μ΄λ•Œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ λ°œμƒν•˜κ²Œ λ©λ‹ˆλ‹€. 객체가 ν•„μš”ν•˜μ§€ μ•Šκ²Œ 남아 μžˆμ–΄μ„œ λ©”λͺ¨λ¦¬μ˜ λΉ„μš©μ΄ 계속 λ“€μ–΄κ°€λŠ” 것이기 λ•Œλ¬Έμž…λ‹ˆλ‹€. κ²°κ΅­ ν•„μš” μ—†λŠ” κ°μ²΄λŠ” λ©”λͺ¨λ¦¬μ—μ„œ μ§€μ›Œμ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€. λ©”λͺ¨λ¦¬λŠ” ν•œμ •μ μ΄κ³  κ·Έ 곡간을 μ„Έμ΄λΈŒ ν•΄μ£Όμ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. μ΄λŸ° λΆ€λΆ„..
mutatingmutating은 κ°’ νƒ€μž…μΈ κ΅¬μ‘°μ²΄λ‚˜ μ—΄κ±°ν˜•μ˜ λ©”μ„œλ“œμ—μ„œ ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€ ν”„λ‘œνΌν‹°λ₯Ό μˆ˜μ •ν•  수 μžˆλ„λ‘ ν—ˆμš©ν•˜λŠ” ν‚€μ›Œλ“œμž…λ‹ˆλ‹€.struct Person { var name: String mutating func changeName() { name = "Lee" }}var person = Person(name: "Kim")person.changeName()print(person.name) // Lee κ΅¬μ‘°μ²΄λ‚˜ μ—΄κ±°ν˜•μ—μ„œλ§Œ mutating을 μ‚¬μš©ν•˜λŠ” μ΄μœ κ΅¬μ‘°μ²΄λ‚˜ μ—΄κ±°ν˜•μ˜ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ— mutating을 μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ 컴파일 μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€.ꡬ쑰체와 μ—΄κ±°ν˜•μ€ κ°’ νƒ€μž…μ΄κ³ , κ°’ νƒ€μž…μ€ μΈμŠ€ν„΄μŠ€λ₯Ό λ³΅μ‚¬ν•˜λ©΄ 원본 λ°μ΄ν„°λŠ” κ·ΈλŒ€λ‘œμ΄κΈ° λ•Œλ¬Έμ— ν”„λ‘œνΌν‹°λ₯Ό λ³€κ²½ν•˜λ €κ³  ..
μ˜μ‘΄μ„±μ΄ μƒκΈ°λŠ” κ²½μš°ν•œ ν΄λž˜μŠ€μ—μ„œ λ‹€λ₯Έ ν΄λž˜μŠ€μ— μ ‘κ·Όν•  λ•Œ μ•„λž˜μ™€ 같은 μ½”λ“œλ‘œ 접근을 ν•©λ‹ˆλ‹€. μ΄λ•Œ 클래슀BλŠ” 클래슀A에 μ˜μ‘΄ν•˜κ²Œ λ©λ‹ˆλ‹€.μ˜μ‘΄μ„±μ€ μ„œλ‘œ λ‹€λ₯Έ 객체 사이에 의쑴 관계가 μžˆλ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.class A { var name: String = "A"}class B { // 클래슀BλŠ” 클래슀A에 μ˜μ‘΄ν•œλ‹€. (μ˜μ‘΄μ„±μ΄ 생긴닀.) var a: A = A() func printName() { print(a.name) }}let b: B = B()b.printName() // "A" μ˜μ‘΄μ„± μ£Όμž…μ΄λ ‡κ²Œ μ˜μ‘΄μ„±μ΄ μƒκΈ°λŠ” μ½”λ“œλ“€μ€ μ’‹μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ˜μ‘΄ν•˜κ³  μžˆλŠ” 클래슀 λ‚΄μ˜ μ½”λ“œκ°€ λ°”λ€Œλ©΄ ν•΄λ‹Ή 클래슀λ₯Ό μ˜μ‘΄ν•˜κ³  있던 λ‹€λ₯Έ ν΄λž˜μŠ€λ“€λ„ μˆ˜μ •ν•΄ μ£Όμ–΄μ•Ό ν•˜κΈ° ..
Struct와 Classꡬ쑰체와 ν΄λž˜μŠ€λŠ” ν”„λ‘œνΌν‹°μ™€ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬μ‘°ν™”λœ 데이터와 κΈ°λŠ₯을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜λ‚˜μ˜ μƒˆλ‘œμš΄ μ‚¬μš©μž μ •μ˜ 데이터 νƒ€μž…μ„ λ§Œλ“€μ–΄ μ£ΌλŠ” κ²ƒμž…λ‹ˆλ‹€. κ³΅ν†΅μ ν”„λ‘œνΌν‹°μ™€ λ©”μ„œλ“œλ₯Ό μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.μ΄ˆκΈ°ν™” μƒνƒœ 섀정을 μœ„ν•œ μ΄ˆκΈ°ν™”λ₯Ό μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.extensionκ³Ό 같은 κΈ°λŠ₯ ν™•μž₯이 κ°€λŠ₯ν•©λ‹ˆλ‹€.Protocol을 μ±„νƒν•˜μ—¬ κΈ°λŠ₯ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ°¨μ΄μ Structκ΅¬μ‘°μ²΄λŠ” κ°’ νƒ€μž…μœΌλ‘œ λ©”λͺ¨λ¦¬μ˜ μŠ€νƒ μ˜μ—­μ— μ €μž₯λ©λ‹ˆλ‹€.μŠ€νƒ μ˜μ—­μ€ 컴파일 νƒ€μž„μ— 크기가 κ²°μ •λ˜λ―€λ‘œ 값을 μ°ΎκΈ° λΉ λ¦…λ‹ˆλ‹€.κ°’ νƒ€μž…μ€ 객체가 λ³€μˆ˜μ— ν• λ‹Ήλ˜λ©΄ ν•΄λ‹Ή 객체의 값이 λ©”λͺ¨λ¦¬μ— κ·ΈλŒ€λ‘œ μ €μž₯λ©λ‹ˆλ‹€. ν•΄λ‹Ή λ³€μˆ˜λ₯Ό 또 λ‹€λ₯Έ λ³€μˆ˜μ— ν• λ‹Ήν–ˆμ„ λ•Œ 값이 λ³΅μ‚¬λ˜μ–΄, λ³΅μ‚¬λœ 값이 λ©”λͺ¨λ¦¬μ— μ €μž₯λ©λ‹ˆλ‹€. Classν΄λž˜μŠ€λŠ” μ°Έμ‘° νƒ€μž…..
μ˜΅μ…”λ„ (Optional)μ˜΅μ…”λ„μ€ 값이 μžˆμ„ μˆ˜λ„ 있고, 없을 μˆ˜λ„ μžˆλŠ” 상황을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ˜΅μ…”λ„μ€ νŠΉμ • νƒ€μž…μ˜ 값을 포함할 μˆ˜λ„ 있고, nilκ³Ό 같이 아무 값도 ν¬ν•¨ν•˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.μ˜΅μ…”λ„μ΄ ν•„μš”ν•œ μ΄μœ λŠ” 값이 ν• λ‹Ήλ˜μ§€ μ•Šμ€ 상황을 μ•ˆμ „ν•˜κ²Œ μ²˜λ¦¬ν•˜κΈ° μœ„ν•¨μž…λ‹ˆλ‹€. Swiftμ—μ„œλŠ” νƒ€μž…μ˜ μ•ˆμ „μ„±μ„ μ€‘μš”μ‹œν•˜κΈ° λ•Œλ¬Έμ— μ˜΅μ…”λ„μ„ 톡해 κ°’μ˜ 쑴재 μ—¬λΆ€λ₯Ό λͺ…μ‹œμ μœΌλ‘œ ν‘œν˜„ν•©λ‹ˆλ‹€.μ˜΅μ…”λ„μ€ nil을 μ‚¬μš©ν•  수 μžˆλŠ” νƒ€μž…κ³Ό μ—†λŠ” νƒ€μž…μ„ κ΅¬λΆ„ν•©λ‹ˆλ‹€. nil을 μ‚¬μš©ν•  수 μžˆλŠ” νƒ€μž…μ„ μ˜΅μ…”λ„ νƒ€μž…μ΄λΌκ³  λΆ€λ¦…λ‹ˆλ‹€. μ•„λž˜μ™€ 같이 λ³€μˆ˜ μ„ μ–Έν•  λ•Œ, 데이터 νƒ€μž… μ„ μ–Έ λ‹€μŒμ— ?문자λ₯Ό 두어 μ˜΅μ…”λ„ νƒ€μž…μ΄ 되게 ν•©λ‹ˆλ‹€.var number: Int? = 5 μ˜΅μ…”널 바인딩 (Optional Binding)μ˜΅μ…”λ„ 바인딩은 if, gu..
kiuun
'🍎 iOS/Swift' μΉ΄ν…Œκ³ λ¦¬μ˜ κΈ€ λͺ©λ‘