Main Content

string형을 허용할 수 있도록 코드 업데이트하기

다른 MATLAB® 사용자를 위한 코드를 작성할 경우에는 다른 텍스트 데이터형과 이전 버전과의 호환성을 유지하면서 string형 배열을 허용하도록 API를 업데이트하는 것이 좋습니다. string형을 취하면 자신의 코드가 MathWorks® 제품과의 일관성을 유지하게 됩니다.

코드의 종속성이 낮거나 새로운 코드를 개발 중이라면 성능 향상을 위해 string형 배열을 텍스트의 주요 데이터형으로 사용해 보십시오. 이 경우 가장 좋은 방법은 문자형 벡터, 문자형 벡터로 구성된 셀형 배열 또는 string형 배열인 입력 인수를 허용하도록 API를 작성하거나 업데이트하는 것입니다.

string형 배열과 기타 용어에 대한 정의를 보려면 문자형 배열과 string형 배열 관련 용어 항목을 참조하십시오.

string형 배열이란?

MATLAB에서는 텍스트 데이터를 두 가지 방법으로 저장할 수 있습니다. 그중 하나는 문자형 배열을 사용하는 것입니다. 숫자형 배열이 일련의 숫자인 것처럼, 문자형 배열은 일련의 문자입니다. 또 다른 방법으로, 일련의 문자를 string형으로 저장할 수 있습니다. 여러 개의 문자열을 string형 배열로 저장할 수 있습니다. 자세한 내용은 문자형과 string형 항목을 참조하십시오.

기존 API에서 string형 채택 시 권장 사항

코드의 종속성이 높고 이전 버전과의 호환성을 유지해야 하는 경우, 다음의 접근 방식을 따라 함수와 클래스를 업데이트하여 호환 가능한 API를 만드십시오.

함수

  • string형 배열을 입력 인수로 허용하십시오.

    • 입력 인수가 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열이 될 수 있는 경우, string형 배열도 입력 인수가 될 수 있도록 코드를 업데이트하십시오. 예를 들어, 작은따옴표를 사용하여 입력 인수를 문자형 벡터로 지정할 수 있는 함수가 있다고 가정하겠습니다. 가장 좋은 방법은 입력 인수를 문자형 벡터로도 지정할 수 있고 큰따옴표를 사용하여 string형 스칼라로도 지정할 수 있도록 함수를 업데이트하는 것입니다.

  • string형을 이름-값 쌍 인수의 이름과 값에 모두 사용할 수 있도록 허용하십시오.

    • 이름-값 쌍의 인수에서 이름을 문자형 벡터 또는 string형으로 지정할 수 있도록 허용하십시오. 즉, 이름에 작은따옴표 또는 큰따옴표를 사용할 수 있도록 합니다. 값이 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열이 될 수 있는 경우, string형 배열도 될 수 있도록 코드를 업데이트하십시오.

  • string형 배열로 구성된 셀형 배열이 텍스트 입력 인수가 될 수 있도록 허용하지 마십시오.

    • string형 배열로 구성된 셀형 배열은 각 셀에 string형 배열을 포함합니다. 예를 들어, {"hello","world"}는 string형 배열로 구성된 셀형 배열입니다. 이와 같은 셀형 배열을 만들 수 있지만 텍스트를 저장하는 방법으로는 권장하지 않습니다. string형 배열의 요소는 동일한 데이터형을 가지며, 효율적으로 저장됩니다. string형을 셀형 배열로 저장하면 string형 배열 사용으로 얻는 이점을 누릴 수 없습니다.

      하지만 코드에서 서로 다른 셀형 배열을 입력값으로 허용하는 경우에는 string형이 포함된 셀형 배열을 허용할 수 있습니다. 이와 같은 셀형 배열의 string형을 문자형 벡터로 변환할 수 있습니다.

  • 일반적으로, 출력 유형은 변경하지 마십시오.

    • 함수가 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열을 반환하는 경우, 이 함수가 string형 배열을 입력값으로 허용하더라도 출력 유형은 변경하지 마십시오. 예를 들어, fileread 함수는 문자형 벡터 또는 string형으로 지정된 입력 파일 이름을 허용하지만, 파일 내용은 문자형 벡터로 반환합니다. 출력 유형을 동일하게 하면 이전 버전과의 호환성을 유지할 수 있습니다.

  • 함수가 입력 텍스트를 수정하는 경우 동일한 데이터형을 반환하도록 하십시오.

    • 함수가 입력 텍스트를 수정하고 수정된 텍스트를 출력 인수로 반환하는 경우, 입력 인수와 출력 인수의 데이터형은 동일해야 합니다. 예를 들어, lower 함수는 텍스트를 입력 인수로 허용하며, 이 텍스트를 모두 소문자로 변환하여 반환합니다. 입력 인수가 문자형 벡터인 경우 lower는 문자형 벡터를 반환합니다. 입력값이 string형 배열이면 lower는 string형 배열을 반환합니다.

  • 가져오기 함수에 'TextType' 인수를 추가해 보십시오.

    • 함수가 파일에서 데이터를 가져오는 경우 이 데이터 중 일부가 텍스트가 될 수 있다면, 텍스트를 문자형 배열로 반환할지 아니면 string형 배열로 반환할지를 지정하는 입력 인수를 추가해 보십시오. 예를 들어, readtable 함수는 'TextType' 이름-값 쌍의 인수를 제공합니다. 이 인수는 readtable이 텍스트가 포함된 테이블을 문자형 벡터로 구성된 셀형 배열로 반환할지 아니면 string형 배열로 반환할지를 지정합니다.

