[C++] 왜 const 참조는 비용이 적게 들까?

Date:     Updated:

카테고리:

태그:

이 글은 ‘왜 const 참조는 비용이 적게 들까?’ 라는 의문에서 시작하여 공부하고 정리한 글입니다.
const 참조는 ‘참조에 의한 전달’을 하여 ‘값에 의한 전달’을 할 때 생겨나는 비용이 발생되지 않는다.

코드 예시

void Foo(const Person& p);

왜 const 참조는 비용이 적게 들까?

  • 기본적으로 C++는 함수로부터 객체를 전달 받거나 함수에 개체를 전달할 때 ‘값에 의한 전달’ 방식을 사용한다
  • 그래서 함수 매개변수는 실제 인자의 ‘사본‘을 통해 초기화되며, 어떤 함수를 호출한 쪽은 그 함수가 반환한 값의 ‘사본‘을 돌려받습니다
  • 그래서 사본을 생성하고 복사 생성자를 호출되는데 만약 객체가 부모를 상속 받고 있고 string 변수 3개를 가지고 있는다고 생각하면
  • 본인 클래스 생성자, 부모 클래스 생성자, string 생성자 3개를 호출해서 총 5개의 생성자를 호출한다
  • 거기에 소멸될 때를 생각해보면 총 5개의 소멸자가 호출된다
  • 이처럼 ‘값에 의한 전달‘을 하면 그에 따른 비용이 많이 생긴다
  • 하지만 ‘참조에 의한 전달‘을 하게 되면 그런 비용들은 발생되지 않는다

그러면 왜 앞에 const를 붙이는가?

  • ‘값에 의한 전달’일 때는 함수 안에서 객체가 변경되는 것을 신경 쓰지 않아도 됐지만
  • ‘참조에 의한 전달’일 때는 함수 안에서 객체가 변경될 수 있기 때문에 변경되는 것을 막기 위해 const를 붙인다

또한 ‘참조에 의한 전달’을 하면 복사손실 문제가 없다

  • 파생 클래스 객체가 기본 클래스 객체로서 전달되는 경우는 드물지 않게 접할 수 있는데,
  • 이때 이 객체가 값으로 전달되면 기본 클래스의 복사 생성자가 호출되고,
  • 파생 클래스 객체로 동작하게 해 주는 특징들이 ‘싹둑 잘려’ 떨어지고 만다.
  • 하지만 참조로 전달되면 문제가 해결된다


참조

Effective C++



💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우 
  언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기