어떤 함수의 파라미터에 대한 타입을 지정하지 않고 상황에 따라 다양한 타입을 파라미터로 사용하는 기법이다.
처음엔 '이게 무슨 말인가' 싶었는데 아래 예제를 통해 이해했다.
def are_equal(a,b):
return a == b
are_equal(10, 10.0) # Output : True
def are_equal(a,b):
return type(a) == type(b)
print(are_equal(10, 10.0)) # Output : False
파이썬은 애초에 동적 타이핑 언어이기 때문에 제네릭을 따로 구현할 필요가 없다. 그래서 아마 파이썬만 해본 사람들은 이해가 잘 안될 것이다.
위 코드를 보면 are_equal(10, 10.0)
로 a
와 b
의 타입이 int
와 float
으로 다르다. 근데 파이썬은 스스로 알아서 a
타입을 int
, b
타입을 float
으로 인식했다. 즉, 함수를 정의할 때 파라미터의 타입은 정의 하지않고 이 함수를 호출 할 때 인수를 통해 타입을 지정한다.
이렇게 파이썬이 자동으로 동적으로 타입을 할당 해주지만, 다른 언어에서는 그렇지 않다. 그래서 동적으로 타입을 할당하고 싶을 때 제네릭을 구현한다.
# C++
template<class T, classU>
bool are_equal(T a, U b) {
return (a == b);
}
are_equal(10, 10.0)
C++는 동적 타이핑 언어가 아니기 때문에 template
를 통해 제네릭을 구현했다.
그럼 제네릭을 사용하는 이유는 무엇일까?
제네릭을 사용하면 매번 타입을 변환할 필요가 없고, 그러므로 함수를 인자의 타입에 따라 반복적으로 정의할 필요도 없으니 코드 재사용 함수를 인자의 타입에 따라 반복적으로 정의할 필요도 없으니 코드가 간결해지고 코드의 재사용성도 높아진다.