Bibi's DevLog π€π
[Swift Language Guide (5.7)] Structures and Classes ꡬ쑰체μ ν΄λμ€ λ³Έλ¬Έ
[Swift Language Guide (5.7)] Structures and Classes ꡬ쑰체μ ν΄λμ€
λΉλΉ bibi 2023. 1. 25. 13:27[Swift Language Guide (5.7)] Structures and Classes ꡬ쑰체μ ν΄λμ€
Structures and Classes - The Swift Programming Language (Swift 5.7)
ꡬ쑰체*μ *ν΄λμ€ λ λΉμ μ νλ‘κ·Έλ¨ μ½λμ κ΅¬μ± μμκ° λλ λ€λͺ©μ μ μ μ°ν ꡬ쑰λ€μ λλ€. μμ, λ³μ, ν¨μλ₯Ό μ μν λμ κ°μ ꡬ문μ μ¬μ©ν΄ λΉμ μ ꡬ쑰체μ ν΄λμ€μ νλ‘νΌν°λ€κ³Ό λ©μλλ€μ λν΄ κΈ°λ₯μ λν μ μμ΅λλ€.
λ€λ₯Έ νλ‘κ·Έλλ° μΈμ΄λ€κ³Ό λ€λ₯΄κ², Swiftλ μ¬μ©μ μ μ ν΄λμ€λ ꡬ쑰체λ₯Ό μν λ³λμ μΈν°νμ΄μ€μ ꡬν νμΌμ μμ±νλλ‘ μꡬνμ§ μμ΅λλ€. Swiftμμλ, νλμ νμΌμ ꡬ쑰체λ ν΄λμ€λ₯Ό μ μΈνκ³ , κ·Έ ꡬ쑰체λ ν΄λμ€μ λν μΈλΆ μΈν°νμ΄μ€λ λ€λ₯Έ μ½λμμ μ¬μ©ν μ μλλ‘ μλμΌλ‘ λ§λ€μ΄μ§λλ€.
μ£Όμ
ν΄λμ€μ μΈμ€ν΄μ€λ μ ν΅μ μΌλ‘ κ°μ²΄(object) λΌκ³ μλ €μ Έ μμ΅λλ€. νμ§λ§, Swift ꡬ쑰체μ ν΄λμ€λ€μ λ€λ₯Έ μΈμ΄λ€λ³΄λ€ κΈ°λ₯μ μΌλ‘ κ΅μ₯ν λΉμ·ν©λλ€. κ·Έλ¦¬κ³ μ΄ μ±ν°μ λλΆλΆμ ν΄λμ€μ ꡬ쑰체 νμ μ μΈμ€ν΄μ€μ λͺ¨λ μ μ© κ°λ₯ν κΈ°λ₯λ€μ μ€λͺ νκ³ μμ΅λλ€. μ΄ λλ¬Έμ, λ μΌλ°μ μΈ μ©μ΄μΈ μΈμ€ν΄μ€(instance) κ° μ¬μ©λ©λλ€.
ꡬ쑰체μ ν΄λμ€ λΉκ΅
Swiftμ ꡬ쑰체μ ν΄λμ€λ λ§μ 곡ν΅μ μ κ°μ§κ³ μμ΅λλ€. λ λ€ λ€μκ³Ό κ°μ κ²λ€μ ν μ μμ΅λλ€:
- κ°μ μ μ₯νλ νλ‘νΌν° μ μνκΈ°
- κΈ°λ₯μ μ 곡νλ λ©μλ μ μνκΈ°
- μλΈμ€ν¬λ¦½νΈ λ¬Έλ²μ μ¬μ©ν΄ κ·Έ κ°μ μ κ·Όνλλ‘ νλ μλΈμ€ν¬λ¦½νΈ μ μνκΈ°
- μ΄κΈ° μνλ₯Ό μ€μ νλ μ΄λμ λΌμ΄μ (μμ±μ) μ μνκΈ°
- κΈ°λ³Έ ꡬν μ΄μμΌλ‘ κΈ°λ₯μ νμ₯νκΈ° (extended)
- νΉμ μ’ λ₯μ νμ€ κΈ°λ₯μ μ 곡νκΈ° μν νλ‘ν μ½ μ€μνκΈ°
λ λ§μ μ 보λ₯Ό μν΄μλ, νλ‘νΌν°, λ©μλ, μλΈμ€ν¬λ¦½νΈ, μ΄κΈ°ν, μ΅μ€ν μ , νλ‘ν μ½ μ 보μμμ€.
ν΄λμ€λ κ΅¬μ‘°μ²΄κ° κ°κ³ μμ§ μμ μΆκ°μ μΈ λ₯λ ₯λ€μ κ°μ΅λλ€:
- μμμ ν΅ν΄ νλμ ν΄λμ€κ° λ€λ₯Έ ν΄λμ€μ νΉμ§μ μμλ°μ μ μμ΅λλ€.
- νμ μΊμ€ν μ ν΅ν΄ λ°νμμ ν΄λμ€ μΈμ€ν΄μ€μ νμ μ νμΈνκ³ ν΄μν μ μμ΅λλ€.
- λμ΄λμ λΌμ΄μ λ₯Ό ν΅ν΄ ν΄λμ€μ μΈμ€ν΄μ€κ° μμ μκ² ν λΉλ μ΄λ€ 리μμ€λ₯Ό ν΄μ ν μ μμ΅λλ€.
- μ°Έμ‘° μΉ΄μ΄ν μ ν΄λμ€ μΈμ€ν΄μ€μ λν΄ νλ μ΄μμ μ°Έμ‘°λ₯Ό νμ©ν©λλ€.
λ λ§μ μ 보λ₯Ό μν΄μλ, μμ, νμ μΊμ€ν , λμ΄λμ λΌμ΄μ μ΄μ , μλ μ°Έμ‘° μΉ΄μ΄ν (ARC) λ₯Ό 보μμμ€.
ν΄λμ€κ° μ 곡νλ μΆκ°μ μΈ κΈ°λ₯λ€μ μ¦κ°ν 볡μ‘λλΌλ λκ°λ₯Ό κ°μ΅λλ€. μΌλ°μ μΈ κ°μ΄λλΌμΈμΌλ‘μ, λ μΆλ‘ νκΈ° μ¬μ΄ ꡬ쑰체λ₯Ό μ νΈνκ³ , ν΄λμ€κ° λ μ μ νκ±°λ νμν λμλ§ ν΄λμ€λ₯Ό μ¬μ©νμμμ€. μ€μ λ‘, μ΄κ²μ λΉμ μ΄ μ μνλ λλΆλΆμ 컀μ€ν λ°μ΄ν° νμ μ΄ κ΅¬μ‘°μ²΄μ μ΄κ±°νμΌ κ²μμ μλ―Έν©λλ€. λ μμΈν λΉκ΅λ₯Ό μν΄μλ, ꡬ쑰체μ ν΄λμ€ μ¬μ΄μμ μ ννκΈ° λ₯Ό 보μμμ€.
μ£Όμ
ν΄λμ€μ actorsλ λ§μ κ°μ νΉμ§κ³Ό νλμ 곡μ ν©λλ€. actorμ λν λ λ§μ μ 보λ₯Ό μν΄μλ, λμμ± λ¬Έμλ₯Ό 보μμμ€.
μ μ ꡬ문
ꡬ쑰체μ ν΄λμ€λ λΉμ·ν μ μ ꡬ문μ κ°μ§κ³ μμ΅λλ€. ꡬ쑰체λ struct
λΌλ ν€μλλ‘, ν΄λμ€λ class
λΌλ ν€μλλ‘ μ€λͺ
ν©λλ€. λ λ€ μμ μ λν λͺ¨λ μ μλ₯Ό ν μμ κ΄νΈ μμ μ μ΅λλ€.
struct SomeStructure {
// structure definition goes here
}
class SomeClass {
// class definition goes here
}
μ£Όμ
μλ‘μ΄ κ΅¬μ‘°μ²΄λ ν΄λμ€λ₯Ό μ μνλ κ²μ 곧 μλ‘μ΄ Swift νμ μ μ μνλ κ²κ³Ό κ°μ΅λλ€. νμ€ Swift νμ λ€κ³Ό κ°μ΄(String, Int, Boolμ²λΌ), λΉμ μ΄ λ§λ νμ μλ UpperCamelCase μ΄λ¦μ μ μ©νμμμ€(μμ SomeStructureμ SomeClassμ²λΌ). νλ‘νΌν°λ λ©μλμλ lowerCamelCase μ΄λ¦(frameRateμ incrementCountκ°μ)μ μ μ©ν΄ νμ μ΄λ¦κ³Ό ꡬλ³λκ² νμμμ€.
μ¬κΈ°μ ꡬ쑰체 μ μμ ν΄λμ€ μ μμ λν μμκ° μμ΅λλ€:
struct Resolution {
var width = 0
var height = 0
}
class VideoMode {
var resolution = Resolution()
var interlaced = false
var frameRate = 0.0
var name: String?
}
μμ μμλ Resolution
μ΄λΌλ μλ‘μ΄ κ΅¬μ‘°μ²΄λ₯Ό μ μν΄ ν½μ
κΈ°λ°μ νλ©΄ ν΄μλλ₯Ό λνλ
λλ€. μ΄ κ΅¬μ‘°μ²΄λ λ κ°μ μ μ₯ νλ‘νΌν°μΈ width
μ height
λ₯Ό κ°μ§λλ€. μ μ₯ νλ‘νΌν°λ ꡬ쑰체λ ν΄λμ€μ μΌλΆλ‘μ λ¬Άμ¬μ μ μ₯λ μμλ λ³μλ₯Ό λ§ν©λλ€. μ΄ λ νλ‘νΌν°λ€μ Int
νμ
μ λνλ΄λ©° μ΄κΈ°κ°μ 0μΌλ‘ μ€μ λμ΄ μμ΅λλ€.
μμ μμλ λν VideoMode
λΌλ μλ‘μ΄ ν΄λμ€λ₯Ό μ μν΄ λΉλμ€ νλ©΄μ λν νΉμ λΉλμ€ λͺ¨λλ₯Ό λνλ
λλ€. μ΄ ν΄λμ€λ λ€ κ°μ μ μ₯ νλ‘νΌν° λ³μλ₯Ό κ°μ§λλ€. 첫 λ²μ§ΈμΈ resolution
μ μλ‘μ΄ Resolution
ꡬ쑰체 μΈμ€ν΄μ€λ‘ μ΄κΈ°νλμ΄ μμ΅λλ€. μ΄ νλ‘νΌν° νμ
μ Resolution
μΌλ‘ μΆλ‘ ν μ μμ΅λλ€. λλ¨Έμ§ μΈ νλ‘νΌν°λ€μ λν΄μλ, interlaced
μ€μ κ°μ falseλ‘(βλΉμΈν°λ μ΄μ€λ λΉλμ€βλ₯Ό μλ―Έ), frameRate
λ 0.0μΌλ‘, κ·Έλ¦¬κ³ μ΅μ
λ Stringκ°μΈ name
μ κ°μ§κ³ μ VideoMode
μΈμ€ν΄μ€κ° μ΄κΈ°νλ©λλ€. name
νλ‘νΌν°λ μ΅μ
λ νμ
μ΄κΈ° λλ¬Έμ, μλμΌλ‘ nil
(λλ βname
κ° μμβ)μ΄λΌλ κΈ°λ³Έκ°μ κ°μ§λλ€.
ꡬ쑰체μ ν΄λμ€ μΈμ€ν΄μ€
Resolution
ꡬ쑰체 μ μμ VideoMode
ν΄λμ€ μ μλ λ¨μ§ λ κ°μ²΄κ° μ΄λ»κ² 보μΌμ§λ§μ λ¬μ¬ν©λλ€. κ·Έ μ체λ§μΌλ‘λ νΉμ ν΄μλλ λΉλμ€λͺ¨λλ₯Ό λ¬μ¬νμ§ μμ΅λλ€. κ·Έλ¬κΈ° μν΄μλ, μ΄ κ΅¬μ‘°μ²΄ λλ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό λ§λ€ νμκ° μμ΅λλ€.
μΈμ€ν΄μ€λ₯Ό μμ±νλ ꡬ문μ ꡬ쑰체μ ν΄λμ€ λͺ¨λ λ§€μ° λΉμ·ν©λλ€:
let someResolution = Resolution()
let someVideoMode = VideoMode()
ꡬ쑰체μ ν΄λμ€λ λͺ¨λ μ μΈμ€ν΄μ€μ λν μ΄κΈ°ν ꡬ문μ μ¬μ©ν©λλ€. κ°μ₯ κ°λ¨ν ννμ μ΄κΈ°ν ꡬ문μ Resolution()
λλ VideoMode()
μ κ°μ΄ ν΄λμ€ λλ ꡬ쑰체μ νμ μ΄λ¦μ μ κ³ λΉ μκ΄νΈλ₯Ό μ λ κ²μ
λλ€. μ΄κ²μ ν΄λμ€ λλ ꡬ쑰체μ μ μΈμ€ν΄μ€λ₯Ό νλ‘νΌν° κΈ°λ³Έκ°μΌλ‘ μ΄κΈ°νν©λλ€. ν΄λμ€μ ꡬ쑰체 μ΄κΈ°νλ Initialization μ μμΈν μ€λͺ
λμ΄ μμ΅λλ€.
νλ‘νΌν°μ μ κ·ΌνκΈ°
μΈμ€ν΄μ€μ νλ‘νΌν°μ μ κ·Όν λλ μ ꡬ문(dot syntax) μ μ¬μ©ν©λλ€. μ ꡬ문μμλ, μΈμ€ν΄μ€ μ΄λ¦ λ€μ νλ‘νΌν° μ΄λ¦μ μ κ³ , κ·Έ μ¬μ΄λ₯Ό 곡백 μμ΄ λ§μΉ¨ν(.
)λ‘ μ°κ²°νλ©΄ λ©λλ€:
print("The width of someResolution is \(someResolution.width)")
// Prints "The width of someResolution is 0"
μ΄ μμμμ, someResolution.width
λ someResolution
μ width
νλ‘νΌν°λ₯Ό μ°Έμ‘°νλ©°, κ·Έκ²μ κΈ°λ³Έ μ΄κΈ°κ°μΈ 0
μ λ°νν©λλ€.
κ°μ λ°©μμΌλ‘ νμ νλ‘νΌν°κΉμ§ μ κ·Όν μ μμ΅λλ€. μλ₯Ό λ€μ΄ VideoMode
μ resolution
νλ‘νΌν°μ width
νλ‘νΌν°μ κ°μ΄:
print("The width of someVideoMode is \(someVideoMode.resolution.width)")
// Prints "The width of someVideoMode is 0"
λν νλ‘νΌν° λ³μμ λν΄ μλ‘μ΄ κ°μ ν λΉν λλ μ ꡬ문μ μ¬μ©ν μ μμ΅λλ€:
someVideoMode.resolution.width = 1280
print("The width of someVideoMode is now \(someVideoMode.resolution.width)")
// Prints "The width of someVideoMode is now 1280"
ꡬ쑰체 νμ μ μν λ©€λ²μμ΄μ¦ μ΄λμ λΌμ΄μ (Memberwise Initializers)
λͺ¨λ ꡬ쑰체λ€μ μλμΌλ‘ μμ±λλ λ©€λ²μμ΄μ¦ μ΄λμ λΌμ΄μ λ₯Ό κ°μ΅λλ€. μ΄κ²μ μ ꡬ쑰체 μΈμ€ν΄μ€μ λ©€λ² νλ‘νΌν°λ€μ μ΄κΈ°ννκΈ° μν΄ μ¬μ©ν μ μμ΅λλ€. μ μΈμ€ν΄μ€μ νλ‘νΌν°μ λν μ΄κΈ°κ°μ λ©€λ²μμ΄μ¦ μ΄λμ λΌμ΄μ μ μ΄λ¦μ ν΅ν΄ μ λ¬λ μ μμ΅λλ€:
let vga = Resolution(width: 640, height: 480)
ꡬ쑰체μ λ¬λ¦¬, ν΄λμ€ μΈμ€ν΄μ€λ κΈ°λ³Έ λ©€λ²μμ΄μ¦ μ΄λμ λΌμ΄μ λ₯Ό κ°μ§ μμ΅λλ€. μ΄λμ λΌμ΄μ μ λν λ μμΈν μ 보λ Initialization μ μμ΅λλ€.
ꡬ쑰체μ μ΄κ±°νμ κ° νμ
κ° νμ μ κ·Έκ²μ΄ μμλ λ³μμ ν λΉλκ±°λ, ν¨μμ μ λ¬λ λμ κ·Έ κ°μ΄ 볡μ¬λλ νμ μ λλ€.
λΉμ μ μ¬μ€ μ§λ μ±ν°λ€ λ΄λ΄ κ° νμ μ νμ₯μ μΌλ‘ μ¬μ©ν΄ μμ΅λλ€. μ¬μ€, Swiftμ λͺ¨λ κΈ°λ³Έ νμ λ€ - μ μν, λΆλμμμ μ«μ, λΆλ¦¬μΈ, λ¬Έμμ΄, λ°°μ΄κ³Ό λμ λ리 - λ€μ κ° νμ μ΄λ©°, νλ©΄ λ€μμ κ΅¬μ‘°μ²΄λ‘ κ΅¬νλμ΄ μμ΅λλ€.
Swiftμμ λͺ¨λ ꡬ쑰체μ μ΄κ±°νμ κ° νμ μ λλ€. μ΄κ²μ λΉμ μ΄ λ§λλ μ΄λ€ ꡬ쑰체μ μ΄κ±°νμ μΈμ€ν΄μ€λ - κ·Έλ¦¬κ³ κ·Έκ²λ€μ΄ νλ‘νΌν°λ‘μ κ°λ μ΄λ€ κ° νμ μ΄λ - λΉμ μ μ½λμμ μ λ¬λ λ νμ 볡μ¬λλ€λ κ²μ μλ―Έν©λλ€.
μ£Όμ
λ°°μ΄, λμ λ리, λ¬Έμμ΄κ³Ό κ°μ΄ νμ€ λΌμ΄λΈλ¬λ¦¬μ μν΄ μ μλ 컬λ μ λ€μ 볡μ¬μ μ±λ₯ λΉμ©μ μ€μ΄κΈ° μν μ΅μ ν κΈ°λ²μ μ¬μ©ν©λλ€. μ΄λ¬ν 컬λ μ λ€μ 볡μ¬λ³Έμ μ¦μ λ§λλ λμ , μλ μΈμ€ν΄μ€μ λͺ¨λ 볡μ¬λ³Έλ€ κ°μ μμκ° μ μ₯λ λ©λͺ¨λ¦¬λ₯Ό 곡μ ν©λλ€. λ§μ½ 볡μ¬λ³Έλ€ μ€ νλκ° μμ λλ€λ©΄, μμ λκΈ° μ§μ μ μμλ€μ΄ 볡μ¬λ©λλ€. λΉμ μ μ½λμμλ λ§μΉ 볡μ¬κ° μ¦μ μ΄λ£¨μ΄μ§λ κ²μ²λΌ 보μ λλ€.
μ΄μ μμμ Resolution
ꡬ쑰체λ₯Ό μ¬μ©νλ μλ μμ λ₯Ό λ΄
λλ€:
let hd = Resolution(width: 1920, height: 1080)
var cinema = hd
μ΄ μμλ hd
λΌλ μμλ₯Ό μ μΈνκ³ κ·Έ κ°μ full HD λΉλμ€μ λλΉμ λμ΄λ‘ μ΄κΈ°νν Resolution
μΈμ€ν΄μ€λ‘ μ€μ νκ³ μμ΅λλ€. (1920ν½μ
μ λλΉμ 1080ν½μ
μ λμ΄λ₯Ό κ°λ)
κ·Έ λ€μ cinema
λΌλ λ³μλ₯Ό μ μΈν΄ νμ¬ hd
μ κ°μΌλ‘ μ΄κΈ°ννκ³ μμ΅λλ€. Resolution
μ΄ κ΅¬μ‘°μ²΄μ΄κΈ° λλ¬Έμ, μ‘΄μ¬νλ μΈμ€ν΄μ€μ 볡μ¬λ³Έ μ΄ λ§λ€μ΄μ§λ©°, κ·Έ μλ‘μ΄ λ³΅μ¬λ³Έμ΄ cinema
μ ν λΉλ©λλ€. hd
μ cinema
κ° κ°μ λλΉμ λμ΄λ₯Ό κ°μ§κ³ μλλΌλ, μ¬μ€ κ·Έ λμ μμ ν λ€λ₯Έ μΈμ€ν΄μ€μ
λλ€.
λ€μμΌλ‘, cinema
μ width
νλ‘νΌν°κ° λμ§νΈ μνκ΄ νλ‘μ μ
μ μ¬μ©λλ 2K νμ€μΌλ‘ λλΉκ° μ΄μ§ λκ² μμ λ©λλ€ (2048ν½μ
μ λλΉμ 1080ν½μ
μ λμ΄λ₯Ό κ°λ):
cinema.width = 2048
cinema
μ width
νλ‘νΌν°λ₯Ό νμΈνλ©΄ μ¦μ 2048λ‘ λ³ν κ²μ νμΈν μ μμ΅λλ€:
print("cinema is now \(cinema.width) pixels wide")
// Prints "cinema is now 2048 pixels wide"
νμ§λ§, μλμ hd
μΈμ€ν΄μ€μ width
νλ‘νΌν°λ μ¬μ ν μμ κ°μΈ 1920μ κ°μ΅λλ€:
print("hd is still \(hd.width) pixels wide")
// Prints "hd is still 1920 pixels wide"
cinema
μ hd
μ νμ¬ κ°μ΄ μ£Όμ΄μ§ λ, hd
μ μ μ₯λ κ°λ€μ μλ‘μ΄ cinema
μΈμ€ν΄μ€λ‘ 볡μ¬λμ΄ μ μ₯λ©λλ€. κ·Έ κ²°κ³Ό κ°μ μ«μ κ°μ κ°μ§ μ ν λ€λ₯Έ λΆλ¦¬λ μΈμ€ν΄μ€κ° λ§λ€μ΄μ§λλ€. νμ§λ§, μ΄λ€μ΄ λΆλ¦¬λ μΈμ€ν΄μ€λ€μ΄κΈ° λλ¬Έμ, cinema
μ λλΉλ₯Ό 2048λ‘ μμ νλ κ²μ hd
μ λλΉμ μν₯μ μ£Όμ§ μμ΅λλ€. μ¦ μλ κ·Έλ¦Όκ³Ό κ°μ΅λλ€:
κ°μ λμμ΄ μ΄κ±°νμ λν΄μλ μ μ©λ©λλ€:
enum CompassPoint {
case north, south, east, west
mutating func turnNorth() {
self = .north
}
}
var currentDirection = CompassPoint.west
let rememberedDirection = currentDirection
currentDirection.turnNorth()
print("The current direction is \(currentDirection)")
print("The remembered direction is \(rememberedDirection)")
// Prints "The current direction is north"
// Prints "The remembered direction is west"
rememberedDirection
μ΄ currentDirection
μ κ°μ ν λΉλ°μ λ, κ·Έκ²μ μ¬μ€ κ·Έ κ°μ 볡μ¬λ³ΈμΌλ‘ μ€μ λ©λλ€. currentDirection
μ κ°μ λ°κΎΈλ κ²μ κ·Έ μ΄ν rememberedDirection
μ μ μ₯λ μλ κ°μ 볡μ¬λ³Έμ μλ¬΄λ° μν₯μ λ―ΈμΉμ§ μμ΅λλ€.
ν΄λμ€λ μ°Έμ‘° νμ
κ° νμ κ³Ό λ€λ₯΄κ², μ°Έμ‘° νμ μ κ·Έκ²μ΄ λ³μλ μμμ ν λΉλκ±°λ ν¨μμ μ λ¬λ λ 볡μ¬λμ§ μμ΅λλ€. 볡μ¬λλ λμ , κ°μ μ‘΄μ¬νλ μΈμ€ν΄μ€μ λν μ°Έμ‘°κ° μ¬μ©λ©λλ€.
μ¬κΈ°μ μμμ μ μν VideoMode
ν΄λμ€λ₯Ό μ¬μ©ν μμκ° μμ΅λλ€:
let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0
μ΄ μμλ tenEighty
λΌλ μ μμλ₯Ό μ μνκ³ κ·Έ κ°μ VideoMode
ν΄λμ€μ μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νλλ‘ μ€μ ν©λλ€. λΉλμ€ λͺ¨λμ ν΄μλλ 1920 * 1080 μ΄λΌλ μ΄μ μ μ€μ ν HD ν΄μλμ 볡μ¬λ³Έμ΄ ν λΉλ©λλ€. interlaced
κ°μ true, name
μ β1080iβ, frameRate
λ μ΄λΉ 25.0μΌλ‘ μ€μ λ©λλ€.
κ·Έ λ€μ, tenEighty
λ μλ‘μ΄ μμμΈ alsoTenEighty
μ ν λΉλ©λλ€. κ·Έλ¦¬κ³ alsoTenEighty
μ frameRate
κ° λ³κ²½λ©λλ€:
let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0
ν΄λμ€λ μ°Έμ‘° νμ
μ΄κΈ° λλ¬Έμ, tenEighty
μ alsoTenEighty
λ μ¬μ€ κ°μ VideoMode
μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νκ³ μμ΅λλ€. μ€μ§μ μΌλ‘, κ·Έκ²λ€μ κ·Έμ νλμ κ°μ μΈμ€ν΄μ€μ λν μλ‘ λ€λ₯Έ λ μ΄λ¦λ€μΌ λΏμ
λλ€. μλ κ·Έλ¦Όμμ 보μ¬μ£Όλ κ²κ³Ό κ°μ΅λλ€:
tenEighty
μ frameRate
νλ‘νΌν°λ₯Ό νμΈνμ¬ μλμ VideoMode
μΈμ€ν΄μ€λ‘λΆν° μλ‘μ΄ frameRate
μΈ 30.0μ λ°ννλ κ²μ λ³Ό μ μμ΅λλ€:
print("The frameRate property of tenEighty is now \(tenEighty.frameRate)")
// Prints "The frameRate property of tenEighty is now 30.0"
μ΄ μμλ λν μ°Έμ‘° νμ
μ΄ μΆλ‘ νκΈ° μ΄λ €μμ 보μ¬μ€λλ€. λ§μ½ tenEighty
μ alsoTenEighty
κ° λΉμ μ νλ‘κ·Έλ¨μ μ½λμμ λ©λ¦¬ λ¨μ΄μ Έ μμΌλ©΄, VideoModeκ° λ³νλ κ²μ λͺ¨λ νμ
νκΈ°λ μ΄λ €μΈ κ²μ
λλ€. λΉμ μ΄ tenEighty
λ₯Ό μ¬μ©ν λ λ§λ€, alsoTenEighty
λ₯Ό μ¬μ©νλ μ½λμ λν΄μλ μκ°ν΄μΌ νλ©°, κ·Έ λ°λλ λ§μ°¬κ°μ§μ
λλ€. λμ‘°μ μΌλ‘, κ° νμ
λ€μ μΆλ‘ νκΈ° λ μ¬μ°λ©°, μ΄λ μμ€μ½λ μμμ κ°μ κ°μ λν΄ μνΈμμ©νλ μ½λλ€μ΄ λͺ¨λ κ°κΉμ΄ μκΈ° λλ¬Έμ
λλ€.
tenEighty
μ alsoTenEighty
κ° λͺ¨λ λ³μκ° μλ μμ λ‘ μ μΈλμμμ μ£Όμνμμμ€, νμ§λ§ λΉμ μ μ¬μ ν tenEighty.frameRate
μ alsoTenEighty.frameRate
λ₯Ό λ³κ²½ν μ μμΌλ©° κ·Έ μ΄μ λ tenEighty
μ alsoTenEighty
μμ μμ μ μ¬μ€ λ³νμ§ μκΈ° λλ¬Έμ
λλ€. tenEighty
μ alsoTenEighty
λ μ€μ€λ‘ VideoMode
μΈμ€ν΄μ€λ₯Ό βμ μ₯βνμ§ μμ΅λλ€ - λμ , κ·Έ λμ λͺ¨λ κΈ°μ μ VideoMode
μΈμ€ν΄μ€λ₯Ό μ°Έμ‘° ν©λλ€. λ³νλ κ²μ VideoMode
μ μμμ λν μ°Έμ‘°κ°μ΄ μλ, VideoMode
μ frameRate
νλ‘νΌν°μ
λλ€.
λμΌμ± μ°μ°μ (Identity Operators)
ν΄λμ€λ μ°Έμ‘° νμ μ΄κΈ° λλ¬Έμ, μ¬λ¬ μμλ λ³μκ° νλμ κ°μ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νλλ‘ ν μ μμ΅λλ€. (ꡬ쑰체μ μ΄κ±°νμ λν΄μλ μ΄κ²μ΄ μ¬μ€μ΄ μλλλ€. μλνλ©΄ κ·Έκ²λ€μ μΈμ λ μμλ λ³μμ ν λΉλκ±°λ ν¨μλ‘ μ λ¬λ λμ κ°μ΄ 볡μ¬λκΈ° λλ¬Έμ λλ€)
λλλ‘ λ μμλ λ³μκ° μ νν κ°μ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νλμ§ μμλ΄λ κ²μ΄ μ μ©ν μ μμ΅λλ€. μ΄λ₯Ό μν΄ Swiftλ λ κ°μ§ λμΌμ± μ°μ°μλ₯Ό μ 곡ν©λλ€:
- β¦μ λμΌνλ€ (
===
) - β¦μ λμΌνμ§ μλ€ (
!==
)
μ΄ μ°μ°μλ€μ λ μμλ λ³μκ° νλμ κ°μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νκ³ μλμ§ νμΈνκΈ° μν΄ μ¬μ©ν©λλ€:
if tenEighty === alsoTenEighty {
print("tenEighty and alsoTenEighty refer to the same VideoMode instance.")
}
// Prints "tenEighty and alsoTenEighty refer to the same VideoMode instance."
λμΌνλ€ (μΈ κ°μ λ±νΈ νμ, ===
λ‘ λνλ) κ° λλ±νλ€ (λ κ°μ λ±νΈ νμ, ==
λ‘ λνλ) μ κ°μ κ²μ μλ―Ένλ κ²μ΄ μλλΌλ κ²μ μ£Όμνμμμ€. λμΌνλ€ λ κ²μ ν΄λμ€ νμ
μ λ μμλ λ³μκ° μ νν κ°μ ν΄λμ€ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νκ³ μμμ μλ―Έν©λλ€. λλ±νλ€ λ κ²μ λ μΈμ€ν΄μ€κ° κ°μ΄ κ°κ±°λ, νμ
μ λ§λ μ¬λμ΄ μ μν λ°μ μν΄ κ°μ΄ λλ±νλ€κ³ κ°μ£Όλ¨μ μλ―Έν©λλ€.
λΉμ λ§μ ꡬ쑰체μ ν΄λμ€λ₯Ό μ μνμ λ, 무μμ΄ λ μΈμ€ν΄μ€μ κ°μμ κ²°μ νλμ§ μ νλ κ²μ λΉμ μ μ±
μμ
λλ€. ==
μ !=
μ°μ°μμ ꡬνμ μ¬μ©μ μ μνλ κ³Όμ μ Equivalence Operators μ μ€λͺ
λμ΄ μμ΅λλ€.
ν¬μΈν°
λΉμ μ΄ C, C++, λλ Objective-Cλ₯Ό κ²½νν μ μ΄ μλ€λ©΄, μ΄ μΈμ΄λ€μ΄ λ©λͺ¨λ¦¬μ μ£Όμλ₯Ό μ°Έμ‘°νκΈ° μν΄ ν¬μΈν° λ₯Ό μ¬μ©νλ€λ κ²μ μκ³ μμ κ²μ
λλ€. λͺλͺ μ°Έμ‘° νμ
μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νλ Swiftμ μμλ λ³μλ Cμ ν¬μΈν°μ λΉμ·νμ§λ§, κ·Έκ²μ λ©λͺ¨λ¦¬μ μ£Όμμ λν μ§μ μ μΈ ν¬μΈν°κ° μλλ©°, μ°Έμ‘°λ₯Ό λ§λλ κ²μ λνλ΄κΈ° μν΄ μμ€ν
리μ€ν¬(λ³ν, *
)λ₯Ό λΆμΌ νμλ μμ΅λλ€. λμ , Swiftμμ μ΄λ¬ν μ°Έμ‘°λ€μ λ€λ₯Έ μμλ λ³μμ λκ°μ΄ μ μλ©λλ€. λΉμ μ΄ ν¬μΈν°λ₯Ό ν΅ν΄ μ§μ μνΈμμ©ν΄μΌ νλ€λ©΄, κ·Έλ΄ λ μ¬μ©ν μ μλ ν¬μΈν°μ λ²νΌ νμ
λ€μ νμ€ λΌμ΄λΈλ¬λ¦¬μμ μ 곡ν©λλ€ - Manual Memory Management λ₯Ό μ°Έκ³ νμμμ€.