쉽게 말하면 모든 타입을 가질 수 있도록 설정하는 것.
구조체를 한번 만들어서 살펴보자
struct myArray<someElement>{
var elements = [someElement]()
//생성자
init(_ elements: [someElement]){
self.elements = elements
}
}
생성자는 구조체라 만들지 않아도 되지만 표현을 위해서 만들었다.
항상 _ (언더바)를 이용하면 후에 출력할때 이름을 쓰지 않아도 된다는 것을 잊지말자!
제네릭 선언은 <> 안에 이름을 입력하면 된다. 지금은 someElement라고 했지만 보통은 T라고 정한다. 아마 Type? 이라는 뜻?
struct Friend {
var name: String
}
var mySomeArray = myArray([1,2,3])
print("mySomeArray : \(mySomeArray)")
var myStringArray = myArray(["문","자","열"])
print("myStringArray: \(myStringArray)")
구조체를 하나 더 만들어 주고 그 밑에 두 가지의 다른 배열을 만들어 보자.
앞서 만들어놨었던 myArray는 제네릭 선언을 통해서 어떠한 형태라도 받을 수 있게 설정해놨다. 숫자, 문자, 문자열 까지도 문제없고 다음과 같은 형태도 받을 수 있다.
let friend_01 = Friend(name: "친구1")
let friend_02 = Friend(name: "친구2")
let friend_03 = Friend(name: "친구3")
var myFriendsArray = myArray([friend_01,friend_02,friend_03])
print("myFriendsArray: \(myFriendsArray)")
Friend라는 구조체에 세개의 let 상수를 넣고 제네릭 선언이 된 myArray에 위와 같이 넣어도 상관없다. 왜? 제네릭 선언을 해놨으니까. 코드들을 다시 합쳐보자
struct myArray<T>{
//제네릭을 담은 빈 배열 -> 제네릭 선언은 <> 이런식으로 하고 어떠한 값이라도 모두 받겠다는 뜻이다. 보통은 T라고 넣는다.
var elements = [T]()
//생성자
init(_ elements: [T]){
self.elements = elements
}
}
struct Friend {
var name: String
}
var mySomeArray = myArray([1,2,3])
print("mySomeArray : \(mySomeArray)")
var myStringArray = myArray(["문","자","열"])
print("myStringArray: \(myStringArray)")
let friend_01 = Friend(name: "친구1")
let friend_02 = Friend(name: "친구2")
let friend_03 = Friend(name: "친구3")
var myFriendsArray = myArray([friend_01,friend_02,friend_03])
print("myFriendsArray: \(myFriendsArray)")