[Swift 기초] 제너릭
2022. 3. 11. 16:59ㆍSwift 기초 정리
728x90
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎
1. 제너릭
func 함수명<타입형1, 타입형2>(_ 매개변수1: inout 타입형1, _ 매개변수2: inout 타입형2){
/*함수 구현*/
}
- 제네릭(generic): 어떤 호환 데이터 타입과도 동작할 수 있는 함수를 만들 수 있다.
- 함수와 메서드를 선언할 때는 전달할 인자의 타입을 명시적으로 선언하면
- → 같은 실행 코드지만 서로 다른 데이터 타입을 사용해야 할 때는 반복 작성이 불가피한 경우가 있다.
- ⇒ 코드의 반복/ 중복 문제를 해결하고, 표현성을 향상해 준다.
- 제너릭 타입은 자료형에 무관한 유연하면서도 재사용이 가능한 코딩을 할 수 있다.
- Swift의 강력한 기능이며 Swift의 표준 라이브러리는 제너릭으로 구현되어 있다.
- ex. Array, Dictionary
- C++에서는 함수 템플릿이라고 함. template<class T>와 같이 선언하여 사용
1-1. 제너릭 필요성
- 하나의 함수를 통해서 모든 종류의 자료형에 대한 알고리즘을 만들 수 있다.
- inout 매개변수 중에서 함수 내에서 변경된 매개변수가 함수 호출이 종료된 시점에서도 계속 유지되기를 원한다면 inout 키워드 사용
//swap 함수의 값이 Int, Double, String과 같이 다양하다. func swapTwoInts(a: inout Int, b: inout Int){ let temporaryA = a a = b b = temporaryA } func swapTwoDoubles(a: inout Double, b: inout Double){ let temporaryA = a a = b b = temporaryA } func swapTwoStrings(a: inout String, b: inout String){ let temporaryA = a a = b b = temporaryA } var genericA = 100, genericB = 200 var genericDA = 100.0, genericDB = 200.0 var genericSA = "A", genericSB = "B" swapTwoInts(a: &genericA, b: &genericB) print("\(genericA) \(genericB)") //200 100 print("\(genericDA) \(genericDB)") //200.0 100.0 swapTwoStrings(a: &genericSA, b: &genericSB) print("\(genericSA) \(genericSB)") //B A
-
//제너릭을 사용하면 하나의 코드로 모두 사용할 수 있다. //매개변수는 다르지만 함수로직은 동일함 → 제너릭스를 이용하면 함수의 로직에 집중할 수 있다. func swapTwoValues<T>(a: inout T, b: inout T){ let temporaryA = a a = b b = temporaryA } swapTwoValues(a: &genericA, b: &genericB) print("\\(genericA) \\(genericB)") //100 200 swapTwoValues(a: &genericDA, b: &genericDB) print("\\(genericDA) \\(genericDB)") //100.0 200.0 swapTwoValues(a: &genericSA, b: &genericSB) print("\\(genericSA) \\(genericSB)") //A B
1-2. 제너릭 리턴값
- 타입형은 실행 시에 결정된다.
-
func arrRepeat<ItemType>(item: ItemType, times: Int) -> [ItemType]{ var result = [ItemType]() for i in 0..<times{ result.append(item) } return result } print(arrRepeat(item: "knock", times: 5)) //["knock", "knock", "knock", "knock", "knock"] print(arrRepeat(item: 1, times: 5)) //[1, 1, 1, 1, 1]
참고하였습니다. 감사합니다.
https://www.inflearn.com/course/창원대학교-박동규-교수의-swift-기초-강좌/lecture/1893?tab=curriculum
23.07.11 수정) Swift 쉽게, 더 쉽게
728x90
'Swift 기초 정리' 카테고리의 다른 글
[Swift 기초] 사용자정의타입 (0) | 2022.03.18 |
---|---|
[Swift 기초] 클로저 Closure (0) | 2022.03.14 |
[Swift 기초] 함수 (0) | 2022.03.11 |
[Swift 기초] 제어구문-반복문 (0) | 2022.03.07 |
[Swift 기초] 제어구문 - 조건문(흐름제어) (0) | 2022.03.07 |