iOS/Swift

Swift에서타입에 상관없이 코드를 작성할 수 없을까? (feat. Swift Generics)

Dev.Andy 2024. 1. 2. 20:47

목차

    I. 머리말

    들어가기 전에

    개발자 앤디는 두 요소를 바꾸는 함수를 작성하기 위해 아래와 같이 코드를 작성하였다.

    코드

    func swapTwoStrings(_ a: inout String, _ b: inout String) {
        let temporaryA = a
        a = b
        b = temporaryA
    }
    
    
    func swapTwoDoubles(_ a: inout Double, _ b: inout Double) {
        let temporaryA = a
        a = b
        b = temporaryA
    }

    하지만, 앤디는 이렇게 작성하면서 의문점이 들었다.

     

    어차피 두 요소를 바꾸는 함수인데, 하나의 함수로 정의할 수는 없을까?

    함수의 중복

    동일한 기능을 수행하는 여러 개의 함수

    앤디는 타입에 상관없이 함수를 하나로 묶고 싶다.
    하지만, 스위프트는 타입이 안전한(type-safe) 언어이기에 서로 다른 타입을 할당할 수 없다.
    만약에 그렇게 진행한다면 컴파일 에러 발생이 일어날 것이다.

    II. 제네릭(Generics)

    1. 개념

    정의

    Write code that works for multiple types and specify requirements for those types.
    여러 타입(multiple types)에서 동작하는 코드를 작성하고, 그러한 타입에 대한 요구 사항(requirements)을 구체화한다.

    Apple Developer Documentation

    목적

    1. 유연하고 재사용 가능한 함수와 타입의 작성이 가능하다.
    2. 제네릭을 통해 타입의 안정성을 지키면서, 추상화를 할 수 있다.

    조건

    단, 제네릭은 정의한 요구 사항(requirements)에 따라야 한다.

    2. 실습

    2-1. 타입의 추상화 ⭐️

    <> 기호가 플레이스홀더(placeholder) 역할을 하여, 타입을 추상화 할 수 있다.

    Generic Functions

    func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
        let temporaryA = a
        a = b
        b = temporaryA
    }