개발/C++

[C++]Tag Dispatching(꼬리표 분배)이란?-Empty Class 이용한 예(example)

재근이 2021. 10. 8. 11:56
반응형

💡목표

Tag Dispatching이란 무엇인지 사용하는 이유가 무엇인지 알아보고, 왜 Empty Class를 사용해야하는지 예시(example)를 보며 알아보자.

* Empty Class에 대해서 알고 싶은 분은아래 링크에서 확인해주세요.

 

[C++] Empty Class란?

목표 Empty Class 특징에 대해서 알아보고, 어떠한 것들이 Empty Class를 말하는지 예시를 통해서 알아보자. Empty Class 특징 size가 1byte (non-static) member 변수가 없다. 가상 함수가 없다. 가상 상속을 하..

jaegeun.tistory.com

 

🔦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