[TIL] 언리얼 부트캠프 Day 12 : C++ Temp - 임시 객체와 관련 개념

2025. 1. 2. 20:58C++

오늘은 C++에서 중요한 개념 중 하나인 temp와 관련된 내용을 공부한 후, 이를 정리해 보려고 합니다. temp는 임시 객체(Temporary Object)와 깊은 연관이 있는데요, 이를 이해하면 더 최적화된 코드와 메모리 관리에 큰 도움이 됩니다.


1. 임시 객체란?

C++에서 **임시 객체(Temporary Object)**는 컴파일러가 프로그램 실행 중 임시로 생성하고, 짧은 시간 동안 사용된 뒤 바로 소멸되는 객체를 의미합니다.

임시 객체의 생성 사례

  1. 리터럴 표현
    std::string str = "Hello"; // "Hello"는 임시 객체
    
  2. 함수 반환값
    std::string makeString() {
        return "Temporary";
    }
    std::string result = makeString(); // "Temporary"는 임시 객체
    
  3. 형 변환
    double value = 42.0;
    int intValue = static_cast<int>(value); // 임시 객체 생성
    

임시 객체의 특징

  • 메모리 상에서 짧은 생명 주기를 가집니다.
  • 상수로 취급되며, 수정할 수 없습니다.
  • 실행 흐름이 끝나거나 소유권이 다른 객체로 이전되면 소멸합니다.

2. 임시 객체와 레퍼런스

임시 객체는 기본적으로 상수 객체(const)로 간주됩니다. 이를 참조하려면 **const &**를 사용해야 합니다.

예제: 임시 객체를 레퍼런스로 참조

#include <iostream>

void printString(const std::string& str) {
    std::cout << str << std::endl;
}

int main() {
    printString("Temporary Object"); // 임시 객체를 const &로 참조
    return 0;
}

여기서 "Temporary Object"는 임시 객체이며, const &를 통해 참조됩니다.


3. 임시 객체와 이동 의미론

C++11부터 도입된 **이동 의미론(Move Semantics)**은 임시 객체와 밀접한 관련이 있습니다. 이동 의미론은 소유권 이전을 통해 불필요한 복사를 줄여 프로그램의 성능을 높입니다.

이동 생성자와 임시 객체

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    std::vector<int> newVec = std::move(vec); // 임시 객체 이동
    return 0;
}
  • std::move는 기존 객체의 소유권을 임시 객체로 변환합니다.
  • 이를 통해 불필요한 복사가 제거되고, 성능이 최적화됩니다.

4. 임시 객체의 소멸 시점

임시 객체는 생성된 문맥을 벗어나면 즉시 소멸합니다. 이를 염두에 두고 적절히 관리해야 합니다.

잘못된 사용 사례

const std::string& getString() {
    return "Temporary"; // 위험: 임시 객체가 곧 소멸
}

위의 코드는 임시 객체를 반환하여 잘못된 참조를 초래할 수 있습니다. 안전한 대안을 사용해야 합니다.


5. 결론

오늘은 C++의 임시 객체(Temporary Object)와 관련된 주요 개념, 예제, 이동 의미론까지 살펴보았습니다. 임시 객체는 C++에서 매우 중요한 역할을 하며, 성능 최적화와 메모리 관리에서 큰 영향을 미칩니다. 이를 적절히 이해하고 활용하면 더 효율적인 C++ 프로그램을 작성할 수 있습니다.


6. 참고 자료