스위프트 – 일반 01

01 정의

제네릭은 동일한 작업을 수행하는 함수의 유형을 변경하려는 경우 모든 유형에 맞는 불필요한 함수 설계를 줄일 수 있습니다.

코드를 보면 쉽게 알 수 있습니다.

var someNum1 = (0, 1, 2, 3, 4)

var someDoubleNum1 = (0.1, 0.2, 0.3, 0.4)

var someString1 = ("Swift", "Developer", "Apple")


func someGenerics(array: (Int)) {
    for int in array {
        print(int)
    }
}


func someGenerics1(array: (Double)) {
    for double in array {
        print(double)
    }
}


func someGenerics2(array: (String)) {
    for string in array {
        print(string)
    }
}

someGenerics(array: someNum1)  // 0, 1, 2, 3, 4
someGenerics1(array: someDoubleNum1) // 0.1, 0.2, 0.3, 0.4
someGenerics2(array: someString1) // "Swift", "Developer", "Apple"

위의 코드는 동일한 작업을 수행하지만 유형이 모두 다릅니다.

이 경우 수고를 덜기 위해 포괄적인 기능을 설계하고 중복되는 기능을 하나로 통합하는 것이 가능하다.

02 일반적인 기능적 디자인

1) 타입 파라미터 지정

2) 타입 매개변수를 이용한 함수 설계

기능 함수 이름(매개변수 ) {코드}

이렇게 하면 일반 함수를 쉽게 설계할 수 있습니다.

즉, 한번의 구현으로 모든 타입을 커버할 수 있는 기능으로 유지보수성과 재사용성을 고려한 효율적인 설계가 가능합니다.

func someGenericsFunc<T>(a: inout (T)) {
                                  //배열이 아니라면 그냥 T
    for element in a {
        print(element)
    }
}

someGenericsFunc(a: &someNum1)
someGenericsFunc(a: &someDoubleNum1)
someGenericsFunc(a: &someString1)


//타입 파라미터의 이름은 아무거나 해도 상관없다
func someGenericsFunc<TOT>(a: inout (TOT)) {
    for element in a {
        print(element)
    }
}

someGenericsFunc(a: &someNum1) // 0, 1, 2, 3, 4

someGenericsFunc(a: &someDoubleNum1) // 0.1, 0.2, 0.3, 0.4

someGenericsFunc(a: &someString1) // "Swift", "Developer", "Apple"