기본 패턴
cpp
class User {
public:
void rename(const std::string& name) {
this->name = name;
}
private:
std::string name;
};설명
- 클래스의 멤버 함수는 호출된 객체를 암묵적으로 하나 더 전달받는데, 그 객체를 가리키는 포인터가
this입니다. - 그래서 멤버 함수 안에서는 현재 객체의 필드에 바로 접근할 수 있고, 필요할 때
this->member처럼 명시적으로 적을 수도 있습니다. - 매개변수 이름과 멤버 이름이 겹칠 때
this->name = name;패턴이 특히 자주 쓰입니다. void print() const같은 const 멤버 함수는 "이 함수 안에서 객체 상태를 바꾸지 않겠다"는 약속을 타입 수준에서 표현합니다.- 체이닝 인터페이스를 만들 때는
return *this;를 통해 현재 객체 자신을 다시 돌려주는 패턴도 자주 사용합니다.
짧은 예제
cpp
#include <iostream>
#include <string>
class Counter {
public:
Counter& increase() {
++value;
return *this;
}
void print() const {
std::cout << value << "\n";
}
private:
int value = 0;
};
int main() {
Counter c;
c.increase().increase();
c.print();
}빠른 정리
| 항목 | 설명 |
|---|---|
this | 현재 객체를 가리키는 암묵적 포인터 |
this->member | 현재 객체의 멤버를 명시적으로 가리킴 |
| const 멤버 함수 | 객체 상태를 바꾸지 않는다는 약속 |
return *this; | 메서드 체이닝에 자주 쓰는 패턴 |
| 이름 충돌 해소 | 매개변수와 멤버 이름이 같을 때 유용 |
주의할 점
const 멤버 함수 안에서는 객체 상태를 바꾸는 일반 멤버 함수를 호출할 수 없습니다. 이 제약이 오히려 인터페이스 설계를 더 분명하게 만드는 경우가 많습니다.