반응형
💡목표
Tag Dispatching이란 무엇인지 사용하는 이유가 무엇인지 알아보고, 왜 Empty Class를 사용해야하는지 예시(example)를 보며 알아보자.
* Empty Class에 대해서 알고 싶은 분은아래 링크에서 확인해주세요.
🔦Tag Dispatching(꼬리표 분배)이란?
Empty Class를 꼬리표로 사용해서 함수 오버로딩을 하는 기술을 말한다.
📝Empty Class를 이용한 함수 오버로딩
Empty Class를 왜 함수 오버로딩에 이용하는지, Empty Class를 사용하고 안하고에 따라서 오버로딩에 어떠한 차이점이 있는지 비교해보자.
🎈함수 분기
int sub(int a, int b, int option) {
if (option) return abs(a - b);
else return a - b;
}
함수의 인자 값에 따라서 빼기의 결과값을 그대로 리턴거나 절대 값으로 리턴하는 sub 함수가 있다고 생각해보자.
이 함수의 문제점은 runtime에 분기가 된다는 것이다. runtime에 option이라는 값을 확인하는 연산을 하게 된다.
🎈runtime이 아닌 compile time을 이용하기 위한 오버로딩
int sub(int a, int b) { return a - b; }
int sub(int a, int b, int option) { abs(a - b); }
함수 사용시 option 값을 넣고 안넣고에 따라서 compile time에 함수가 정해지기에 option을 확인하는 연산을 하지 않는다. 일반적인 분기문이 있는 함수를 사용하는 것과 소모되는 시간이 달라지게 된다.
🎈Empty Class를 이용한 함수 오버로딩
#include <iostream>
class AbsSub {}; //Empty Class
AbsSub absSub;
/* 일반 오버로딩 */
int sub(int a, int b, int option) { return abs(a - b); }
/* Empty Class를 이용한 오버로딩 */
int sub(int a, int b, AbsSub isAbs) { return abs(a - b); }
int sub(int a, int b) { return a - b; }
int main() {
sub(1, 2, 1); // 일반 오버로딩 - 가독성이 떨어진다
sub(1, 2, absSub); // Empty Class를 이용한 오버로딩 - 가독성이 좋다
sub(1, 2);
return 0;
}
그럼 왜 Empty Class를 사용하는 이유는 무엇일까. 위 예제를 보면 확실히 Empty Class가 가독성 측면에서 좋다고 생각이 들것이다. 오버로딩을 위한 인자로 int 같은 타입보다 Empty Class을 만들어 사용하게되면 이름을 보자마자 이건 빼기의 결과 값이 절대 값으로 리턴이 될거라고 생각이 들 것이다.
반응형
'개발 > C++' 카테고리의 다른 글
[C++] "[[no_unique_address]]" 란? C++20 attribute (0) | 2021.10.08 |
---|---|
[C++] EBCO란? (0) | 2021.10.08 |
[C++] Empty Class란? (0) | 2021.10.08 |