[swift] 제네릭 사용하기

제네릭은 스위프트에서 코드를 유연하게 작성하고 재사용하기 위한 강력한 도구입니다. 제네릭을 사용하면 함수, 메서드, 클래스, 열거형 등을 제네릭한 형태로 작성하여 다양한 데이터 타입에 대해 동일한 동작을 수행할 수 있습니다.

제네릭 함수 작성하기

제네릭 함수는 꺾쇠 괄호(< >) 안에 임의의 이름을 사용하여 다양한 타입의 매개변수를 받을 수 있습니다. 함수가 호출될 때 실제 타입이 결정되며, 컴파일러가 이를 분석하여 코드를 생성합니다.

다음은 제네릭 함수의 예시입니다.

func swap<T>(a: inout T, b: inout T) {
    let temp = a
    a = b
    b = temp
}

var x = 5
var y = 10
swap(a: &x, b: &y)
print("x: \(x), y: \(y)")  // 결과: x: 10, y: 5

위의 코드에서 T는 임의의 타입을 나타내며, 함수가 호출될 때 실제 타입으로 치환됩니다.

제네릭 클래스와 구조체 작성하기

제네릭을 활용하여 클래스나 구조체를 작성할 수도 있습니다. 이를 통해 여러 타입에 대해 동작하는 유연한 타입을 생성할 수 있습니다.

다음은 제네릭 클래스의 예시입니다.

class Queue<T> {
    var items = [T]()

    func enqueue(item: T) {
        items.append(item)
    }

    func dequeue() -> T? {
        if !items.isEmpty {
            return items.removeFirst()
        }
        return nil
    }
}

let queue = Queue<Int>()
queue.enqueue(item: 5)
queue.enqueue(item: 10)
print(queue.dequeue())  // 결과: Optional(5)
print(queue.dequeue())  // 결과: Optional(10)

위의 코드는 Queue 클래스를 제네릭하게 작성하여 여러 타입의 데이터를 enqueue 및 dequeue할 수 있도록 합니다.

제네릭은 스위프트에서 강력한 도구로, 코드 재사용성과 유연성을 높일 수 있는데 큰 기여를 합니다.

더 자세한 내용은 스위프트 공식 문서를 참고하세요.