0Pricing
C++ Academy · 강의

string_view를 사용하는 이유

문자열 복사 방지하기

string_view를 사용하는 이유은(는) CoddyKit의 무료 C++ Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C++ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

복사 비용

std::string을 값으로 전달하면 전체 버퍼가 복사됩니다. 읽기 전용으로 접근할 때는 이 복사가 불필요한 작업입니다. std::string_view는 가볍고 소유하지 않는 뷰로, 포인터와 길이만 담습니다. <string_view>를 포함하세요.

#include <iostream>
#include <string_view>
int main() {
    std::string_view sv = "hello";
    std::cout << sv << " len=" << sv.size() << "\n";
}

뷰가 저장하는 것

string_view는 기존 문자를 가리키는 포인터와 길이만 저장합니다. 데이터를 소유하거나 복사하지 않습니다.

#include <iostream>
#include <string>
#include <string_view>
int main() {
    std::string s = "world";
    std::string_view sv = s; // views s, no copy
    std::cout << sv << "\n";
}

읽기 전용 매개변수

std::string_view를 받으면 복사 없이 std::string, 문자열 리터럴, char 배열과 함께 작동하는 함수를 만들 수 있습니다.

#include <iostream>
#include <string_view>
void greet(std::string_view name) {
    std::cout << "Hi, " << name << "\n";
}
int main() {
    greet("Ada");
    greet(std::string("Bob"));
}

할당하지 않기

뷰를 생성해도 메모리를 할당하지 않으므로, 값을 복사하거나 값으로 전달하는 비용이 저렴합니다.

#include <iostream>
#include <string_view>
int main() {
    std::string_view a = "constant text";
    std::string_view b = a; // trivial copy
    std::cout << (a == b) << "\n";
}

저렴한 부분 문자열

뷰에서 substr를 호출하면 같은 메모리를 가리키는 또 다른 뷰가 반환되며, 문자는 복사되지 않습니다.

#include <iostream>
#include <string_view>
int main() {
    std::string_view sv = "abcdef";
    std::cout << sv.substr(2, 3) << "\n"; // cde
}

성능 의도 비교하기

텍스트를 확인만 하는 함수에서는 string_view가 힙 할당과 복사를 모두 피하므로, 빈번히 실행되는 반복문과 구문 분석에서 중요합니다.

길이와 인덱싱

뷰는 익숙한 인터페이스를 제공합니다. size(), empty(), 인덱싱, 범위 기반 반복을 지원합니다.

#include <iostream>
#include <string_view>
int main() {
    std::string_view sv = "C++";
    for (char c : sv) std::cout << c << "-";
    std::cout << "\n" << sv.size() << "\n";
}

뷰는 읽기 전용입니다

string_view를 통해 문자를 수정할 수는 없습니다. 읽기 접근만 제공하기 때문입니다. 수정하려면 데이터를 소유하는 문자열이 필요합니다.

리터럴에서 뷰로

문자열 리터럴은 뷰로 직접 변환되므로, 상수 텍스트를 매우 저렴하게 전달할 수 있습니다.

#include <iostream>
#include <string_view>
using namespace std::string_view_literals;
int main() {
    auto sv = "literal"sv;
    std::cout << sv.size() << "\n";
}

string을 대체하지 않습니다

텍스트를 소유하거나 저장하거나 수정해야 할 때는 std::string을 사용합니다. 임시로 사용하는 읽기 전용 매개변수에는 std::string_view를 사용하세요.

수명에 관한 주의 사항

뷰는 데이터를 소유하지 않으므로, 기반이 되는 문자가 뷰보다 오래 존재해야 합니다. 이를 잘못 사용하면 매달린 뷰가 발생하며, 이는 뒤의 레슨에서 다룹니다.

빠른 확인

string_view가 필요한 이유에 대한 이해를 확인해 보세요.

복습

string_view가 존재하는 이유를 배웠습니다:

  • 소유하지 않는 포인터와 길이로 이루어진 뷰입니다.
  • 이를 읽기 전용 텍스트에 사용하면 복사와 할당을 피할 수 있습니다.
  • 문자열, 리터럴, char 배열과 함께 작동합니다.
  • 뷰가 참조하는 데이터는 뷰보다 오래 존재해야 합니다.

자주 묻는 질문

“string_view를 사용하는 이유” 강의는 무료인가요?

네 — “string_view를 사용하는 이유” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C++ Academy 강의 전체를 잠금 해제할 수 있습니다. C++ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“string_view를 사용하는 이유”에서 뭘 배우나요?

문자열 복사 방지하기 브라우저에서 직접 실행하는 실습 코드로 C++ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

C++ Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 C++ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“string_view를 사용하는 이유” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 C++ Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 C++ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. string_view를 사용하는 이유
  2. 뷰 만들기
  3. 주의점과 수명
  4. 문자열 알고리즘
← C++ Academy(으)로 돌아가기