C++함수와 클래스

멤버 함수와 this 포인터

멤버 함수 안에서 현재 객체를 가리키는 `this`와 const 멤버 함수의 의미를 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

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 멤버 함수 안에서는 객체 상태를 바꾸는 일반 멤버 함수를 호출할 수 없습니다. 이 제약이 오히려 인터페이스 설계를 더 분명하게 만드는 경우가 많습니다.