본문 바로가기

개발

Swfit 제너릭 (Generics)

728x90

Swift 제네릭 (Swift Generics)

Swift 제네릭은 코드를 더욱 유연하고 재사용 가능하게 만드는 강력한 기능입니다. 함수, 구조체, 클래스, 열거형 등을 다양한 데이터 유형으로 작동하도록 정의할 수 있으며, 이를 통해 코드 중복을 줄이고 코드의 유지 관리를 용이하게 합니다.

1. 기본 개념

  • 플레이스홀더 유형: 제네릭은 T, U와 같은 플레이스홀더 유형을 사용하여 다양한 데이터 유형을 나타냅니다. 마치 템플릿처럼 코드를 정의할 수 있다고 생각하면 됩니다.
  • 유형 추론: 컴파일러는 함수 호출 시 실제로 사용되는 데이터 유형을 자동으로 추론하여 코드를 실행합니다.
  • 유형 안전: 제네릭은 컴파일 시점에 유형 오류를 검사하여 코드의 안전성을 높입니다.
  • 재사용성: 동일한 로직을 다양한 데이터 유형에 적용할 수 있어 코드 중복을 줄이고 재사용성을 높일 수 있습니다.

2. 구조

func swapValues<T>(a: inout T, b: inout T) {

    let temp = a

    a = b

    b = temp

}

 

  • swapValues<T>: 함수 이름이며, T은 플레이스홀더 유형을 나타냅니다.
  • <T>: 제네릭 시그니처이며, 함수가 어떤 플레이스홀더 유형을 사용하는지 명시합니다.
  • a: inout T, b: inout T: 함수 매개변수이며, 플레이스홀더 유형 T으로 지정됩니다.
  • let temp = a: a의 값을 임시 변수 temp에 저장합니다.
  • a = b: a의 값을 b의 값으로 변경합니다.
  • b = temp: b의 값을 temp에 저장된 값으로 변경합니다.

3. 활용 사례

  • 컬렉션 처리: Array, Dictionary, Set과 같은 컬렉션을 처리하는 함수를 제네릭으로 작성하여 다양한 데이터 유형의 요소를 처리할 수 있습니다.
  • 데이터 검증: 데이터 유형에 맞는 검증 로직을 제네릭 함수로 작성하여 코드를 재사용할 수 있습니다.
  • 알고리즘: 검색, 정렬과 같은 알고리즘을 제네릭으로 작성하여 다양한 데이터 유형에 적용할 수 있습니다.
  • API 디자인: 코드를 소비하는 개발자가 쉽게 사용할 수 있도록 API를 제네릭으로 디자인할 수 있습니다.

4. 장점

  • 코드 중복 줄이기: 동일한 로직을 여러 번 작성하지 않고도 다양한 데이터 유형에 적용할 수 있어 코드 중복을 줄일 수 있습니다.
  • 유지 관리 용이: 코드를 변경할 때 영향 범위가 줄어들어 코드 유지 관리가 더욱 용이해집니다.
  • 코드 안전성 향상: 컴파일 시점에 유형 오류를 검사하여 코드의 안전성을 높일 수 있습니다.
  • 코드 가독성 향상: 코드의 의도를 명확하게 표현하여 코드 가독성을 높일 수 있습니다.

5. 참고 자료

 

주의: 제네릭을 사용하기 전에 기본 개념을 이해하고, 적절하게 사용하는 것이 중요합니다. 또한, 복잡한 제네릭 코드는 오히려 코드 가독성을 저하시킬 있으므로 주의해서 사용해야 합니다.