ํด๋์ค์ ์ธ์คํด์ค๋ ์ ํต์ ์ผ๋ก ๊ฐ์ฒด๋ก ์๋ ค์ ธ ์์ผ๋, ์ค์ํํธ์ ๊ตฌ์กฐ์ฒด์ ํด๋์ค๋ ๋ค๋ฅธ ์ธ์ด๋ณด๋ค ํจ์ฌ ๊ธฐ๋ฅ์ ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์ฅ์ ๋๋ถ๋ถ์์ ํด๋์ค์ ๊ตฌ์กฐ์ฒด์ ๋ํ ๊ธฐ๋ฅ์ ์ธ ์ค๋ช ์ด๊ธฐ ๋๋ฌธ์,์ผ๋ฐ์ ์ธ ์ฉ์ด์ธ ์ธ์คํด์ค๊ฐ ์ฌ์ฉ๋๋ค.
๊ตฌ์กฐ์ฒด์ ํด๋์ค์ ๋น๊ต (Comparing Structures and Classes)
๊ณตํต์
- ๊ฐ์ ์ ์ฅํ๋ ํ๋กํผํฐ ์ ์
- ๊ธฐ๋ฅ ์ ๊ณต์ ์ํ ๋ฉ์๋ ์ ์
- ์๋ธ ์คํฌ๋ฆฝํธ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ๊ฐ์ ์ ๊ทผ์ ์ ๊ณตํ๋ ์๋ธ ์คํฌ๋ฆฝํธ ์ ์
- ์ด๊ธฐํ ์ํ๋ฅผ ์ค์ ํ๊ธฐ ์ํ ์ด๊ธฐํ ์ ์
- ๊ธฐ๋ณธ ๊ตฌํ์ ๋์ด ๊ธฐ๋ฅ์ ํ์ฅ์ ์ํ ํ์ฅ
- ํน์ ์ข ๋ฅ์ ํ์ค ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํ๋กํ ์ฝ ์ค์
ํด๋์ค๋ง ๊ฐ๋ฅํ ๊ธฐ๋ฅ
- ์์ (Inheritance) : ํด๋์ค์ ์ฌ๋ฌ ์์ฑ์ ๋ค๋ฅธ ํด๋์ค์ ๋ฌผ๋ ค ์ค
- ํ์ ์บ์คํ (Type casting) : ๋ฐํ์์ ํด๋์ค ์ธ์คํด์ค์ ํ์ ์ ํ์ธ
- ์๋ฉธ์ (Deinitializers) : ํ ๋น๋ ์์์ ํด์ (free up) ์ํด
- ์ฐธ์กฐ ์นด์ดํธ (Reference counting) : ํด๋์ค ์ธ์คํด์ค์ ํ๋ ์ด์์ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅ
ํด๋์ค๊ฐ ์ง์ํ๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ฝ๋์ ๋ณต์ก์ฑ์ ์ฆ๋์ํจ๋ค.
์ ์ ๊ตฌ๋ฌธ (Definition Syntax)
๊ตฌ์กฐ์ฒด์ ํด๋์ค๋ฅผ ์ ์ํ๋ ๊ตฌ๋ฌธ์ ๋น์ทํ๋ค. ๊ตฌ์กฐ์ฒด ์ ์ธ์ ํค์๋๋ struct, ํด๋์ค ์ ์ธ ํค์๋๋ class ์ด๋ค.
struct SomeStructure {
// structure definition goes here
}
class SomeClass {
// class definition goes here
}
struct Resolution {
var width = 0
var height = 0
}
class VideoMode {
var resolution = Resolution()
var interlaced = false
var frameRate = 0.0
var name: String?
}
๊ตฌ์กฐ์ฒด์ ํด๋์ค ์ธ์คํด์ค (Structure and Class Instances)
let someResolution = Resolution()
let someVideoMode = VideoMode()
๊ตฌ์กฐ์ฒด๋ ํด๋์ค์ ์ด๋ฆ์ ์ฐ๊ณ ๋ค์ () ๋ฅผ ๋ถ์ฌ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ค. ์ด๊ธฐ ๊ฐ์ default ๊ฐ์ผ๋ก ์์ฑ๋๋ค.
ํ๋กํผํฐ ์ ๊ทผ (Accessing Properties)
print("The width of someVideoMode is \(someVideoMode.resolution.width)")
// Prints "The width of someVideoMode is 0"
๊ตฌ๋ถ์ (.)๋ก VideoMode ์ resolution ํ๋กํผํฐ์ width ํ๋กํผํฐ์ ๊ฐ์ด ์๋ธ ํ๋กํผํฐ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
๊ตฌ์กฐ์ฒด์ ์ด๊ฑฐํ์ ๊ฐ ํ์ (Structures and Enumerations Are Value Types)
๊ฐ ํ์ (value type)์ด๋ ๋ณ์ ๋๋ ์์์ ํ ๋น๋ ๋๋ ํจ์์ ์ ๋ฌ๋ ๋ ๋ณต์ฌ๋๋ ๊ฐ์ ๋ปํ๋ค. Int, String, Bool, Float, Double, Array, Dictionary ๋ชจ๋ ๊ฐํ์ ์ด๋ค. Swift์ ๋ชจ๋ ๊ตฌ์กฐ์ฒด์ ์ด๊ฑฐํ ๋ํ ๊ฐํ์ ์ด๋ค. ์ฆ, ๋ชจ๋ ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ ์ธ์คํด์ค๋ ๊ฐํ์ ์ด๊ณ , ๊ทธ๊ฒ๋ค์ ํ๋กํผํฐ๋ ํญ์ ๋ณต์ฌ๋๋ฉฐ ์ ๋ฌ๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
NOTEโ๏ธ
๋ฐฐ์ด, ๋์ ๋๋ฆฌ, ๋ฌธ์์ด๊ณผ ๊ฐ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํด ์ ์๋ ์ปฌ๋ ์ ํ์ ์ ์ต์ ํ๋ฅผ ํตํด ๋ณต์ฌ๋น์ฉ์ ์ค์ธ๋ค. ์ด๋ฌํ ์ปฌ๋ ์ ์ ์๋ณธ์ ์ฆ์ ๋ณต์ฌํ์ง์๊ณ , ์๋ณธ ์ธ์คํด์ค์ ๋ณต์ฌ๋ณธ ์ฌ์ด์ ์ ์ฅ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ค. ๋ง์ฝ ๋ณต์ฌ๋ณธ ๊ฐ์ด ์์ ๋๋ ค๊ณ ํ๋ฉด ์์ ์ง์ ์ ์๋ณธ์ ๋ณต์ฌํ๋ค. ์ด๋ ๊ฒ ๋๋ฌธ์ ์ฝ๋์์๋ ์ฆ์ ๋ณต์ฌ๋ ๊ฒ ์ฒ๋ผ ๋ณด์ธ๋ค.
let hd = Resolution(width: 1920, height: 1080)
var cinema = hd
์๋ hd๋ผ๋ ์์๋ฅผ ์ ์ธํ ํ ํ HD ๋น๋์ค (1920 ํฝ์ ๋๋น์ 1080 ํฝ์ ๋์ด)์ ๋๋น์ ๋์ด๋ฅผ ์ด๊ธฐํํ๋ Resolution ์ธ์คํด์ค๋ฅผ ์ค์ ํ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ cinema๋ผ๋ ๋ณ์๋ฅผ ์ ์ธํ๊ณ hd ์ ํ์ฌ ๊ฐ์ ํ ๋นํ๋ค. Resolution ์ ๊ตฌ์กฐ์ฒด ์ด๋ฏ๋ก ๊ธฐ์กด ์ธ์คํด์ค์ ๋ณต์ฌ๋ณธ ์ด ๋ง๋ค์ด์ง๊ณ ์ด ์ ๋ณต์ฌ๋ณธ์ด cinema์ ํ ๋น๋๋ค. hd ์ cinema ๊ฐ ํ์ฌ ๊ฐ์ ๋๋น์ ๋์ด๋ฅผ ๊ฐ์ง์ง๋ง 2๊ฐ๋ ์๋ฒฝํ๊ฒ ๋ค๋ฅธ ์ธ์คํด์ค์ด๋ค.
cinema.width = 2048
print("cinema is now \(cinema.width) pixels wide")
// Prints "cinema is now 2048 pixels wide"
print("hd is still \(hd.width) pixels wide")
// Prints "hd is still 1920 pixels wide"
๊ทธ๋ฌ๋ฏ๋ก ๋ถ๋ฆฌ๋ ์ธ์คํด์ค์ด๊ธฐ ๋๋ฌธ์ cinema์ ๋๋น๋ฅผ 2048 ๋ก ์ค์ ํด๋ hd์ ์ ์ฅ๋ ๋๋น์๋ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
ํด๋์ค๋ ์ฐธ์กฐ ํ์ (Classes Are Reference Types)
๊ฐํ์ ๊ณผ ๋ฌ๋ฆฌ, ์ฐธ์กฐํ์ ์ ๋ณ์๋ ์์์ ํ ๋นํ ๋๋ ํจ์์ ์ ๋ฌํ ๋, ๋ณต์ฌํ์ง ์๋๋ค. ๊ธฐ์กด๊ณผ ๋์ผํ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ์ฌ ์ฌ์ฉํ๋ค.
let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0
let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0
tenEighty๋ฅผ ์์ alsoTenEighty์ ํ ๋นํ ํ, alsoTenEighty์ ํ๋กํผํฐ๋ฅผ ์์ ํ๋ฉด alsoTenEighty์ ํ๋กํผํฐ ๊ฐ๋ ์์ ๋์ง๋ง, tenEighty์ ๊ฐ๋ ์์ ๋๋ค.
์๋ณ ์ฐ์ฐ์ (Identity Operators)
ํด๋์ค๋ ์ฐธ์กฐ ํ์ ์ด๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์์์ ๋ณ์์์ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ ์ ์๋ค. ์์์ ๋ณ์๊ฐ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๊ณ ์๋์ง ๋น๊ตํ๊ธฐ ์ํด ์๋ณ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ๋์ผ ์ธ์คํด์ค (Identical to) (===)
- ๋์ผํ์ง ์์ ์ธ์คํด์ค (Not identical to) (!==)
if tenEighty === alsoTenEighty {
print("tenEighty and alsoTenEighty refer to the same VideoMode instance.")
}
// "tenEighty and alsoTenEighty refer to the same VideoMode instance." ๋ฅผ ์ธ์ํจ
'๐ฆ Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Methods (0) | 2022.07.04 |
---|---|
Properties (0) | 2022.07.04 |
Enumerations (0) | 2022.06.15 |
Closures (0) | 2022.06.15 |
Functions (0) | 2022.06.01 |