이 아티클은 Generic과 메모리 구조에 대한 전반적인 이해가 있어야 Aha! 포인트가 더 많을 것입니다!!!!

야우쓰에 제네릭과 관련해서 너무 좋은 아티클을 찾아서 같이 공유하고 싶어서 적어봅니당~

Intro) 간단하게 제네릭 설명

Generic

Apple 공식문서 왈 “Swift에서 가장 강력한 기능 중 하나”라고 평가를 받는 Generic은

타입에 의존하지 않는 범용 코드를 작성할 때 사용한다

제네릭을 사용하면 중복을 피하고, 코드를 유연하게 작성할 수 있다

라고 설명되어있으며, 실제 Swift의 표준 라이브러리가 대다수 제네릭으로 선언된다. 감이 안 잡힐게 뻔하니까 예시를 들어서 설명하도록 하겠다.

⇒ 다양한 객체에 대해 구현이 동일한 메서드나 타입을 컴파일 타임에 확인해 주는 강력한 도구

타입 파라미터

<T>라고 불렸던 타입 파라미터는 새로운 형식으로 생성되는 것이 아니라, 실제 함수가 호출될 때 해당 매개변수의 타입으로 대체되는 Placeholder이다.

꺽새(<>)로 감싸는 이유는 Placeholder의 타입으로

Swift한테 T는 새로운 타입이 아니야! 그러니까 실제 이 타입이 존재하는지 찾지 마! 자리 타입이야!!

를 알려주는 역할이다.

그래서 이 T는 함수가 호출될때 마다 결정이 되는겁니다. 이 과정을 우리는 **구체화(Specialization)**라고 한다!

Specialization (구체화) : Type Parameter 는 함수의 호출 부에서 특정한 구체적인 타입으로 결정되는 과정

(호출시 → 스택으로 갈때 매개변수의 타입에 맞게 메모리를 할당하는 거 같다)

struct Stack<T> {
    let items: [T] = []
 
    mutating func push(_ item: T) { ... }
    mutating func pop() -> T { ... }
}

let stack1: Stack<Int> = .init()
let stack2 = Stack<Int>.init()

1. 그럼 이걸 어떻게 처리를 해주는 걸까?

요즘 계속 OS를 공부해서 그런지 제네릭은 그러면 OS?까진 아니여도 뒷쪽에서는 어떻게 작동하는지가 궁금했다.

이러한 제네릭 코드가 있고~