클래스

  • 메서드를 함수로 취급하십시오.

    • string형 채택을 위해 메서드를 함수인 것처럼 취급하십시오. 이전 섹션에서 설명한 대로, string형 배열을 입력 인수로 허용하고 기본적으로 출력 인수의 데이터형은 변경하지 마십시오.

  • 속성의 데이터형을 변경하지 마십시오.

    • 속성이 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열인 경우 속성의 유형을 변경하지 마십시오. 이러한 속성에 액세스할 때 반환되는 값도 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열입니다.

      또는, string형인 새 속성을 추가하고 기존 속성에 종속시켜 호환성을 유지할 수 있습니다.

  • string형 배열을 사용하여 속성을 설정하십시오.

    • 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열을 사용하여 속성을 설정할 수 있는 경우, string형 배열로도 해당 속성을 설정할 수 있도록 클래스를 업데이트하십시오. 그러나 속성의 데이터형은 변경하지 마십시오. 대신, 입력 string형 배열을 속성의 데이터형으로 변환한 다음 속성을 설정하십시오.

  • string 메서드를 추가하십시오.

    • 클래스에 이미 char 및/또는 cellstr 메서드가 있는 경우 string 메서드를 추가하십시오. 클래스의 객체를 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열로 나타낼 수 있는 경우 string형 배열로도 나타내도록 하십시오.

기존 API에서 string형 배열을 채택하는 방법

string형 배열을 입력 인수로 허용한 다음, 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열로 변환하는 방법으로 기존 API에서 string형을 채택할 수 있습니다. 함수 시작 부분에서 이렇게 변환을 수행하면 나머지 부분을 업데이트할 필요가 없습니다.

convertStringsToChars 함수는 string형 배열인 인수만 변환하는 방법으로 모든 입력 인수를 처리합니다. 기존 코드에서 string형 배열을 입력값으로 허용할 수 있게 하려면 함수와 메서드의 시작 부분에 convertStringsToChars에 대한 호출을 추가하십시오.

예를 들어, 3개의 입력 인수를 받는 함수 myFunc를 정의한 경우, convertStringsToChars를 사용하여 3개의 입력 인수를 모두 처리합니다. 코드의 나머지 부분은 변경하지 않은 상태로 둡니다.

function y = myFunc(a,b,c)
    [a,b,c] = convertStringsToChars(a,b,c);
    <line 1 of original code>
    <line 2 of original code>
    ...

이 예에서 인수 [a,b,c]는 각 위치의 입력 인수를 덮어씁니다. 입력 인수가 string형 배열이 아니면 변경되지 않습니다.

myFunc에서 가변 개수의 입력 인수를 받으면 varargin을 통해 지정한 인수를 모두 처리하십시오.

