티스토리 뷰

반응형

 

 

 


Generic Functions
제네릭의 기능

제네릭(Generic) 기능은 어떠한 타입에서도 작동될 수 있습니다. 아래의 코드는 swapTwoValues(_:_:) 라는 다양한 타입을 수용할 수 있는 메서드입니다.


위의 swapTwoValues(_:_:) 메서드는 어떠한 타입이던 동일한 타입이기만 되는 두개의 인자를 받아서 값을 swap할 수 있습니다. 다양한 타입을 스왑하기 위해 다수의 메서드를 작성할 필요가 없게 되는 것입니다. 기존에 Int타입으로만 한정해서 받은 메서드, swapTwoIntValues(_:_:)메서드와 비교해서 몸체 내부의 구현 코드는 별다른 차이가 없습니다.

이제 두개의 메서드를 비교해 보도록 하겠습니다. 

 

 


제네릭(Generic)을 사용한 메서드인 swapTwoValues<T>(_:_:)는 (자리표시자)placeholder 이름을 갖습니다. (위의 케이스에서 T가 되겠습니다.) 실제의 타입 네임 대신 말이지요. (실제 타입 이름의 예는 Int, String, Double, Character 등이 있습니다.)

placeholder 타입 이름은 T가 어떤 타입이 되어야 한다는 구체적인 명시가 없습니다. 다만, 이는 인자로 받는 a, b가 서로 같은 타입이어야 한다는 것을 명시합니다. T가 어떤타입이 되던 말이지요. 어떤 타입이던 해당 메서드, swapTwoValues<T>(_:_:)를 호출하면 동일한 두개의 타입을 받아 swap 연산을 실행하게 됩니다. 

 


제네릭 타입을 사용하지 않은 메서드와 비교할 때,
제네릭 타입을 사용한 메서드의 차이점

제네릭 타입을 사용했을 때의 특징, 차이점은 T라는 placeholder 타입을 사용하며, 메서드 이름 뒤에 <T>라는 꺽쇠를 사용한다는 것 입니다.

<T>라는 꺽쇠는 Swift에게 해당 메서드 내에서 "T는 placeholder 타입이다."라고 알려줍니다. Swift는 'T'라는 타입의 실제적인 타입에 대해서는 보지 않습니다.

 

이로서, 제네릭타입으로 정의 된 swapTwoValues<T>(_:_:)는 swapTwoInts(_:_:), swapTwoDoubles(_:_:) 등의 역할로서 다양하게 사용되어질 수 있습니다. 다양한 타입, 어떠한 타입이던 동일한 타입의 두 인자만 들어간다면 swap의 역할을 해낼 수 있는 것이지요.

이로서 다시말번 정리하자면, swapTwoValues<T>(_:_:)가 호출될 때마다, 입력받은 동일한 타입의 인자가 전달되어지고, swap되어집니다. 

아래의 두 예시에서 볼 수 있듯이, T는 Int, String 타입 등으로 상대적으로 적용되어집니다. 

 

 

Note
위의 코드를 보면 swapTwoValues<T>(_:_:) 메서드는 다양한 타입의 인자를 받아 swap의 역할을 해내고 있습니다. 사실 스위프트 표준 라이브러리(Swift Standard Library) 에서는 swapTwoValues<T>(_:_:)와 같은 메서드를 제공하고 있습니다. 이와 같은 메서드인 swap(_:_:) 메서드 또한 제네릭 타입을 사용하여 정의하고 있습니다. swap(_:_:)을 사용하면 어떠한 타입이던 동일한 두개의 타입을 인자값으로 전달하여 swap 연산을 실행할 수 있습니다. 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함