Generic (제네릭)

Updated:

🔷 Generic (제네릭)

  • 어떠한 자료형이든 받을 수 있다는 형태를 가리킵니다

struct Friend {
	var name: String
}

struct Coder {
	var name: String
}

// Generic 은 모든 type 을 담을 수 있다는 뜻 주로 T 라고 쓰임
struct MyArray<T> {
	// 제네릭을 담은 빈 배열
	var elements: [T] = [T]()

	// 생성자 메소드 앞에 _ 언더바 넣음으로써 매개 변수 이름 생략
	init(_ elements: [T]) {
		self.elements = elements
	}
}

var mySomeArray = MyArray([1, 2, 3])
print("mySomeArray: \(mySomeArray)")

var myStringArray = MyArray(["가", "나", "다"])
print("myStringArray: \(myStringArray)")

let friend_01 = Friend(name: "Jacob")
let friend_02 = Friend(name: "Emma")
let friend_03 = Friend(name: "John")

var myFriendArray = MyArray([friend_01, friend_02, friend_03])
print("myFriendArray: \(myFriendArray)")

🔶 stride 제네릭 함수

stride Generic function - https://developer.apple.com/documentation/swift/1641347-stride

stride generic 함수를 통해 범위 안에서 반복 처리가 가능합니다 from: 시작, to: 끝, by: 만큼

// stride 를 통해 범위안에 반복 처리가 가능합니다
// from 시작, to 끝, by 만큼
for countdown in stride(from: 4, to: 0, by: -1) {
	print("\(countdown)...")
}
/*
 4...
 3...
 2...
 1...
 */

// 배열 익스텐션
extension Array {
// 배열을 쪼개는 메소드
func chunks(_ chunkSize: Int) -> [[Element]] {
	// stride 를 통해 범위는 0에서 배열의 총 갯수
	// 나누는 크기 만큼
	return stride(from: 0, to: self.count, by: chunkSize).map {
		// 나누는 크기 만큼의 배열 생성
		Array(self[$0..<Swift.min($0 + chunkSize, self.count)])
	}
}
}

let numbers = Array(1...10)
let result = numbers.chunks(3)
print(result) // [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]

Reference

The Swift Language Guide: 제네릭(generic) - https://jusung.gitbook.io/the-swift-language-guide/language-guide/22-generics

개발하는 정대리 스위프트 기초 문법 - 9일차 / 제네릭 - https://www.youtube.com/watch?v=8nPQKGrpbmY&list=PLgOlaPUIbynoqbQw_erl3L2w7vfOTCtFD&index=9

Categories:

Updated:

Leave a comment