function y = myFunc(varargin)
    [varargin{:}] = convertStringsToChars(varargin{:});
    ...

성능 향상을 위한 고려 사항

1개의 입력 인수를 변환할 때는 convertStringsToChars 함수가 더 효율적입니다. 함수가 성능에 민감한 경우, 코드의 나머지 부분은 변경하지 않은 상태로 둔 채 입력 인수를 한 번에 하나씩 변환할 수 있습니다.

function y = myFunc(a,b,c)
    a = convertStringsToChars(a);
    b = convertStringsToChars(b);
    c = convertStringsToChars(c);
    ...

새로운 코드에 string형 채택 시 권장 사항

코드의 종속성이 낮거나 완전히 새로운 코드를 개발 중이라면 string형 배열을 주요 텍스트 데이터형으로 사용해 보십시오. 많은 양의 텍스트에 대해 작업할 때 string형 배열을 사용하면 성능이 향상되고 메모리를 효율적으로 사용할 수 있습니다. 문자형 벡터로 구성된 셀형 배열과 달리 string형 배열은 동일한 데이터형을 가집니다. string형 배열을 사용하면 유지 가능한 코드를 더 손쉽게 작성할 수 있습니다. 이전 버전의 다른 텍스트 데이터형과 호환성을 유지하면서 string형 배열을 사용하려면 다음의 접근 방식을 따르십시오.

함수

  • 모든 텍스트 데이터형을 입력 인수로 허용하십시오.

    • 입력 인수를 string형 배열로 지정할 수 있는 경우, 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열로도 지정 가능하도록 허용합니다.

  • 문자형 배열을 이름-값 쌍 인수의 이름과 값에 모두 사용할 수 있도록 허용하십시오.

    • 이름-값 쌍의 인수에서 이름을 문자형 벡터 또는 string형으로 지정할 수 있도록 허용하십시오. 즉, 이름에 작은따옴표 또는 큰따옴표를 사용할 수 있도록 합니다. 값을 string형 배열로 지정할 수 있는 경우, 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열로도 지정 가능하도록 허용하십시오.

  • string형 배열로 구성된 셀형 배열이 텍스트 입력 인수가 될 수 있도록 허용하지 마십시오.

    • string형 배열로 구성된 셀형 배열은 각 셀에 string형 배열을 포함합니다. 이와 같은 셀형 배열을 만들 수 있지만 텍스트를 저장하는 방법으로는 권장하지 않습니다. 코드에서 string형을 주요 텍스트 데이터형으로 사용하는 경우, 여러 개의 텍스트 조각을 string형 배열로 구성된 셀형 배열이 아니라 string형 배열로 저장하십시오.

      하지만 코드에서 서로 다른 셀형 배열을 입력값으로 허용하는 경우에는 string형이 포함된 셀형 배열을 허용할 수 있습니다.

  • 일반적으로, string형을 반환하도록 합니다.

    • 함수가 텍스트인 출력 인수를 반환하는 경우, 이를 string형 배열로 반환하십시오.

  • 함수가 입력 텍스트를 수정하는 경우 동일한 데이터형을 반환하도록 하십시오.

    • 함수가 입력 텍스트를 수정하고 수정된 텍스트를 출력 인수로 반환하는 경우, 입력 인수와 출력 인수의 데이터형은 동일해야 합니다.

클래스

  • 메서드를 함수로 취급하십시오.

    • 이전 섹션에서 설명한 대로 문자형 벡터와 문자형 벡터로 구성된 셀형 배열을 입력 인수로 허용하십시오. 일반적으로, string형을 반환하도록 합니다.

  • 속성을 string형 배열로 지정하십시오.

    • 속성에 텍스트가 포함되어 있으면 string형 배열을 사용하여 속성을 설정하십시오. 속성에 액세스할 경우 값을 string형 배열로 반환하십시오.

새로운 코드에서 호환성을 유지하는 방법

