๊ตฌ์กฐ์ฒด ํด๋์ค ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฉ๋์ ๋ง๊ฒ ๋ฌถ์ด ํํํ๊ณ ์ ํ ๋ ์ ์ฉํ๋ค. ํ๋์ ์ฌ์ฉ์ ์ ์ ๋ฐ์ดํฐ ํ์
์ ๋ง๋ค์ด์ฃผ๋๊ฒ์ด๋ค.
#Class, Struct ๊ณตํต์
- ๊ฐ์ ์ ์ฅํ ํ๋กํผํฐ๋ฅผ ์ ์ธํ ์ ์๋ค.
- ๋ฉ์๋๋ฅผ ์ ์ธํ ์ ์๋ค.
- ๋ด๋ถ ํ๋กํผํฐ์ .๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ทผํ ์ ์๋ค.
- ์์ฑ์(init)๋ฅผ ์ฌ์ฉํด ์ด๊ธฐ ์ํ๋ฅผ ์ค์ ํ ์ ์๋ค.
- extension์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์๋ค.
- Protocol์ ์ฑํํ์ฌ ๊ธฐ๋ฅ์ ์ค์ ํ ์ ์๋ค.
#Class์ ํน์ง
- Reference Type
- ARC๋ก ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํ๋ค.
- ๊ฐ์ ํด๋์ค ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ๋ชจ๋ ๋ณ์์ ์ํฅ์์ค๋ค. (์ฐธ์กฐํ์
์ด๋๊น;)
- ์์์ด ๊ฐ๋ฅํ๋ค.
- ํ์
์บ์คํ
์ ํตํด ๋ฐํ์์์ ํด๋์ค ์ธ์คํด์ค์ ํ์
์ ํ์ธํ ์ ์๋ค.
- ์ธ์คํด์ค๊ฐ ์๋ฉธ๋ ๋ deinit ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค. (์ฐธ์กฐํ์
์ด๋๊น)
#Struct์ ํน์ง
- Value Type
- ์ฌ๋ฌ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ ๊ฐ์ ๋ณ๊ฒฝํด๋ , ๊ฐ ์ธ์คํด์ค์ ๊ฐ์ ๋ค๋ฅด๋ค. (๊ฐ ํ์
์ด๋๊น;)
๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ๊ตฌ์กฐ์ฒด๋ ๊ฐํ์
, ํด๋์ค๋ ์ฐธ์กฐํ์
์ด๋ผ๋ ์ ์ด๋ค.
์ด ๋๋ฌธ์ ํ์๋๋ ์ฐจ์ด์ ๋ค์ด ์กด์ฌํ๋ค.
- ๊ตฌ์กฐ์ฒด๋ ์์ํ ์ ์๋ค.
- ํ์
์บ์คํ
์ ํด๋์ค์ ์ธ์คํด์ค์๋ง ํ์ฉ๋๋ค.
- deinit์ ํด๋์ค์ ์ธ์คํด์ค์์๋ง ํธ์ถ๋๋ค.
- ์ฐธ์กฐ ํ์ ๊ณ์ฐ์ ํด๋์ค์ ์ธ์คํด์ค์๋ง ์ ์ฉ๋๋ค.
- ๊ตฌ์กฐ์ฒด๋ ์์ฑ์๋ฅผ ๊ตฌํํ์ง ์์๋ default initalizer ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ๊ตฌ์กฐ์ฒด ๋ด๋ถ์ ๊ตฌ์กฐ์ฒด, ํด๋์ค ๋ด๋ถ์ ํด๋์ค ๋ฑ ์ค์ฒฉํ์
์ ์ ์ ๋ฐ ์ ์ธ์ด ๊ฐ๋ฅํ๋ค.
- ๋ฐ๋ฉด์ ๊ตฌ์กฐ์ฒด๋ init์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค deinit์ ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ๋ค.
- Swift ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ณธ ํ์
์ ๋ชจ๋ ๊ตฌ์กฐ์ฒด์ด๋ค.(String, Bool, Int, Array, Dictionary, Set .....)
class Person{
var name = "kim"
var age = "20"
deinit {
print("Person ํด๋์ค ์ธ์คํด์ค๊ฐ ์๋ฉธ๋ฉ๋๋ค.")
}
}
โ
let kim = Person()
kim = nil // >>> Person ํด๋์ค ์ธ์คํด์ค๊ฐ ์๋ฉธ๋ฉ๋๋ค.
ํด๋์ค๋ ์ฐธ์กฐํ์
์ด๊ธฐ ๋๋ฌธ์, ๋ ์ด์ ์ฐธ์กฐํ ํ์๊ฐ ์์๋ ๋ฉ๋ชจ๋ฆฌ์์ ์๋ฉธ๋๋ค. (class ์ธ์คํด์ค์ nil์ ๋ฃ์์๋)
์ด๋ ํธ์ถ๋๋ ๋ฉ์๋๊ฐ deinit ๋ฉ์๋์ด๋ค. ๋ฐ๋ผ์ ์ธ์คํด์ค๊ฐ ์๋ฉธ๋๊ธฐ ์ง์ ์ ์ฒ๋ฆฌํ ์ฝ๋๋ฅผ ๋ฃ์ด์ฃผ๊ฒ๋๋ค.
#์ฐธ์กฐ ๋น๊ต ์ฐ์ฐ์
ํํ ๊ฐ ๋น๊ต์ ์ฌ์ฉ๋๋ != , == ์๋ ๋ค๋ฅด๊ฒ reference๋ฅผ ๋น๊ตํ๋ ๋น๊ต์ฐ์ฐ์์ด๋ค.
=== : ๋ ์์๋ ๋ณ์๊ฐ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ ๊ฒฝ์ฐ ์ฐธ
!== : ๋ ์์๋ ๋ณ์๊ฐ ๋ค๋ฅธ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ ๊ฒฝ์ฐ ์ฐธ
#๊ตฌ์กฐ์ฒด์ ํด๋์ค๊ฐ ์ค์ฒฉ๋ ๊ฒฝ์ฐ๋ ํ ์์ญ์ ์ ์ฅ๋ ๊น? ์คํ ์์ญ์ ์ ์ฅ๋ ๊น?
1. ๊ฐ ํ์
์ ํฌํจํ๋ ์ฐธ์กฐํ์
ํด๋์ค ๋ด๋ถ์ ๊ตฌ์กฐ์ฒด ํ๋กํผํฐ๊ฐ ์๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ์๋ ์ฐธ์กฐํ์
์ด ์๋ฉธ๋๊ธฐ ์ ์ ๊ฐ ํ์
๋ ํ์ ์ ์ฅ๋๋ค.
ํด๋ก์ ๋ด๋ถ์ ์ฌ์ฉํ๋ ๊ฐ ํ์
๋ ์ด๋ฌํ ๊ฒฝ์ฐ์ ํฌํจ๋๋ค.
2. ์ฐธ์กฐ ํ์
์ ํฌํจํ๋ ๊ฐ ํ์
๊ตฌ์กฐ์ฒด ๋ด๋ถ์ ํด๋์ค ํ๋กํผํฐ๊ฐ ์๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค. ๋ด๋ถ์ ์ฐธ์กฐํ์
์ด ์๊ธฐ ๋๋ฌธ์ ์ฐธ์กฐ ์นด์ดํ
์ ์ฒ๋ฆฌํด์ฃผ์ด์ผ ํ๋ค.
#์ด๋ค ์ํฉ์ ํด๋์ค๋ฅผ ์ฐ๊ณ , ๊ตฌ์กฐ์ฒด๋ฅผ ์ธ๊น ?
์ ํ ๋ฌธ์ - ๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ๋๊ฒ ์ข์ ๊ฒฝ์ฐ
- ์ฐ๊ด๋ ๊ฐ๋จํ ๊ฐ์ ์งํฉ์ ์บก์ํํ๋ ๊ฒ๋ง์ด ๋ชฉ์ ์ผ ๊ฒฝ์ฐ
- ์บก์ํํ ๊ฐ์ ์ฐธ์กฐํ๋ ๊ฒ๋ณด๋ค ๋ณต์ฌํ๋ ๊ฒ์ด ํฉ๋นํ ๋
- ๊ตฌ์กฐ์ฒด์ ์ ์ฅ๋ ํ๋กํผํฐ๊ฐ ๊ฐ ํ์
์ด๋ฉฐ, ์ฐธ์กฐํ๋ ๊ฒ๋ณด๋ค ๋ณต์ฌํ๋๊ฒ์ด ํฉ๋นํ ๋
- ๋ค๋ฅธ ํ์
์ผ๋ก๋ถํฐ ์์๋ฐ๊ฑฐ๋, ์์ ์ ์์ํ ํ์๊ฐ ์์๋
์ถ๊ฐ์ ์ผ๋ก Objective-C์ ์ํธ ์ด์ฉ์ฑ์ด ํ์ํ ๋๋ ํด๋์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.