오늘은 string을 매개변수로 받을 때 &를 사용하는 이유를 알아보겠습니다.

 

요약

매개변수로 std::string을 받을 때 &(참조자)를 사용하는 이유는 주로 성능 최적화불필요한 복사 방지를 위해서다.

 

 

1. std::string을 값으로 전달할 때

void processString(std::string str) {
	// str은 매개변수로 전달받은 string의 복사본
}
  • 동작
    • 함수가 호출될 때 원래 문자열(std::string)이 복사된다.
    • std::string은 내부적으로 동적 메모리를 사용하여 문자열 데이터를 저장하므로, 복사가 발생하면 메모리를 새로 할당하고 데이터를 복사한다.
  • 문제점
    • 큰 문자열을 매개변수로 전달하는 경우, 불필요한 메모리 복사로 인해 성능 저하가 발생한다.
    • 복사본이기 때문에, 함수 내부에서도 변경해도 원본 문자열에는 영향을 미치지 않는다.

 

2. std::string을 참조로 전달할 때

void processString(std::string& str) {
    // str은 원래 문자열에 대한 참조
}
  • 동작
    • 문자열 데이터를 복사하지 않고, 원본 문자열에 대한 참조를 전달한다.
    • 함수 내부에서 매개변수를 수정하면, 원본 문자열도 수정된다.
  • 장점
    • 문자열을 복사하지 않으므로 성능이 향상된다.
    • 함수가 원본 데이터를 직접 수정할 수 있다.

 

3. std::string을 const 참조로 전달할 때

void processString(const std::string& str) {
    // str은 원래 문자열에 대한 읽기 전용 참조
}
  • 동작
    • 원본 문자열에 대한 읽기 전용 참조를 전달한다.
    • 함수 내부에서 문자열을 읽을 수만 있고, 수정은 불가능하다.
  • 장점
    • 복사가 발생하지 않으므로 성능이 최적화된다.
    • 함수가 문자열을 수정하지 않겠다는 의도를 명확히 표현할 수 있다.

 

4. &를 사용하는 이유

  • 복사 방지
    • std::string은 내부적으로 동적 메모리를 사용하기 때문에, 문자열이 클수록 복사 비용이 커진다.
    • 참조를 사용하면 복사 없이 원본 데이터에 접근할 수 있다.
  • 성능 최적화
    • 복사하지 않고 참조를 사용하므로 메모리 사용량과 실행 시간이 줄어든다.
  • 의도 전달
    • 참조를 사용하면 함수가 원본 데이터를 수정할 의도가 있는지(std::string&) 또는 수정하지 않을 것인지(const std::string&)를 명확히 표현할 수 있다.

'C++' 카테고리의 다른 글

C++ :: (범위 지정 연산자)란?  (0) 2025.02.12
전략 패턴을 이용한 정렬 알고리즘  (0) 2025.01.20
C++ 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)  (0) 2025.01.07
C++ unique_ptr과 shared_ptr  (0) 2024.12.26
C++ STL vector  (0) 2024.12.24

+ Recent posts