본문 바로가기

C++/C++ 문법

[C++] this 포인터, 메서드 체이닝(Method Chaining), *this의 의미

728x90
반응형

this

 

class 내부에서 this는 자기 자신의 주소를 나타내는 포인터를 말한다.

 

따라서 아래 코드처럼 this와 객체의 주소를 출력해 보면 같은 값이 나오는 것을 확인할 수 있다.

 

#include <iostream>
using namespace std;

class testclass {
public:	
	testclass() {
		cout << this << endl;
	}
};

int main() {
	testclass test;
	cout << &test;
	return 0;
}

 

 

 

메서드 체이닝 (Method Chaining)

 

메서드 체이닝이란 메서드를 꼬리 물듯 호출하는 디자인 패턴을 말한다.

 

아래 코드처럼 this 지시자를 활용하면 이러한 코드를 작성할 수 있다.

 

#include <iostream>
#include <cstring>
using namespace std;

class SelfRef{
private:
	int num;
public:
	SelfRef(int n)
		:num(n)
	{
		cout << "객체생성" << endl;
	}
	SelfRef& Adder(int n) {
		num += n;
		return *this;
	}
	SelfRef& ShowTwoNumber() {
		cout << num << endl;
		return *this;
	}
};

int main() {
	SelfRef obj(3);
	SelfRef& ref = obj.Adder(2);

	obj.ShowTwoNumber();
	ref.ShowTwoNumber();

	ref.Adder(1).ShowTwoNumber().Adder(2).ShowTwoNumber();

	return 0;
}

 

위 코드에서 Adder ShowTwoNumber 메서드는 모두 *this를 반환한다.

 

*this 포인터인 this에 접근하여 객체 그 자체를 가리킨다.

 

따라서 참조자 ref를 선언하고 Adder의 반환값인 *this, 즉 obj를 대입해 주는 것이다.

 

결국 Adder의 실행 후 obj의 이명(異名)으로 ref라는 별칭이 생기게 되는 것이다.

 

같은 원리로 Adder ShowTwoNumber 메서드가 반환값이 obj이니 반환값에서 도트연산자를 통해

메서드를 호출할 수 있게 되는 것이다.

 

 

 

 

 

 

 

728x90
반응형