3월13일 TIL (제네릭)

이승원·2024년 3월 13일
0

TIL

목록 보기
42/75
post-thumbnail

제네릭 (Generic)

  • 제네릭은 함수, 타입 및 데이터 구조에 대한 유연하고 추상적인 코드를 작성할 수 있게 해주는 기능으로, 다양한 타입에서 작동할 수 있도록 일반화된 코드를 작성할 수 있게 해준다.
  • 다양한 타입을 하나의 제네릭으로 처리할 수 있다는게 제일 큰 장점이다.
  • 제네릭은 실제 타입 이름 (Int, Double 등등)을 사용하는 대신 placeholder를 사용한다, <T, V, U > 등등
  • placeholder의 실제 타입은 함수가 호출되는 순간 결정된다.
  • 제네릭 타입으로 정해줘도, 원하는 타입에서만 동작할 수 있도록 제한을 할 수 있기 때문에, 안전하고 의도한대로 기능을 사용할 수 있다.
  • 예시 코드 :

// inout 키워드는 C의 주소값이라고 생각하면된다, 
// 전달되는 매개변수를 함수 외부에서도 변경이 가능하게끔 해준다. 

func swapTwoInts(_ a: inout Int, _ b: inout Int) {
    let temporaryA = a
    a = b
    b = temporaryA
}

func swapTwoStrings(_ a: inout String, _ b: inout String) {
    let temporaryA = a
    a = b
    b = temporaryA
}

func swapTwoDoubles(_ a: inout Double, _ b: inout Double) {
    let temporaryA = a
    a = b
    b = temporaryA
}

// 제네릭을 사용하면 타입에 상관없이 사용가능함
// 위에 세개의 코드를 하나로 사용가능하다. 
func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
    let temporaryA = a
    a = b
    b = temporaryA
}
//숫자만 변경이 가능하게끔 하면 아래처럼 where T: Numeric을 사용하면 된다.
// where키워드를 사용하여 제네릭 타입에 특정 프로토콜 채택, 특정 타입과의 상속관계 등을 제한할 수 있다. 
func swapTwoNumbers<T>(_ a: inout T, _ b: inout T) where T: Numeric {
    let temporaryA = a
    a = b
    b = temporaryA
}
profile
개발자 (진)

0개의 댓글