Const 참조 전달 (2025.06.23)

이정국(PBD)·2025년 6월 23일

TIL

목록 보기
15/69

*오늘 학습 내용*

코드카타 문제풀이 / Const 참조

1.코드카타 문제풀이(42~43)
2.Const 참조 학습

*내용 정리*

1.TIL: 왜 함수 인자로 const 포인터를 넘기나?

✅ 개념 정리

  • const *ptr이란?
    👉 "가리키는 대상은 바꾸지 않겠다"는 뜻.
    즉, 함수에서 해당 데이터를 수정하지 않겠다는 확실한 약속.
void printName(const string* name);
*name이 가리키는 문자열을 읽기만 하고, 바꾸지는 않는다는 뜻.

✅ 왜 const 포인터로 넘기는가? (3가지 이유)

  • 💬 원본 객체를 복사하지 않아서 속도 빠름
    값 전달(원본)로 넘기면 내부적으로 복사 발생 → 특히 큰 객체면 부담 매우 커짐
    포인터로 넘기면 복사 없이 바로 접근 → 성능 향상↑

  • 🔒 const 덕분에 원본이 실수로 바뀌는 걸 방지
    실수로 데이터를 수정하면 버그나 보안 문제 발생 가능
    → const는 “이 함수는 진짜 읽기 전용이다” 라는 명시적인 약속.

  • 👀 코드 가독성 & 의도 전달력 ↑
    함수 선언만 봐도 “이 값은 절대 안 바꾼다”는 걸 알 수 있음
    → 유지보수, 협업, 코드 리뷰 시 신뢰도 ↑

✅ 언제 쓰면 좋을까?

상황추천 방식
데이터 크기가 크고, 수정하지 않을 때const Type* ptr
클래스 내부 읽기 함수const Type& / const Type*
배열, 버퍼 등 raw 메모리const T* buffer, size_t len

🧠 기억 공식

  • 큰 데이터 읽기만 할 때 = "const 포인터 활용하기"
  • 수정을 막아야 할때 = "const 붙이기"
  • 복사를 막고 성능 향상을 원할때 = "포인터 or 참조로 전달!"
  • 예시 코드
void printLength(const string* str) {
    cout << "Length: " << str->length() << endl;
    // str->append("hello"); ❌ 에러! const라서 수정 불가
}

💬 오늘 내가 깨달은 핵심

  • ✅ "함수에서 값 변경을 원하지 않는다면, const 붙이고 참조(또는 포인터)로 넘겨라!"
  • ✅ const 포인터로 넘기는 건 “안전하고 빠르고 명확한” 아주 좋은 방법
  • ✅ 특히 수정하면 안 되는 데이터일수록 const를 써서 코드의 안정성 확보
profile
창백한 푸른점 속 작은점

0개의 댓글