[cpp] 값 수정의 반영

minjubyeon·2025년 6월 14일

cpp

목록 보기
21/26

1. 비멤버함수

⚠️ 차이점 (값이 바뀌는 경우 vs 안 바뀌는 경우)

✅ 1-1. 멤버 변수에 직접 접근해서 수정하는 경우 → 바뀜

class B {
    int x;

public:
    void SetX(int b) { x = b; }  // 멤버 변수 x 에 직접 저장
};
  • x는 객체 내부 변수이고
  • SetX()this->x = b; 로 바꾸는 함수니까
  • 언제든지 값이 바뀜

❌ 1-2. SetX 함수에서 매개변수를 수정하려고 하는 경우 → 바뀌지 않음

void SetX(int b) {
    b = 100;  // ❌ 매개변수만 바뀌고 x는 그대로
}
  • 여기선 x = b;가 없고
  • b = 100;만 바꿨기 때문에 x는 아무 영향 없음

❌ 1-3. 값을 참조가 아닌 복사로 전달받았을 때 원본이 안 바뀜

void Modify(int x) {
    x = 100; // ❌ 복사본만 바뀜
}
int main() {
    int a = 5;
    Modify(a);
    std::cout << a; // 여전히 5
}
  • int xa복사본
  • 복사본만 바뀌고, 원래 a는 그대로

✅ 1-4. 값을 참조로 전달하면 원본이 바뀜

void Modify(int& x) {
    x = 100;
}
int main() {
    int a = 5;
    Modify(a);
    std::cout << a; // 🔥 100
}
  • xa의 별명 (alias)
  • 같은 메모리를 가리키므로 x = 100; 하면 a도 바뀜

✅ 1-5. 포인터를 써서 바꾸는 경우

void Modify(int* p) {
    *p = 100;
}
int main() {
    int a = 5;
    Modify(&a);
    std::cout << a; // 🔥 100
}
  • *p = 100;a의 주소를 통해 값을 바꿈

🔚 결론

상황원본 값 바뀌나?
멤버 함수에서 x = b;✅ 바뀜
함수 매개변수만 바꿈 (b = 100;)❌ 안 바뀜
일반 매개변수 (int x)❌ 안 바뀜
참조 매개변수 (int& x)✅ 바뀜
포인터 사용 (int* p)✅ 바뀜


2. 멤버함수

void SetX(int b) {
    x = b;  // ⬅️ 이건 parameter b의 값을 멤버 변수 x에 복사해서 저장
}
  • 여기서 b는 단순한 입력값일 뿐이고
  • x = b;this->x값을 복사하는 작업입니다.

👉 b복사든 참조든 상관없이,
👉 b값만 사용해서 x에 넣는 것이므로 전혀 문제 없음이에요!



3. 🔚 결론

멤버 변수 수정에는 참조가 필요 없다.

멤버 함수는 this 포인터를 통해 자기 객체의 멤버 변수에 직접 접근하므로,
별도로 참조를 쓰지 않아도 내부 데이터를 수정하거나 읽을 수 있습니다.

예: x = b;는 this->x = b;와 같으며, 이는 객체의 실제 멤버를 수정하는 것입니다.

단, 외부 값을 수정하려면 그 외부 값을 참조나 포인터로 받아야 합니다. (예: void SetX(int& b))



profile
안녕하세요.

0개의 댓글