[swift] 타입 내부에서의 Self 사용 방법

Swift에서는 Self 키워드를 사용하여 타입 내부에서 현재 타입 자체를 참조할 수 있습니다. Self는 현재 타입을 나타내는데, 주로 프로토콜과 함께 사용됩니다.

Self 키워드 사용 예시

protocol Vehicle {
    static func displayClassName()
}

extension Vehicle {
    static func displayClassName() {
        print("Class name: \(Self.self)")
    }
}

class Car: Vehicle {
    class func showClassName() {
        displayClassName()
    }
}

Car.showClassName() // 출력: Class name: Car

위 예시에서는 Self를 사용하여 프로토콜 내에서 현재 타입을 참조하고, 상속받은 클래스에서 해당 프로토콜 메서드를 호출할 때 정적 디스패치(static dispatch)를 보여줍니다.

Self는 타입 내부에서 현재 타입을 가리킬 때 주로 사용되며, 이를 활용하여 코드를 더 유연하게 작성할 수 있습니다.

Self 키워드와 제네릭(Generic) 타입

Self 키워드는 제네릭 타입 내에서도 유용하게 사용될 수 있습니다. 제네릭 타입을 사용하는 경우, Self를 통해 현재 실제 타입을 참조할 수 있습니다.

class Stack<T> {
    var elements = [T]()

    func push(_ element: T) {
        elements.append(element)
    }

    func pop() -> T? {
        return elements.popLast()
    }

    func displayType() {
        print("Stack type: \(Self.self)")
    }
}

let intStack = Stack<Int>()
intStack.push(5)
intStack.displayType() // 출력: Stack type: Stack<Int>

위 예시에서는 Self를 사용하여 제네릭 타입 내에서 현재 실제 타입을 출력하는 방법을 보여줍니다.

Swift에서 Self 키워드는 타입 내부에서 현재 타입을 참조하고 싶을 때 유용하게 활용될 수 있으며, 프로토콜과 제네릭 타입과 같이 다양한 상황에서 유연한 활용이 가능합니다.

자세한 내용은 공식 Swift 문서를 참고하십시오.