ν‹°μŠ€ν† λ¦¬ λ·°

iOS

Swift) self 와 Self

hyun99999 2022. 2. 23. 17:53
728x90
λ°˜μ‘ν˜•

πŸ„β€β™‚οΈ self: νƒ€μž… μΈμŠ€ν„΄μŠ€λ₯Ό 의미

μΈμŠ€ν„΄μŠ€ 자체 μ ‘κ·Ό μ‹œ μ‚¬μš©λ˜λŠ” 참쑰값이닀.

self λŠ” ν•΄λ‹Ή νƒ€μž…μ΄ κ°’ νƒ€μž…μΌ κ²½μš°μ—λŠ” λ˜‘κ°™μ΄ κ°’ νƒ€μž…μ²˜λŸΌ λ™μž‘ν•˜κ³ , μ°Έμ‘° νƒ€μž…μΌ κ²½μš°λŠ” ν¬μΈν„°λ‘œμ¨ νž™ μ˜μ—­μ— μ‘΄μž¬ν•˜λŠ” 클래슀 μΈμŠ€ν„΄μŠ€μ˜ μ£Όμ†Œλ₯Ό κ°€μ§€κ²Œ λœλ‹€.

  • κ°’ νƒ€μž…μ—μ„œλŠ” stack μ˜μ—­μ— μ‘΄μž¬ν•˜λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό κ°€λ¦¬ν‚€λŠ” ν˜•νƒœ.
  • μ°Έμ‘° νƒ€μž…μ—μ„œλŠ” heap μ˜μ—­μ— μ‘΄μž¬ν•˜λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό κ°€λ¦¬ν‚€λŠ” ν˜•νƒœ.

κ°’ νƒ€μž…μ˜ self κ°€ 포인터가 μ•„λ‹Œκ²ƒμ€ μ•„λ‹ˆλ‹€. λ‹€λ§Œ κ°’ νƒ€μž… β€˜μ²˜λŸΌβ€™ λ™μž‘ν•  λΏμž…λ‹ˆλ‹€. λ§Œμ•½, self κ°€ κ°’ νƒ€μž…μ΄μ˜€λ‹€λ©΄ μ°Έμ‘°ν•  λ•Œ λ§ˆλ‹€ 볡사가 μΌμ–΄λ‚˜μ„œ μ œλŒ€λ‘œ 된 변경도 μ•ˆλœλ‹€.

μ“°μ΄λŠ” μš©λ„ 2가지

1️⃣
μΈμŠ€ν„΄μŠ€ 내뢀에 같은 μ΄λ¦„μœΌλ‘œ μ„ μ–Έλœ λ³€μˆ˜λ“€μ„ μ’€ 더 λͺ…ν™•νžˆ λͺ…μ‹œ κ°€λŠ₯ν•˜λ‹€.

class A {
    var name: String
    init(name: String) {
// βœ… μ΄λ‹ˆμ…œλΌμ΄μ € 내뢀에 μžˆλŠ” name 은 μ§€μ—­λ³€μˆ˜ > λ§€κ°œλ³€μˆ˜ > μΈμŠ€ν„΄μŠ€ ν”„λ‘œνΌν‹° μˆœμ„œλ‘œ 무엇을 μ§€μΉ­ν•œλŠμ§€ μ°ΎμŠ΅λ‹ˆλ‹€.
// βœ… κ·Έλž˜μ„œ name = name 의 경우 λ‘κ°œ λ‹€ λ§€κ°œλ³€μˆ˜λ₯Ό μ§€μΉ­ν•˜κ²Œ λ©λ‹ˆλ‹€. μ΄λ•Œ, μΈμŠ€ν„΄μŠ€ ν”„λ‘œνΌν‹°λ‘œ μ§€μΉ­ν•˜κΈ° μœ„ν•΄μ„œ self λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
        self.name = name
    }
}

2️⃣
κ°’ νƒ€μž… μΈμŠ€ν„΄μŠ€ 자체의 값을 μΉ˜ν™˜ν•˜κΈ° μœ„ν•΄μ„œ μ‚¬μš©λœλ‹€.

struct A {
    var number: Int = 0
    mutating func reset() {
// βœ… ν΄λž˜μŠ€λŠ” μ°Έμ‘° νƒ€μž…μ΄λΌ self ν”„λ‘œνΌν‹°μ— λ‹€λ₯Έ μ°Έμ‘°λ₯Ό ν• λ‹Ήν•  수 μ—†μ§€λ§Œ κ΅¬μ‘°μ²΄λ‚˜ μ—΄κ±°ν˜•μ—μ„œλŠ” self λ₯Ό μ‚¬μš©ν•΄μ„œ μžμ‹ μœΌλ‘œ ꡐ체할 수 μžˆλ‹€.
        self = A()
    }
}