새로운 코드를 작성하거나 string형 배열을 주 텍스트 데이터형으로 사용하도록 코드를 수정할 때, 이전 버전의 다른 텍스트 데이터형과 호환성을 유지하도록 합니다. 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열을 입력 인수로 허용한 다음, 즉시 string형 배열로 변환할 수 있습니다. 함수 시작 부분에서 이렇게 변환을 수행하면 코드의 나머지 부분에서는 string형 배열만 사용할 수 있습니다.

convertCharsToStrings 함수는 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열인 인수만 변환하는 방법으로 모든 입력 인수를 처리합니다. 새로운 코드에서 이러한 텍스트 데이터형을 입력값으로 허용할 수 있게 하려면 함수와 메서드의 시작 부분에 convertCharsToStrings에 대한 호출을 추가하십시오.

예를 들어, 3개의 입력 인수를 받는 함수 myFunc를 정의한 경우, convertCharsToStrings를 사용하여 3개의 입력 인수를 모두 처리합니다.

function y = myFunc(a,b,c)
    [a,b,c] = convertCharsToStrings(a,b,c);
    <line 1 of original code>
    <line 2 of original code>
    ...

이 예에서 인수 [a,b,c]는 각 위치의 입력 인수를 덮어씁니다. 입력 인수가 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열이 아니면 변경되지 않습니다.

myFunc에서 가변 개수의 입력 인수를 받으면 varargin을 통해 지정한 인수를 모두 처리하십시오.

function y = myFunc(varargin)
    [varargin{:}] = convertCharsToStrings(varargin{:});
    ...

성능 향상을 위한 고려 사항

1개의 입력 인수를 변환할 때는 convertCharsToStrings 함수가 더 효율적입니다. 함수가 성능에 민감한 경우, 코드의 나머지 부분은 변경하지 않은 상태로 둔 채 입력 인수를 한 번에 하나씩 변환할 수 있습니다.

function y = myFunc(a,b,c)
    a = convertCharsToStrings(a);
    b = convertCharsToStrings(b);
    c = convertCharsToStrings(c);
    ...

입력 인수를 수동으로 변환하는 방법

가능하면 텍스트가 포함된 입력 인수를 수동으로 변환하는 것은 피하고, 대신 convertStringsToChars 함수 또는 convertCharsToStrings 함수를 사용하십시오. 직접 입력 인수의 데이터형을 확인하고 변환하는 방법은 번거롭고 실수하기 쉬운 접근 방식입니다.

입력 인수를 직접 변환해야만 하는 경우에는 다음 표의 함수를 사용하십시오.

변환

함수

string형 스칼라를 문자형 벡터로

char

string형 배열을 문자형 벡터로 구성된 셀형 배열로

cellstr

문자형 벡터를 string형 스칼라로

string

문자형 벡터로 구성된 셀형 배열을 string형 배열로

string

인수 데이터형을 확인하는 방법

텍스트를 포함할 수 있는 입력 인수의 데이터형을 확인하려면 다음 표에 설명된 패턴을 사용해 보십시오.

필요한 입력 인수 유형

기존 확인 방법

새로운 확인 방법

문자형 벡터 또는 string형 스칼라

ischar(X)

ischar(X) || isStringScalar(X)

validateattributes(X,{'char','string'},{'scalartext'})

문자형 벡터 또는 string형 스칼라

validateattributes(X,{'char'},{'row'})

validateattributes(X,{'char','string'},{'scalartext'})

비어 있지 않은 문자형 벡터 또는 string형 스칼라

ischar(X) && ~isempty(X)

(ischar(X) || isStringScalar(X)) && strlength(X) ~= 0

(ischar(X) || isStringScalar(X)) && X ~= ""

문자형 벡터로 구성된 셀형 배열 또는 string형 배열

iscellstr(X)

iscellstr(X) || isstring(X)

모든 텍스트 데이터형

ischar(X) || iscellstr(X)

ischar(X) || iscellstr(X) || isstring(X)

빈 string형이 있는지 확인하기

빈 string형은 문자가 없는 string형입니다. MATLAB은 사이에 아무것도 없는 큰따옴표 쌍("")으로 빈 string형을 표시합니다. 하지만 빈 string형도 1×1 string형 배열입니다. 빈 배열이 아닙니다.

string형이 비어 있는지 확인하려면 strlength 함수를 사용하는 것이 좋습니다.

