πνλ‘νΌν°μ λ©μλ
νλ‘νΌν° : ν΄λμ€, ꡬ쑰체 λλ μ΄κ±°ν λ±μ κ΄λ ¨λ κ°
λ©μλ : νΉμ νμ μ κ΄λ ¨λ νμ
π νλ‘νΌν°
- μ μ₯ νλ‘νΌν° : μΈμ€ν΄μ€μ λ³μ λλ μμ
- μ°μ° νλ‘νΌν° : κ°μ μ μ₯ν κ²μ΄ μλλΌ νΉμ μ°μ°μ μ€νν κ²°κ³Όκ° ( ν΄λμ€, ꡬ쑰체, μ΄κ±°νμ μ¬μ© )
- νμ νλ‘νν° : νΉμ νμ μ μ¬μ©λλ νλ‘νΌν° ( ν΄λμ€ λ³μ )
- νλ‘νΌν° κ°μμ = νλ‘νΌν°μ κ°μ΄ λ³νλ κ²μ κ°μ ( κ°μ΄ λ³ν λ κ°μ λ³νμ λ°λ₯Έ νΉμ μμ μ€ν )
π μ μ₯ νλ‘νΌν°
ν΄λμ€ λλ ꡬ쑰체μ μΈμ€ν΄μ€μ μ°κ΄λ κ°μ μ μ₯νλ κ°μ₯ λ¨μν κ°λ μ νλ‘νΌν°
var λ₯Ό μ¬μ©νλ©΄ λ³μ μ μ₯ νλ‘νΌν°
let μ μ¬μ©νλ©΄ μμ μ μ₯ νλ‘νΌν°
π ꡬ쑰체μ ν΄λμ€μ μ μ₯ νλ‘νΌν°
ꡬ쑰체μ μ μ₯ νλ‘νΌν°κ° μ΅μ λμ΄ μλλλΌλ, ꡬ쑰체λ μ μ₯ νλ‘νΌν°λ₯Ό λͺ¨λ ν¬ν¨νλ μ΄λμ λΌμ΄μ λ₯Ό μλμΌλ‘ μμ±νλ€.
νμ§λ§ ν΄λμ€μ μ μ₯ νλ‘νΌν°λ μ΅μ λμ΄ μλλΌλ©΄ νλ‘νΌν° κΈ°λ³Έκ°μ μ§μ ν΄μ£Όκ±°λ μ¬μ©μ μ μ μ΄λμ λΌμ΄μ λ₯Ό ν΅ν΄ λ°λμ μ΄κΈ°νν΄μ£Όμ΄μΌ νλ€. λ, ν΄λμ€ μΈμ€ν΄μ€μ μμ νλ‘νΌν°λ μΈμ€ν΄μ€κ° μ΄κΈ°ν(μ΄λμ λΌμ΄μ¦)λ λ νλ²λ§ κ°μ ν λΉ ν μ μμΌλ©°, μμν΄λμ€μμ μ΄ μ΄κΈ°νλ₯Ό λ³κ²½(μ¬μ μ)ν μ μμ΅λλ€.
μ μ₯ νλ‘νΌν°μ μ μΈ λ° μΈμ€ν΄μ€ μμ±
// μ’ν
struct CoordinatePoint{
var x: Int // μ μ₯ νλ‘νΌν°
var y: Int // μ μ₯ νλ‘νΌν°
}
// ꡬ쑰체μλ κΈ°λ³Έμ μΌλ‘ μ μ₯ νλ‘νΌν°λ₯Ό 맀κ°λ³μλ‘ κ°λ μ΄λμ
λΌμ΄μ κ° μμ΅λλ€.
let yagomPoint: CoordinatePoint = CoordinatePoint(x: 10, y: 5)
class Position{
var point: CoordinatePoint
// μ μ₯ νλ‘νΌν°(λ³μ) - μμΉ(point)λ λ³κ²½λ μ μμμ λ»νλ€.
let name: String // μ μ₯ νλ‘νΌν° (μμ)
// νλ‘νΌν° κΈ°λ³Έκ°μ μ§μ ν΄μ£Όμ§ μλλ€λ©΄ μ΄λμ
λΌμ΄μ λ₯Ό λ°λ‘ μ μν΄μ£Όμ΄μΌ νλ€.
init(name: String, currentPoint: CoordinatePoint){
self.name=name
self.poin=currentPoint
}
}
// μ¬μ©μ μ μ μ΄λμ
λΌμ΄μ λ₯Ό νΈμΆν΄μΌλ§ νλ€.
// κ·Έλ μ§ μμΌλ©΄ νλ‘νΌν° μ΄κΈ°κ°μ ν λΉν μ μκΈ° λλ¬Έμ μΈμ€ν΄μ€ μμ±μ΄ λΆκ°λ₯νλ€.
let yagomPosition: Position = Position(name: "yagom", currentPoint: yagomPoint)
π μ§μ° μ μ₯ νλ‘νΌν°
μΈμ€ν΄μ€λ₯Ό μμ±ν λ νλ‘νΌν°μ κ°μ΄ νμ μλ€λ©΄ νλ‘νΌν°λ₯Ό μ΅μ λλ‘ μ μΈν΄ μ€ μ μλ€. κ·Έλ°λ° κ·Έκ²κ³Όλ μ‘°κΈ λ€λ₯Έ μ©λλ‘ νμν λ κ°μ΄ ν λΉλλκ²μ΄ μ§μ°μ μ₯ νλ‘νΌν°μ΄λ€.
- νΈμΆμ΄ μμ΄μΌ κ°μ μ΄κΈ°ννλ€.
- lazy ν€μλλ₯Ό μ¬μ©νλ€.
- νμν λ κ°μ ν λΉν΄μΌνκΈ° λλ¬Έμ var ν€μλλ₯Ό μ¬μ©νλ€.
π μ°μ° νλ‘νΌν°
μ€μ κ°μ μ μ₯νλ νλ‘νΌν°κ° μλλΌ, νΉμ μνμ λ°λ₯Έ κ°μ μ°μ°νλ νλ‘νΌν°μ΄λ€.
μΈμ€ν΄μ€ λ΄/μΈλΆμ κ°μ μ°μ°νμ¬ μ μ ν κ°μ λλ €μ£Όλ μ κ·Όμμ μν μ΄λ μλνλ λ΄λΆμ νλ‘νΌν° κ°μ κ°μ μ μΌλ‘ μ€μ νλ μ€μ μ μν λ ν μ μλ€.
π κ΅³μ΄ λ©μλλ₯Ό λκ³ μ μ°μ° νλ‘νΌν°λ₯Ό μ¬μ©ν κΉ?
μΈμ€ν΄μ€ μΈλΆμμ λ©μλλ₯Ό ν΅ν΄ μΈμ€ν΄μ€ λ΄λΆ κ°μ μ κ·Όνλ €λ©΄ λ©μλλ₯Ό λ κ°(μ κ·Όμ, μ€μ μ) λͺ¨λ ꡬνν΄μΌ νλ€. λν μ΄λ₯Ό κ°μνκ³ λ©μλλ‘ κ΅¬ννλ€ νλλΌκ³ λ λ©μλκ° λΆμ° ꡬνλμ΄ μ½λμ κ°λ μ±μ΄ λλΉ μ§ μνμ΄ μλ€. νλ‘νΌν°κ° λ©μλ νμλ³΄λ€ ν¨μ¬ λ κ°νΈνκ³ μ§κ΄μ μ΄λ€.
λ€λ§ μ°μ° νλ‘νΌν°λ μ κ·ΌμμΈ get λ©μλλ§ κ΅¬νν΄λ κ²μ²λΌ μ½κΈ° μ μ© μνλ‘ κ΅¬ννκΈ° μ½μ§λ§, μ°κΈ° μ μ© μνλ‘ κ΅¬νν μ μλ€λ λ¨μ μ΄ μλ€. λ©μλλ‘λ μ€μ μ λ©μλλ§ κ΅¬ννμ¬ μ°κΈ° μ μ© μνλ‘ κ΅¬νν μ μμ§λ§ μ°μ° νλ‘νΌν°λ λΆκ°λ₯νλ€.
μ°μ° νλ‘νΌν°μ μ μμ μ¬μ©
struct CoordinatePoint{
var x: Int // μ μ₯ νλ‘νΌν°
var y: Int // μ μ₯ νλ‘νΌν°
// λμΉ μ’ν
var oppositePoint: CoordinatePoint { // μ°μ° νλ‘νΌν°
//μ κ·Όμ
get{
return CoordinatePoint(x: -x, y: -y)
}
// μ€μ μ
set(opposite) {
x = -opposite.x
y = -opposite.y
}
}
}
var yagomPoint: CoordinatePoint = CoordinatePoint(x: 10, y:20)
// νμ¬ μ’ν
print(yagomPosition) // 10, 20
// λμΉ μ’ν
print(yagomPosition.oppositePoint) // -10,-20
// λμΉ μ’νλ₯Ό (15,10)μΌλ‘ μ€μ νλ€λ©΄
yagomPosition.opppsitePoint = CoordinatePoint(x: 15, y:10)
// νμ¬ μ’νλ -15, -10μΌλ‘ μ€μ λλ€.
print(yagomPosition) // -15, -10
π νλ‘νΌν° κ°μμ
νλ‘νΌν°μ κ°μ΄ λ³κ²½λ¨μ λ°λΌ μ μ ν μμ
μ μ·¨ν μ μλ€.
νλ‘νΌν°μ κ°μ΄ μλ‘ ν λΉλ λλ§λ€ νΈμΆνλ€. μ΄ λ, λ³κ²½λλ κ°μ΄ νμ¬μ κ°κ³Ό κ°λλΌλ νΈμΆνλ€.
- willSet : νλ‘νΌν° κ°μ΄ λ³κ²½λκΈ° μ§μ μ νΈμΆ
- didSet : νλ‘νΌν° κ°μ΄ λ³κ²½λ μ§νμ νΈμΆ
willSet λ©μλμ didSet λ©μλμλ 맀κ°λ³μκ° νλμ© μλ€.
willSet λ©μλμ μ λ¬λλ μ λ¬μΈμλ νλ‘νΌν°κ° λ³κ²½λ κ°μ΄κ³ , didSet λ©μλμ μ λ¬λλ μ λ¬μΈμλ νλ‘νΌν°κ° λ³κ²½λκΈ° μ μ κ°
νλ‘νΌν° κ°μμ
class Account {
var credit: Int = 0
willSet {
print("μμ‘μ΄ \(credit)μμμ \(newValue)μμΌλ‘ λ³κ²½λ μμ μ
λλ€.")
}
didSet {
print("μμ‘μ΄ \(oldValue)μμμ \(credit)μμΌλ‘ λ³κ²½λμμ΅λλ€.")
}
}
}
let myAccount = Account()
// μμ‘μ΄ 0μμμ 1000μμΌλ‘ λ³κ²½λ μμ μ
λλ€.
myAccount.credit=1000
// μμ‘μ΄ 0μμμ 1000μμΌλ‘ λ³κ²½λμμ΅λλ€.
π‘μ μλ³μμ μ§μλ³μ
μ μ₯λ³μ : κ°μ μ μ₯νλ μν ( μ μλ³μ, μ§μλ³μ )
π νμ νλ‘νΌν°
νμ νλ‘νν° : κ°κ°μ μΈμ€ν΄μ€κ° μλ νμ μ체μ μνλ νλ‘νΌν°
- νμ μ체μ μν₯μ λ―ΈμΉλ νλ‘νΌν°
- μΈμ€ν΄μ€μ μμ± μ¬λΆμ μκ΄μμ΄ νμ νλ‘νΌν°μ κ°μ νλλ©°, κ·Έ νμ μ λͺ¨λ μΈμ€ν΄μ€κ° 곡ν΅μΌλ‘ μ¬μ©νλ κ°
- λͺ¨λ μΈμ€ν΄μ€μμ 곡μ©μΌλ‘ μ κ·Όνκ³ κ°μ λ³κ²½ν μ μλ λ³μ λ±μ μ μν λ μ μ©
1. μ μ₯ νμ νλ‘νΌν°
- λ³μ λλ μμλ‘ μ μΈ
- λ°λμ μ΄κΈ°κ° μ€μ ν΄μΌνλ©° μ§μ° μ°μ° λλ€.
- lazy ν€μλ μ¬μ© X
2. μ°μ° νμ νλ‘νΌν°
- λ³μλ‘λ§ μ μΈ
νμ νλ‘νΌν°μ μΈμ€ν΄μ€ νλ‘νΌν°
class AClass{
// μ μ₯ νμ
νλ‘νΌν°
static var typeProperty: Int = 0
// μ μ₯ μΈμ€ν΄μ€ νλ‘νΌν°
var instanceProperty: Int = 0 {
didSet{
// Self.typePropertyλ AClass.typePropertyμ κ°μ νν
Self.typeProperty = instanceProperty + 100
}
}
// μ°μ° νμ
νλ‘νΌν°
static var typeComputedProperty: Int{
get {
return typeProperty
}
set {
typeProperty = new Value
}
}
}
AClass.typeProperty = 123
let classInstance: AClass = AClass()
classInstance.instanceProperty = 100
print(AClass.typeProperty) // 200
print(AClass.typeComputedProperty) // 200
π λ©μλ
νΉμ νμ μ κ΄λ ¨λ ν¨μ
π μΈμ€ν΄μ€ λ©μλ
νΉμ νμ μ μΈμ€ν΄μ€μ μν ν¨μ
- μΈμ€ν΄μ€ λ΄λΆμ νλ‘νΌν° κ°μ λ³κ²½νκ±°λ νΉμ μ°μ° κ²°κ³Όλ₯Ό λ°ννλ λ± μΈμ€ν΄μ€μ κ΄λ ¨λ κΈ°λ₯ μ€ν
- ν¨μμ λ¬Έλ²μ΄ κ°μ§λ§, ν¨μμ λ¬λ¦¬ νΉμ νμ λ΄λΆμ ꡬννλ€. λ°λΌμ μΈμ€ν΄μ€κ° μ‘΄μ¬ν λλ§ μ¬μ©κ°λ₯
- ꡬ쑰체λ μ΄κ±°ν λ±μ κ° νμ μ΄λ―λ‘ λ©μλ μμ mutating ν€μλλ₯Ό λΆμ¬μ ν΄λΉ λ©μλκ° μΈμ€ν΄μ€ λ΄λΆμ κ°μ λ³κ²½νλ€.
π‘ self νλ‘νΌν°
- λͺ¨λ μΈμ€ν΄μ€λ μμμ μΌλ‘ μμ±λ self νλ‘νΌν°λ₯Ό κ°λλ€. μλ°μ thisμ λΉμ·νλ€.
- self νλ‘νΌν°λ μΈμ€ν΄μ€λ₯Ό λ λͺ νν μ§μΉνκ³ μΆμλ μ¬μ©νλ€.
- κ° νμ μΈμ€ν΄μ€ μ체μ κ°μ μΉνν μ μλ€.
selfνλ‘νΌν°μ μ¬μ©
class LevelClass{
var level: Int = 0
func jumpLevel(to level: Int){
print("Jump to \(level)")
self.level = level
}
}
π‘ μΈμ€ν΄μ€λ₯Ό ν¨μμ²λΌ νΈμΆνλλ‘ νλ λ©μλ
callAsFunction μ΄λΌλ μ΄λ¦μ λ©μλλ₯Ό ꡬννλ©΄ λλ€.
맀κ°λ³μμ λ°ν νμ λ§ λ€λ₯΄λ€λ©΄ κ°μμ μ ν μμ΄ μνλ λ§νΌ λ§λ€ μ μκ³ , mutating, throws, rethrowsλ ν¨κ» μ¬μ© κ°λ₯
π νμ λ©μλ
νμ μ체μ νΈμΆμ΄ κ°λ₯ν λ©μλ ( νν κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μμ μ§μΉνλ ν΄λμ€ λ©μλμ μ μ¬ )
- static ν€μλλ₯Ό μ¬μ©νλ€.
- ν΄λμ€μ νμ λ©μλλ static ν€μλμ class ν€μλλ₯Ό μ¬μ©ν μ μλλ°, staticμΌλ‘ μ μνλ©΄ μμ ν λ©μλ μ¬μ μκ° λΆκ°λ₯νκ³ classλ‘ μ μνλ©΄ μμ ν λ©μλ μ¬μ μκ° κ°λ₯νλ€.
ν΄λμ€μ νμ λ©μλ
class AClass{
static func staticTypeMethod() {
print("AClass staticTypeMethod")
}
class func classTypeMethod() {
print("AClass classTypeMethod")
}
}
class BClass : AClass {
/*
// μ€λ₯ λ°μ! μ¬μ μ λΆκ°!
override static func staticTypeMethod(){
}
*/
override class func classTypeMethod() {
print("BClass class Method")
}
}
AClass.staticTypeMethod() // AClass staticTypeMethod
AClass.classTypeMethod() // AClass classTypeMethod
BClass.classTypeMethod() // BClass classTypeMethod
μΈμ€ν΄μ€ λ©μλμμλ selfκ° μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν¨λ€λ©΄
νμ λ©μλμ selfλ νμ μ κ°λ¦¬ν¨λ€.
'π iOS > κΈ°μ΄λ¬Έλ²' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift κΈ°μ΄] μ κ·Όμ μ΄ (0) | 2023.01.18 |
---|---|
[Swift κΈ°μ΄] μΈμ€ν΄μ€ μμ± λ° μλ©Έ (0) | 2023.01.15 |
[Swift κΈ°μ΄] ꡬ쑰체μ ν΄λμ€ (0) | 2023.01.05 |
[Swift κΈ°μ΄] μ΅μ λ (0) | 2023.01.04 |
[Swift κΈ°μ΄] ν¨μ (0) | 2023.01.01 |