<TIL>
๋ฌธ๋ฒ ๊ธฐ์ด ์ ๋ฆฌ TIL์ ์ด๋ฒ ๊ฒ์๊ธ์ด ๋ง์ง๋ง์ด๋ค!
์ด๋ฒ ์ฃผ์ฐจ ๊ฐ์ ์ด ์๊ฐ์ด 2์๊ฐ 50๋ถ ์ ๋๋ผ์ 'ํ๋ฃจ ๋ง์ ๋ค ํ ์ ์๊ฒ ๋ค!^0^'๋ผ๋ ๊ณํ์ ์์ฅ์ฐฝ..ใ
ใ
;
3์ผ์ฐจ์ธ ์ค๋, ๋๋์ด ๋ค ๋ดค๋ค.
๋ณด๊ณ , ๋ ๋ณด๊ณ , ๋๋ ค๋ณด๊ณ , ๋ฉ์ถฐ๋๊ณ ์ดํดํ๊ณ , TIL ์ ๋ฆฌํ๊ณ , ๋ฑ๋ฑ...
ํ๋๋.. 3์ผ์งธ..๐ ๋ฌธ์ ๋ ์์ง๋ ์์ ํ ์ดํดํ ๊ฑด ์๋๋ผ์..
(๊ฐ์ ๋ณด๋ ์๊ฐ๋๋ฅผ ๋ฐ๊ฟ์ผ ํ ์ง๋.. ์ค์ ์ ๋ชฝ๋กฑํด์ ๋ ๋จธ๋ฆฌ์ ์ ์ ๋ค์ด์ค๋ ๋ฏ์ถ๋ค..ใ
ใ
ใ
ํใ
..)
๋ฉ์ฒญํ๋ฉด ๋ชธ์ด ๊ณ ์ํ๋ค๋๋, ๋จธ๋ฆฌ๊ฐ ์ ์ข์์ ์๊ฐ์ ๋ ๋ง์ด ์์์ผํ๋ ๋ ์์ ..
๋ค ์ดํดํ๋ ค๊ณ ํ์ง ๋ง๊ณ ๊ทธ๋ฅ ๋ฐ์๋ค์ฌ์ผ ํ๋ค๋๋ฐ, ์์ง ๊ทธ๊ฒ ์ ์๋๋ค.
๋์ค์ '์ด๊ฑธ ์ ๋ฐ๋ก ์ดํด ๋ชป ํ์ง?' ์ด์ด์์ดํ๋ ์๊ฐ์ด ์ผ๋ฅธ ์์ผ๋ฉด ์ข๊ฒ ๋ค.
์ฌ์ ์บ ํ๋ถํฐ ์์ํ์ ๋ถ๋ค์ ์ด๋ฏธ ๋ค ํ์์ ๋ฐ๋ฆฐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์ swift ๋ฌธ๋ฒ ๊ณต๋ถ๋ฅผ ์ฃผ๋ง์ ์ถ๊ฐ๋ก ํด์ผ ํ ๊ฒ ๊ฐ๋ค.
์๋ ์ ๋ฆฌํ ๋ด์ฉ์ ์ง์ ๊ฒ์๋ฌผ์ ์ด์ด์
'ํด๋์ค(class), ๊ตฌ์กฐ์ฒด(struct), ์ด๊ฑฐํ(enum), ์์, ์ด๊ธฐํ'์ ๋ํ ๋ด์ฉ์ด๋ค.
์์ง ๋ด์ฉ ์ดํด์ ๋ง๋ก ํ์ด๋ด๋๋ฐ ์ด๋ ค์์ด ์๋ ์ํ๋ผ ๊ฐ์์ ํก์ฌํ ๋ด์ฉ์ผ ์๋ ์๋ค.
์ถํ์ ์์ ํ ์ดํดํ๋ ๋๋ก ๋ด ๋ง๋ก ํ์ด์ ์์ ํ๋ ค๊ณ ํ๋ค!
ํด๋์ค(class)
โ ํด๋์ค๋ ํ๋กํผํฐ(Property)์ ๋ฉ์๋(Method)๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
โถ๏ธ ํ๋กํผํฐ(Properties)
- ํด๋์ค, ๊ตฌ์กฐ์ฒด, ๋๋ ์ด๊ฑฐํ ์์ ์๋ ๋ณ์ ํน์ ์์๋ฅผ ๋ํ๋ธ๋ค.
- ํด๋์ค์ ์์ฑ์ผ๋ก ๊ฐ์ฒด(Object)์ ์ํ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์ ๊ณตํ๋ค.
์ด๋ฌํ ์ํ๋ ํด๋์ค์ ์ธ์คํด์ค(Instance)๊ฐ ๊ฐ์ง ์ ์๋ ๊ณ ์ ํ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ธ๋ค.
- ํ๋กํผํฐ๋ ์ ์ฅ ํ๋กํผํฐ(Stored Properties)์ ๊ณ์ฐ ํ๋กํผํฐ(Computed Properties)๋ก ๋๋๋ค.
โท ์ ์ฅ ํ๋กํผํฐ(Stored Properties)
→ ๊ฐ์ ์ ์ฅํ๊ณ , ์ธ์คํด์ค(Instance)์ ์ผ๋ถ๋ก์ ๊ทธ ๊ฐ์ ์ ์งํจ.
โท ๊ณ์ฐ ํ๋กํผํฐ(Computed Properties)
→ ํน์ ํ ๊ณ์ฐ์ ํตํด ๊ฐ์ ๋ฐํํ๋ฉฐ, ๊ฐ์ ์ ์ฅํ์ง ์๊ณ ํ์ํ ๋๋ง๋ค ์๋ก ๊ณ์ฐ๋จ.
โถ๏ธ ๋ฉ์๋(Method)
- ํด๋์ค, ๊ตฌ์กฐ์ฒด, ๋๋ ์ด๊ฑฐํ ์์ ์๋ ํจ์๋ฅผ ๋ํ๋ธ๋ค.
- ํด๋์ค์ ๋์์ ์ ์ํ๊ณ , ํด๋์ค์ ์ธ์คํด์ค(Instance)์ ๋ํด ์ํ๋๋ ํน์ ํ ์์
์ ์ํํ๋ค.
- ๋ฉ์๋๋ ์ธ์คํด์ค ๋ฉ์๋(Instance Methods)์ ํ์
๋ฉ์๋(Type Methods)๋ก ๊ตฌ๋ถ๋๋ค.
โท ์ธ์คํด์ค ๋ฉ์๋(Instance Methods)
→ ํน์ ์ธ์คํด์ค์ ์ํ๋ ๋์์ ์ ์ํ๊ณ , ์ธ์คํด์ค์ ์ํ์ ์ ๊ทผํ ์ ์์.
โท ํ์
๋ฉ์๋(Type Methods)
→ ํด๋์ค ์์ฒด์ ๊ด๋ จ๋ ๋์์ ์ ์ํ๋ฉฐ, ํน์ ์ธ์คํด์ค์ ์ํ๋ ๊ฒ์ด ์๋ ํด๋์ค ์์ฒด์ ์ํฅ์ ์ค.
โก ํด๋์ค๋ ์ด๋์
๋ผ์ด์ (Initializer)๋ฅผ ํตํด ์ด๊ธฐ๊ฐ์ ์ค์ ํ ์ ์๋ค.
(ํ๋กํผํฐ์ ๊ธฐ๋ณธ๊ฐ์ด ์๋ ๊ฒฝ์ฐ → ์ด๋์
๋ผ์ด์ ํ์๋ก ๊ตฌํํด์ผํจ. ์๊ทธ๋ฌ๋ฉด error ๋ฐ์ํจ)
โข ํด๋์ค๋ ์ฐธ์กฐ ํ์
์ด๋ค. (์ฐธ์กฐ ํ์
์ ๋ํ์ ์ธ ์์: ํด๋์ค(class))
๐ง์ฐธ์กฐํ์
?๐ง
→ ๋ณ์ ํน์ ์์์ ํ ๋น๋ ๋, ๊ฐ์ ๋ณต์ฌํ๋ ๊ฒ์ด ์๋๋ผ ์ฐธ์กฐ(์ฃผ์)๊ฐ ๋ณต์ฌ๋์ด ๊ฐ์ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋จ.
→ ๋์ผํ ์ธ์คํด์ค๋ฅผ ๊ณต์ ํ๋ฏ๋ก, ํ ์ชฝ์์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ๋ค๋ฅธ ์ชฝ์์๋ ์ํฅ์ ๋ฐ๊ฒ ๋จ.
๊ตฌ์กฐ์ฒด(struct)
โ ๊ตฌ์กฐ์ฒด(struct)๋ ํด๋์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋กํผํฐ์ ๊ฐ์ ์ ์ฅํ๊ฑฐ๋ ๋ฉ์๋๋ฅผ ํตํด ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ,
์ด๊ฒ์ ํ๋๋ก ์บก์ํํ ์ ์๋ ์ฌ์ฉ์ ์ ์ ํ์
์ด๋ค.
โก ์์ฑ์(initializer)๋ฅผ ์ ์ํ์ง ์์ผ๋ฉด ๊ตฌ์กฐ์ฒด๊ฐ ์๋์ผ๋ก ์์ฑ์(Memberwise Initializer)๋ฅผ ์ ๊ณตํ๋ค.
( → ํด๋์ค(class)์์ ์ฐจ์ด์ 1)
โข ๊ฐ ํ์
- ๋ณ์๋ ์์์ ํ ๋น๋ ๋ ๊ฐ์ ๋ณต์ฌ๋ณธ์ด ์์ฑ๋๋ ํ์
์ด๋ค.
- ์ฃผ๋ก ๊ตฌ์กฐ์ฒด(Structures), ์ด๊ฑฐํ(Enumerations), ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์
(Int, Double, Bool, ๋ฑ)์ด ๊ฐ ํ์
์ ํด๋นํ๋ค.
โฃ ์์์ ํ ์ ์๋ค.
( → ํด๋์(class)์์ ์ฐจ์ด์ 2)
โค ํด๋์ค(class)์ ๊ฐ์ด ์ธ์คํด์ค(Instance)๋ก ๋ง๋ค์ด ์ฌ์ฉํ ์ ์๋ค.
์ด๊ฑฐํ(Enum)
โ Enum์ ๊ด๋ จ๋ ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ง ๊ทธ๋ฃน์ ๊ฐ์ ํ์
์ผ๋ก ์ ์ธํด์
ํ์
์์ ์ฑ(type-safety)๋ฅผ ๋ณด์ฅํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฝ๋๋ฅผ ๋ค๋ฃฐ ์ ์๊ฒ ํด์ค๋ค.
โก ๊ฐ ํ์
โข ์ฐ๊ด ๊ฐ(Associated Values)์ ๊ฐ์ง ์ ์๋ค. ์ด๊ฒ์ ๊ฐ case๊ฐ ํน์ ๊ฐ์ ์ฐ๊ฒฐํ์ฌ ์ ์ฅํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
→ switch ๋ฌธ๊ณผ ๊ถํฉ์ด ์ข๋ค.(๊ฐ ์ด๊ฑฐํ ์ผ์ด์ค์ ๋ฐ๋ผ ๋ค๋ฅธ ๋์์ ์ํํ๊ฒ ํ ์ ์๋ค.)
โค Optional์ enum์ด๋ค.
→ (์ฐธ๊ณ ) https://docs.swift.org/swift-book/documentation/the-swift-programming-language/enumerations/
ํด๋์ค & ๊ตฌ์กฐ์ฒด & ์ด๊ฒจํ ์ฐจ์ด์
โ (๋น์ ) - ํด๋์ค: ๋ถ์ด๋นต ๊ธฐ๊ณ / ๊ฐ์ฒด: ๊ทธ ๊ธฐ๊ณ๋ก ๋ง๋ค์ด์ง ์ค์
โก ๊ฐ์ฒด → ํด๋์ค๋ฅผ ์ค์ฒดํ ํ ๊ฒ (๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ ์ธ์คํด์ค๊ฐ ๋ ๊ฒ)
โข ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ ๋ฐฉ์
- ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ
1) ๊ฐ ํ์
(Value Type)
2) ์ธ์คํด์ค ๋ฐ์ดํฐ ๋ชจ๋ ์คํ(Stack)์ ์ ์ฅ
3) ์๋ก์ด ๋ณ์์ ํ ๋นํ ๋๋ง๋ค ๋ณต์ฌ๋ณธ ์์ฑ
4) ์คํ(Stack)์ ๊ณต๊ฐ์ ์ ์ฅ, ์คํ ํ๋ ์ ์ข
๋ฃ์, ๋ฉ๋ชจ๋ฆฌ์์ ์๋ ์ ๊ฑฐ
- ํด๋์ค
1) ์ฐธ์กฐ ํ์
(Reference Type)
2) ARC์์คํ
์ ํตํด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
3) ์ธ์คํด์ค ๋ฐ์ดํฐ๋ ํ(Heap)์ ์ ์ฅ
4) ํด๋น ํ์ ๊ฐ๋ฅดํค๋ ๋ณ์๋ ์คํ(Stack)์ ์ ์ฅํ๊ณ ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ฐ์ด ํ์ ๊ฐ๋ฆฌํด
5) ๊ฐ์ ์ ๋ฌํ๋ ๊ฒ์ด ์๋๊ณ , ์ ์ฅ๋ ์ฃผ์๋ฅผ ์ ๋ฌ
์์(Inheritance)
โ ํด๋์ค(class) ๊ฐ์ ์ฝ๋ ๋ฐ ์์ฑ์ ๊ณต์ ํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ค.
โก ๊ธฐ์กด ํด๋์ค์์ ์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ,
๊ธฐ์กด ํด๋์ค์ ํน์ฑ(์์ฑ๊ณผ ๋ฉ์๋)์ ์ฌ์ฌ์ฉํ๋ฉด์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋๋ก ํด์ค๋ค.(์๋ธ ํด๋์ฑ)
๐ง์ฅ์ ๐ง
1) ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ: ์ค๋ณต์ ํผํ๊ณ , ์ ์ง๋ณด์์ฑ์ ๋์ผ ์ ์์
2) ๊ณ์ธต ๊ตฌ์กฐ: ๋ถ๋ชจ ํด๋์ค์ ์์ ํด๋์ค ๊ฐ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํ์ฑํ์ฌ ๋ค์ํ ์์ค์ ์ถ์ํ์ ๋ถ๋ฅ๊ฐ ๊ฐ๋ฅํจ.
โข override, super, final
- override
1) ์ด ํค์๋๋ ๋ถ๋ชจ ํด๋์ค์์ ์์๋ฐ์ ๋ฉ์๋, ์์ฑ ๋๋ ์๋ธ์คํฌ๋ฆฝํธ๋ฅผ ์์ ํด๋์ค์์ ๋ค์ ์ ์ํ ๋ ์ฌ์ฉํ๋ค.
2) ์์ ํด๋์ค์์ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ์ฌ ์๋ก์ด ๊ตฌํ์ ์ ๊ณตํ๋ค.
- super
1) ์ด ํค์๋๋ ์์ ํด๋์ค์์ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋, ์์ฑ ๋๋ ์ด๊ธฐํ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์ฌ์ฉ๋๋ค.
2) super.method() ๋๋ super.property ์ ๊ฐ์ด ์ฌ์ฉํ์ฌ ๋ถ๋ชจ ํด๋์ค์ ๊ธฐ๋ฅ์ ํธ์ถํ ์ ์๋ค.
- final
1) ์ด ํค์๋๋ ํด๋์ค, ๋ฉ์๋, ์์ฑ ๋๋ ์๋ธ์คํฌ๋ฆฝํธ๋ฅผ ํ์ํญ ์์์ด ๋ถ๊ฐ๋ฅํ๋๋ก ๋ง๋ ๋ค.
2) ๋ฉ์๋, ์์ฑ, ์๋ธ์คํฌ๋ฆฝํธ์ ์ฌ์ฉ๋ ๊ฒฝ์ฐ, ํด๋น ๋ฉค๋ฒ๋ค์ 'Override' ํ ์ ์๋ค.
์ด๊ธฐํ
โถ๏ธ ์ด๊ธฐํ์ ์์ฑ์
โ ์ด๊ธฐํ๋ ํด๋์ค, ๊ตฌ์กฐ์ฒด, ๋๋ ์ด๊ฑฐํ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์์์ ์ด๊ธฐํํ์ฌ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๊ณผ์ ์ด๋ค.
โก ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๊ณ ์์ฑ์ด ์ ์ ํ ์ค์ ๋์ด ์์ ์ ์ผ๋ก ์ฌ์ฉ๋ ์ ์๋๋ก ํ๋ ์ค์ํ ๋จ๊ณ์ด๋ค.
โท ์ธ์คํด์ค?
โ ํด๋์ค, ๊ตฌ์กฐ์ฒด ๋๋ ์ด๊ฑฐํ๊ณผ ๊ฐ์ ํ์
์ ์ค์ ์์(์์ฑ๋ ์ค์ ๋ฐ์ดํฐ)๋ฅผ ๋ํ๋ธ๋ค.
โก ์ฆ, ํด๋์ค๋ ๊ตฌ์กฐ์ฒด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ๊ฐ์ฒด(Object)๋ฅผ ๋งํ๋ค.
โท ์ด๊ธฐํ ๋ฐฉ๋ฒ
1. ๊ธฐ๋ณธ ์ด๊ธฐํ(Default Intitialization)
- ํด๋์ค์ ์์ฑ์ด ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ์ด๊ธฐํ ๋๋ ๊ฒ. (์๋์ผ๋ก ๋ฐ์)
class Panda {
var name: String = ""
var age: Int = 0
}
let panda = Panda() // ← ๊ธฐ๋ณธ ์ด๊ธฐํ
2. ์ง์ ์ด๊ธฐํ(Designated Initialization)
- init ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋์ค์ ๋ชจ๋ ์์ฑ์ ์ด๊ธฐํํ๋ ๋ฉ์๋.
class Panda {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
let panda = Panda(name: "Fubao", age: 3) // ← ์ง์ ์ด๊ธฐํ
3. ํธ์ ์ด๊ธฐํ(Convenience Initialization)
- ์ ๋ ๊ฐ์ง ์ด๊ธฐํ๋ฅผ ๊ฐํธํ๊ฒ ํธ์ถํ๋ ๋ณด์กฐ ๋ฉ์๋.
class Panda {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
convenience init(name: String) {
self.init(name: name, age: 0)
}
}
let panda = Panda(name: "Fubao") // ← ํธ์ ์ด๊ธฐํ
4. ๊ฐ์ ํด์ฌ(Force Unwrapping)๋์ง ์๋ ์ต์
๋ ์ด๊ธฐํ
- ์ต์
๋ ํ์
์ ๊ฐ์ง ์์ฑ์ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ๋๊ฑฐ๋ ๋์ค์ ๊ฐ์ ํ ๋นํ ์ ์์.
class Panda {
var name: String?
var age: Int = 0
}
let panda = Panda()
panda.name = "Fubao"
panda.age = 3
'iOS ์ฑ ๊ฐ๋ฐ ์ข ํฉ๋ฐ > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
3์ฃผ์ฐจ_Swift ๋ฌธ๋ฒ์ข ํฉ๋ฐ ์ฌํ_(1์ผ์ฐจ) (0) | 2024.03.11 |
---|---|
2์ฃผ์ฐจ_Swift ๋ฌธ๋ฒ ๊ธฐ์ด ๊ณผ์ _๊ณ์ฐ๊ธฐ ๋ง๋ค๊ธฐ (0) | 2024.03.07 |
2์ฃผ์ฐจ_Swift ๋ฌธ๋ฒ์ข ํฉ๋ฐ ๊ธฐ์ด_(2์ผ์ฐจ) (4) | 2024.03.05 |
2์ฃผ์ฐจ_Swift ๋ฌธ๋ฒ์ข ํฉ๋ฐ ๊ธฐ์ด_(1์ผ์ฐจ) (0) | 2024.03.04 |
1์ฃผ์ฐจ(3) - ๋ฐ์ดํฐ ๊ด๋ฆฌ / ํ ์ด๋ธ ๋ทฐ(Table View) / ๋ค๋น๊ฒ์ด์ (2) | 2024.02.29 |