str = "";
tf = (strlength(str) ~= 0)

참고

isempty 함수를 사용하여 빈 string형을 확인하지 마십시오. 빈 string형은 문자를 포함하고 있지는 않지만 여전히 1×1 string형 배열입니다.

strlength 함수는 string형 배열에 있는 각 string형의 길이를 반환합니다. string형이 string형 스칼라이면서 비어 있어서는 안 되는 경우에는 두 조건을 모두 확인합니다.

tf = (isStringScalar(str) && strlength(str) ~= 0)

str을 문자형 벡터 또는 string형 스칼라로 지정할 수 있는 경우에도 strlength를 사용하여 길이를 확인할 수 있습니다. 입력 인수가 빈 문자형 벡터('')이면 strlength0을 반환합니다.

tf = ((ischar(str) || isStringScalar(str)) && strlength(str) ~= 0)

빈 string형 배열이 있는지 확인하기

실제로 빈 string형 배열은 빈 배열입니다. 즉, 길이가 0인 차원이 하나 이상 있는 배열입니다.

빈 string형 배열을 만들려면 strings 함수를 사용하여 하나 이상의 입력 인수를 0으로 지정하는 것이 좋습니다. 입력값이 빈 string형 배열일 때 isempty 함수는 1을 반환합니다.

str = strings(0);
tf = isempty(str)

strlength 함수는 입력 string형 배열과 크기가 동일한 숫자형 배열을 반환합니다. 입력값이 빈 string형 배열이면 strlength는 빈 배열을 반환합니다.

str = strings(0);
L = strlength(str)

누락값인 string형이 있는지 확인하기

string형 배열은 누락값인 string형도 포함할 수 있습니다. 누락값인 string형은 숫자형 배열에서의 NaN과 같습니다. 이는 문자열은 string형 배열에 누락값이 있음을 나타냅니다. 누락값인 string형은 따옴표 없이 <missing>으로 표시됩니다.

missing 함수를 사용하여 누락값인 string형을 만들 수 있습니다. 누락값인 string형이 있는지 확인하려면 ismissing 함수를 사용하는 것이 좋습니다.

str = string(missing);
tf = ismissing(str)

참고

string형과 누락값인 string형을 비교하는 방법으로 누락값인 string형이 있는지 확인하지 마십시오.

NaN이 다 동일하지 않듯이 누락값인 string형도 마찬가지입니다.

str = string(missing);
f = (str == missing)

문자형 배열과 string형 배열 관련 용어

MathWorks 도움말 문서에서는 다음 용어들을 사용하여 문자형 배열과 string형 배열을 설명합니다. 일관성 유지를 위해 직접 만드는 문서, 오류 메시지 및 경고에서도 다음 용어들을 사용해 주십시오.

  • 문자형 벡터 — char 데이터형의, 문자로 구성된 1×n 배열.

  • 문자형 배열 — char 데이터형의, 문자로 구성된 m×n 배열.

  • 문자형 벡터로 구성된 셀형 배열 — 각 셀에 문자형 벡터가 포함된 셀형 배열.

  • string형 또는 string형 스칼라 — 1×1 string형 배열. string형 스칼라는 일련의 1×n 문자를 포함할 수 있지만, 그 자체가 하나의 객체입니다. 크기와 데이터형이 정확해야 하는 경우에는 용어 "string형 스칼라"와 "문자형 벡터"를 함께 사용합니다. 또는 설명에서 용어 "string형"을 사용해도 됩니다.

  • string형 벡터 — 1×n 또는 n×1 string형 배열. 크기가 하나만 허용되는 경우라면 설명 시 해당 크기를 언급하십시오. 예를 들어, "1×n string형 배열"을 사용하여 해당 크기로 구성된 배열을 설명합니다.

  • string형 배열 — m×n string형 배열.

  • 빈 string형 — 문자가 없는 string형 스칼라.

  • 빈 string형 배열 — 크기가 0인 차원이 하나 이상 있는 string형 배열.

  • 누락값인 string형 — 누락값인 string형 스칼라(<missing>으로 표시됨).

참고 항목

| | | | | | | | | | | |

관련 항목