πŸ„β€β™‚οΈ Self: νƒ€μž… κ·Έ 자체λ₯Ό 의미

λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•˜λŠ” Self λŠ” λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•˜λŠ” 것에 μ•Œ 수 μžˆλ“―μ΄ νƒ€μž…μ„ μ˜λ―Έν•œλ‹€.

λ¬Έλ§₯에 따라 μ˜λ―Έκ°€ λ‹€λ₯Έ Self

  • Protocol λ‚΄λΆ€ : ν•΄λ‹Ή ν”„λ‘œν† μ½œμ„ μ±„νƒν•œ νƒ€μž…μ„ 의미. 이 κ²½μš°λŠ” ν”„λ‘œν† μ½œ μžμ‹ μ΄ μ•„λ‹ˆλΌ ν”„λ‘œν† μ½œμ„ μ±„νƒν•œ νƒ€μž…μ„ λœ»ν•˜λŠ” 것이닀.
  • 클래슀, ꡬ쑰체, μ—΄κ±°ν˜• λ“± : ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€μ˜ νƒ€μž… 자체λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜(λ©”μ„œλ“œ 이름과 λ§€κ°œλ³€μˆ˜ 리슀트)μ—μ„œ λ¦¬ν„΄κ°’μœΌλ‘œλ§Œ μ‚¬μš©μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€. λ©”μ„œλ“œ λͺΈμ²΄μ—μ„œλŠ” μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
class SuperClass {
    func someFunc() -> Self {
        return self
    }
}

class SubClass: SuperClass {}

let superClass = SuperClass()
superClass.someFunc()
// SuperClass

let subClass = SubClass()
subClass.someFunc()
// SubClass

정리

μ•„λž˜μ˜ μ½”λ“œλ₯Ό ν†΅ν•΄μ„œ 정리가 κ°€λŠ₯ν• κ±°κ°™μ•„μš”!

func someFunc() -> Self {
    return self
}

// Self 와 self μžλ¦¬μ— 어떀것이 λ“€μ–΄κ°€λŠ”μ§€ λΉ„κ΅ν•΄λ³΄μž.
func sumFunc(a: Int, b: Int) -> Int {
    return a + b
}

Self λŠ” νƒ€μž…μ„ μ˜λ―Έν•˜κΈ° λ•Œλ¬Έμ— 리턴 νƒ€μž…μœΌλ‘œμ¨ μ‚¬μš©ν•  수 μžˆμ–΄μš”!

self λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό μ˜λ―Έν•˜κΈ° λ•Œλ¬Έμ— 리턴 νƒ€μž…μ— λ§žλŠ” 리턴 μΈμŠ€ν„΄μŠ€λ‘œμ¨ μ‚¬μš©ν•  수 μžˆμ–΄μš”!

β“λΈ”λ‘œκ·Έμ—μ„œ μ΄λ ‡κ²Œ ν‘œν˜„ν•˜λŠ”λ° νƒ€μž…/μΈμŠ€ν„΄μŠ€ ν”„λ‘œνΌν‹°, νƒ€μž…/μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ?

Self λŠ” νƒ€μž… ν”„λ‘œνΌν‹°μ™€ νƒ€μž… λ©”μ„œλ“œλ₯Ό 가리킬 λ•Œ μ‚¬μš©λ˜κ³ ,
self λŠ” μΈμŠ€ν„΄μŠ€ ν”„λ‘œνΌν‹°μ™€ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλ₯Ό 가리킬 λ•Œ μ‚¬μš©λœλ‹€!
  • μΈμŠ€ν„΄μŠ€ ν”„λ‘œνΌν‹°λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•œ ν›„ ν˜ΈμΆœν•  수 μžˆλŠ” ν”„λ‘œνΌν‹°μ—μš”! μš°λ¦¬κ°€ κ°€μž₯ 많이 μ‚¬μš©ν•˜λŠ” let, var 둜 μ„ μ–Έλ˜λŠ” ν”„λ‘œνΌν‹°λ“€μ΄ 있죠.
  • νƒ€μž… ν”„λ‘œνΌν‹°λŠ” ν”„λ‘œνΌν‹°λ₯Ό νƒ€μž… μžμ²΄μ— μ—°κ²°ν•  수 μžˆλŠ”λ° 그것이 λ°”λ‘œ νƒ€μž… ν”„λ‘œνΌν‹°μ—μš”! static ν‚€μ›Œλ“œλ₯Ό μ•žμ— λΆ™μ—¬μ€˜μ•Όν•΄μš”! λ˜ν•œ, 무쑰건 기본값을 μ€˜μ•Όν•©λ‹ˆλ‹€.

