-
[C++] 참조자를 통해 객체의 멤버에 접근프로그래밍/C & C++ 2024. 7. 2. 08:05728x90반응형
참조자를 통해 객체의 멤버에 접근하는 것은 포인터를 사용하는 것보다 간단하고 직관적입니다. 참조자는 별도의 연산자 없이 객체의 멤버에 직접 접근할 수 있습니다. 이는 참조자가 객체 그 자체처럼 동작하기 때문입니다.
1. 참조자를 통한 객체 멤버 접근
참조자를 통해 객체의 멤버 변수나 멤버 함수에 접근하는 방법을 살펴보겠습니다.
예시:
#include <iostream> class MyClass { public: int value; void sayHello() const { std::cout << "Hello from MyClass!" << std::endl; } }; int main() { MyClass obj; obj.value = 42; MyClass& ref = obj; // obj를 참조하는 ref // 멤버 변수 접근 std::cout << "Value: " << ref.value << std::endl; // ref를 통해 value에 접근 // 멤버 함수 호출 ref.sayHello(); // ref를 통해 sayHello() 호출 return 0; }
2. 함수 인수로 참조자 사용
참조자를 함수 인수로 사용하면, 함수가 호출될 때 객체가 복사되지 않으므로 성능이 향상되고 메모리 사용이 줄어듭니다. 이는 특히 큰 객체를 다룰 때 유용합니다.
예시:
#include <iostream> class MyClass { public: int value; void sayHello() const { std::cout << "Hello from MyClass!" << std::endl; } }; void printValue(const MyClass& ref) { // MyClass 객체를 참조로 받음 std::cout << "Value: " << ref.value << std::endl; ref.sayHello(); // 참조를 통해 멤버 함수 호출 } int main() { MyClass obj; obj.value = 42; printValue(obj); // 객체를 참조로 함수에 전달 return 0; }
3. 상수 참조자 (const reference)
상수 참조자는 참조를 통해 접근한 객체의 값을 변경하지 않겠다는 의미를 가지며, 이를 통해 함수 내부에서 객체를 안전하게 읽기 전용으로 사용할 수 있습니다.
예시:
#include <iostream> class MyClass { public: int value; void sayHello() const { std::cout << "Hello from MyClass!" << std::endl; } }; void printValue(const MyClass& ref) { // 상수 참조자로 받음 std::cout << "Value: " << ref.value << std::endl; ref.sayHello(); // 상수 참조를 통해 멤버 함수 호출 // ref.value = 100; // 오류: 상수 참조자를 통해 값 변경 불가 } int main() { MyClass obj; obj.value = 42; printValue(obj); // 객체를 상수 참조로 함수에 전달 return 0; }
요약
- 참조자는 포인터와 달리 별도의 연산자 없이 객체의 멤버에 접근할 수 있습니다.
- 참조자를 함수 인수로 사용하면 객체를 복사하지 않고도 원본 객체에 접근할 수 있어 성능이 향상됩니다.
- 상수 참조자는 함수 내부에서 객체를 읽기 전용으로 사용할 수 있도록 보장합니다.
참조자는 C++에서 객체를 효율적으로 다루고, 코드 가독성을 높이는 데 유용한 도구입니다.
728x90반응형'프로그래밍 > C & C++' 카테고리의 다른 글
[C++] 이동 의미론(Move Semantics) (0) 2024.07.05 [C++] 깊은 복사와 얕은 복사 (0) 2024.07.05 [C++] 포인터를 통해 객체의 멤버에 접근 (0) 2024.07.01 [C++] 스마트 포인터 (0) 2024.07.01 [C++] std 뜻 (0) 2024.06.30