티스토리 뷰

스위프트

[Swift] self는 무엇인가?

강철곰탱이 2023. 10. 29. 02:55

swift로 개발을 하다보면 어떤 코드에서는 self를 쓰지 않아도 되는데 어떤 코드에서는 사용하지 않아 오류가 난다.

이런 경험으로 self에 대해 제대로 알아보고자 한다.

 


 

self란?

 

'self'는 현재 인스턴스를 나타내는 키워드이다.

swift에서 인스턴스 내부에서 사용되며, 주로 프로퍼티나 인스턴스 변수를 구분하는데 사용된다.

이를 통해 swift는 프로퍼티와 인스턴스 변수의 이름이 같을 때 구분하고, 어떤 것을 참조해야 하는지 알 수 있다.

 

 

 

self 사용 사례

 

1️⃣ 프로퍼티와 인스턴스 변수의 이름이 같을 때

 

swift 클래스나 구조체 내에서 프로퍼티와 인스턴스 변수의 이름이 동일한 경우, 'self'를 사용해 구분한다.

이렇게 하면 swift는 현재 인스턴스의 프로퍼티임을 인식하고, 명시적으로 해당 프로퍼티를 참조할 수 있다.

 

class Person {
    var name: String // 프로퍼티

    init(name: String) {
        self.name = name // self를 사용하여 프로퍼티와 인스턴스 변수를 구분
    }
}

 

'init' 메서드의 'name' 매개변수와 클래스의 'name' 프로퍼티가 이름이 같을 때, 'self'를 사용해 두 개를 구분한다.

'self.name'은 'name' 프로퍼티를 가리킨다. 

 

 

 

2️⃣ 메서드 내에서 프로퍼티 접근

 

클래스나 구조체의 메서드 내에서 프로퍼티에 접근할 때도 'self'를 사용한다.

이렇게 하면 현재 인스턴스의 프로퍼티를 명확하게 참조할 수 있다.

 

class Counter {
    var count = 0

    func increment() {
        self.count += 1 // self를 사용하여 프로퍼티 접근
    }
}

 

'self.count'는 'increment' 메서드 내에서 'Counter' 인스턴스의 'count' 프로퍼티를 증가시킨다. 

 

 

 

3️⃣ 클로저에서 외부 변수와 구분

 

클로저 내에서 'self'를 사용할 때도 주로 프로퍼티와 인스턴스 변수를 구분하기 위해 사용된다.

클로저에서 프로퍼티에 접근하려면 'self'를 사용해야 한다.

 

class MyCounter {
    var count = 0

    init() {
        // 클로저를 이용한 타이머 예시
        let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { [self] timer in
            // self를 사용하여 클래스의 프로퍼티에 접근
            self.count += 1
            print("Count is now \(self.count)")
            
            if self.count >= 5 {
                timer.invalidate()
                print("Timer stopped.")
            }
        }
    }
}

let counter = MyCounter()

 

위의 코드에서 타이머는 매 초마다 클로저를 실행한다. 클로저 내에서 'self'를 사용해 'count' 프로퍼티에 접근하고, 'count'를 1씩 증가시킨다. 'count'가 5 이상이 되면 타이머를 중지시킨다.

 

 

 

정리

 

self는 프로퍼티와 인스턴스 변수를 구분하고, 현재 인스턴스의 멤버에 접근할 때 사용된다.

일반적으로 swift에서는 일반적으로 self를 생략할 수 있고, 컴파일러가 자동으로 적절한 범위에서 self를 유추한다.

 

인스턴스 메서드 내부에서 프로퍼티 또는 다른 메서드에 접근할 때, 컴파일러는 자동으로 self를 유추한다.

class MyClass {
    var value = 42

    func printValue() {
        print(value) // self를 사용하지 않아도 됨
    }
}

 

self를 명시적으로 사용하면 코드의 가독성을 높이고 의도를 명확히하는 데 도움이 된다.

'스위프트' 카테고리의 다른 글

[Swift] - Alamofire 사용법  (0) 2023.11.20
[Swift] MVC 패턴  (0) 2023.10.31
[Swift] CocoaPod 설치와 사용법  (0) 2023.10.30
[Swift] .self는 무엇인가?  (0) 2023.10.29
[Swift] .DS_Store 파일  (0) 2023.10.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
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
글 보관함