class λΌλŠ” ν‚€μ›Œλ“œλ₯Ό μ•žμ—λΆ™μ—¬μ•Όν•  λ•Œκ°€ μžˆλŠ”λ°, μ•„λž˜μ™€ 같은 λ•Œμ— μ‚¬μš©λ˜μš”!

"클래슀 νƒ€μž…μ— λŒ€ν•œ μ—°μ‚° νƒ€μž… ν”„λ‘œνΌν‹°(Computed type property)의 경우, class ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλΈŒν΄λž˜μŠ€κ°€ 슈퍼클래슀의 κ΅¬ν˜„μ„ μž¬μ •μ˜(override)ν•  수 μžˆμŠ΅λ‹ˆλ‹€β€

(μ’€ 더 μžμ„Έν•œ μ„€λͺ…을 μ›ν•˜μ‹ λ‹€λ©΄ μ•„λž˜μ˜ 좜처λ₯Ό μ°Έκ³ ν•˜μ…”λ„ μ’‹κ² λ„€μš”!)

Swift ) Properties - Type Properties

  • μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ μ—­μ‹œ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•œ ν›„ ν˜ΈμΆœν•  수 μžˆλŠ” λ©”μ„œλ“œμ—μš”.
  • νƒ€μž… λ©”μ„œλ“œ μ—­μ‹œ νƒ€μž… μžμ²΄μ— μ—°κ²°ν•΄μ„œ ν˜ΈμΆœλ˜λŠ” λ©”μ„œλ“œμ—μš”. λ©”μ„œλ“œ μ•žμ— static , class ν‚€μ›Œλ“œλ₯Ό λΆ™μ—¬μ„œ μ‚¬μš©ν•©λ‹ˆλ‹€.
static: μ„œλΈŒν΄λž˜μŠ€μ—μ„œ μ˜€λ²„λΌμ΄λ“œλ₯Ό ν•  수 μ—†λ‹€.
class: μ„œλΈŒν΄λž˜μŠ€μ—μ„œ μ˜€λ²„λΌμ΄λ“œκ°€ κ°€λŠ₯ν•˜λ‹€.

κ·Έλž˜μ„œ 상속이 κ°€λŠ₯ν•œ 클래슀λ₯Ό μ œμ™Έν•˜κ³  κ΅¬μ‘°μ²΄λ‚˜ μ—΄κ±°ν˜•μ—μ„œλŠ” 상속이 λΆˆκ°€λŠ₯ν•˜μ—¬ calss λ©”μ„œλ“œλ₯Ό μ„ μ–Έν•  수 μ—†μ–΄μš”!

(μ’€ 더 μžμ„Έν•œ μ„€λͺ…을 μ›ν•˜μ‹ λ‹€λ©΄ μ•„λž˜μ˜ 좜처λ₯Ό μ°Έκ³ ν•˜μ…”λ„ μ’‹κ² λ„€μš”!)

[iOS / Swift] Swift 문법을 μ•Œμ•„λ³΄μž! - 20편 : μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œμ™€ νƒ€μž… λ©”μ†Œλ“œ

κ·Έλ ‡λ‹€λ©΄ νƒ€μž… ν”„λ‘œνΌν‹°μ™€ νƒ€μž… λ©”μ„œλ“œλŠ” μ–΄λ””μ„œ ν™œμš©λ κΉŒμš”? 곡톡적인 값을 μ •μ˜ν•˜λŠ”λ° μœ μš©ν•˜κ²Œ 쓰이고, λŒ€ν‘œμ μœΌλ‘œ 싱글톀 νŒ¨ν„΄ 에 μ‚¬μš©λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€!

좜처

[iOS - swift] Self vs self (λŒ€λ¬Έμž Self와 μ†Œλ¬Έμž self)](https://ios-development.tistory.com/600)

5뢄상식- Self vs self

[Swift] Self와 self의 차이

Swift ) Properties - Type Properties

728x90
λ°˜μ‘ν˜•
λŒ“κΈ€
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
κΈ€ 보관함
Β«   2024/11   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
링크
Total
Today
Yesterday