Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

string형 배열에 관한 자주 묻는 질문

MATLAB®은 R2016b에서 string 데이터형을 추가했습니다. R2018b부터는 MathWorks® 제품 전체에서 string형 배열을 사용하여 텍스트를 처리할 수 있습니다. string형 배열은 텍스트 조각을 저장하고 텍스트를 데이터로 사용할 수 있는 일련의 함수를 제공합니다. 다른 유형의 배열을 활용하는 것과 마찬가지로, string형 배열을 형태 변경하고, 결합하고, 배열의 요소를 참조할 수 있습니다. 자세한 내용은 string형 배열 생성하기 항목을 참조하십시오.

대부분의 측면에서 string형 배열은 문자형 벡터 및 문자형 벡터로 구성된 셀형 배열처럼 동작합니다. 하지만 string형 배열과 문자형 배열 사이에는 몇 가지 주요 차이점이 있기 때문에 예기치 않은 결과로 이어질 수도 있습니다. 예상된 결과를 도출하려면 각 차이점마다 권장되는 방법으로 string형을 사용하는 것이 좋습니다.

string형이 포함된 명령 형식을 사용하면 오류가 발생하는 이유는 무엇입니까?

cd, dir, copyfile, load 같은 함수를 명령 형식으로 사용하는 경우 큰따옴표를 사용하지 마십시오. 명령 형식에서 인수를 큰따옴표로 묶는 경우 오류가 발생할 수 있습니다. 인수를 string형으로 지정하려면 함수 형식을 사용하십시오.

명령 구문에서 입력값은 쉼표가 아닌 공백으로 구분하며 입력 인수는 괄호로 묶지 않습니다. 예를 들어, 명령 구문으로 cd 함수를 사용하여 폴더를 변경할 수 있습니다.

cd C:\Temp

텍스트 C:\Temp는 문자형 벡터입니다. 명령 형식에서 모든 인수는 항상 문자형 벡터입니다. 폴더 이름과 같이 공백을 포함하는 인수가 있는 경우 작은따옴표로 묶어서 하나의 입력 인수로 지정해야 합니다.

cd 'C:\Program Files'

하지만 큰따옴표를 사용하여 인수를 지정하는 경우 cd가 오류를 발생시킵니다.

cd "C:\Program Files"
Error using cd
Too many input arguments.

오류 메시지는 사용하는 함수와 지정하는 인수에 따라 달라질 수 있습니다. 예를 들어, 명령 구문에 load 함수를 사용하고 큰따옴표를 사용하여 인수를 지정할 경우 load는 다른 오류를 발생시킵니다.

load "myVariables.mat"
Error using load
Unable to read file '"myVariables.mat"': Invalid argument.

명령 형식에서 큰따옴표는 string형 생성 연산자가 아니라 리터럴 텍스트의 일부로 처리됩니다. cd "C:\Program Files"에 상응하는 항목을 함수 형식으로 작성한다면 cd는 아래와 같이 두 개의 인수를 갖는 함수 호출이 될 것입니다.

cd('"C:\Program','Files"')

인수를 string형으로 지정하는 경우 함수 구문을 사용하십시오. 명령 구문을 지원하는 모든 함수는 함수 구문도 지원합니다. 예를 들어, 함수 구문에 cd를 사용하고 입력 인수를 큰따옴표로 묶어서 string형으로 지정할 수 있습니다.

cd("C:\Program Files")

셀형 배열에 포함된 string형이 오류를 반환하는 이유는 무엇입니까?

string형이 여러 개인 경우에는 셀형 배열로 저장하지 말고 string형 배열로 저장하십시오. 중괄호 대신 대괄호를 사용하여 string형 배열을 생성합니다. 텍스트를 저장하고 조작할 때는 string형 배열이 셀형 배열보다 더 효율적입니다.

str = ["Venus","Earth","Mars"]
str = 1×3 string array
    "Venus"    "Earth"    "Mars"

string형으로 구성된 셀형 배열은 사용하지 마십시오. 셀형 배열을 사용하면 string형 배열 사용 시 얻을 수 있는 성능 이점을 누릴 수 없습니다. 실제로, 대부분의 함수는 string형으로 구성된 셀형 배열을 입력 인수, 옵션 또는 이름-값 쌍으로 구성된 값으로 받지 않습니다. 예를 들어, string형으로 구성된 셀형 배열을 입력 인수로 지정할 경우 contains 함수가 오류를 발생시킵니다.

C = {"Venus","Earth","Mars"}
C = 1×3 cell array
    {["Venus"]}    {["Earth"]}    {["Mars"]}
TF = contains(C,"Earth")
Error using contains
First argument must be a string array, character vector, or cell array of character vectors.

대신, 인수를 string형 배열로 지정하십시오.

str = ["Venus","Earth","Mars"];
TF = contains(str,"Earth");

R2016b 이전까지는 "문자열로 구성된 셀형 배열(cell array of strings)"이라는 용어는 배열의 모든 요소가 문자형 벡터인 셀형 배열을 의미했습니다. R2017a부터는 string형 배열과 의미를 정확하게 구분하기 위해 "문자형 벡터로 구성된 셀형 배열(cell arrays of character vectors)"이라고 부르게 되었습니다.

셀형 배열은 string형을 비롯하여 임의의 데이터형을 갖는 변수를 포함할 수 있습니다. 모든 요소에 string형이 포함된 셀형 배열을 생성하는 것도 여전히 가능합니다. 또한, 코드에 문자형 벡터로 구성된 셀형 배열이 이미 지정되어 있다면 작은따옴표를 큰따옴표로 바꾸는 간단한 업데이트를 수행하면 됩니다. 하지만 string형으로 구성된 셀형 배열을 생성하거나 사용하는 것은 권장되지 않습니다.

string형의 length()가 1을 반환하는 이유는 무엇입니까?

length 함수는 문자형 벡터에 포함된 문자 수를 확인할 때 흔히 사용하는 함수입니다. 하지만 string형에 포함된 문자 수를 확인하려면 length 대신 strlength 함수를 사용해야 합니다.

작은따옴표를 사용하여 문자형 벡터를 생성합니다. length 함수를 사용하여 문자형 벡터의 길이를 확인합니다. C는 벡터이므로 해당 길이는 문자 수와 같습니다. C는 1×11 벡터입니다.

C = 'Hello world';
L = length(C)
L = 11

큰따옴표를 사용하여 동일한 문자를 포함하는 string형을 생성합니다. 이 string형은 11개 문자를 포함하지만 str은 1×1 string형 배열, 즉 string형 스칼라입니다. string형 스칼라에 대해 length를 호출하는 경우 출력 인수는 포함된 문자 수에 상관없이 1입니다.

str = "Hello World";
L = length(str)
L = 1

string형에 포함된 문자 수를 확인하려면 R2016b에 추가된 strlength 함수를 사용하십시오. 호환성을 위해 strlength는 문자형 벡터에 대해서도 동작합니다. 두 경우 모두, strlength는 문자 수를 반환합니다.

L = strlength(C)
L = 11
L = strlength(str)
L = 11

여러 string형을 포함하는 string형 배열과 문자형 벡터로 구성된 셀형 배열에도 strlength를 사용할 수 있습니다.

length 함수는 배열에서 가장 긴 차원의 크기를 반환합니다. string형 배열의 경우, length는 배열에서 가장 긴 차원의 string형 수를 반환합니다. string형에 포함된 문자 수를 반환하지 않습니다.

isempty("")가 0을 반환하는 이유는 무엇입니까?

string형에 문자가 전혀 없을 수 있습니다. 이러한 string형은 빈 string형입니다. 비어 있는 큰따옴표 쌍을 사용하여 빈 string형을 지정할 수 있습니다.

L = strlength("")
L = 0

그러나 빈 string형은 빈 배열이 아닙니다. 빈 string형은 문자가 없는 string형 스칼라입니다.

sz = size("")
sz = 1×2    
     1     1

빈 string형에 대해 isempty를 호출하면 이 string형은 빈 배열이 아니기 때문에 0(false)을 반환합니다.

tf = isempty("")
tf = logical
   0

그러나 빈 문자형 배열에 대해 isempty를 호출하면 1(true)을 반환합니다. 비어 있는 작은따옴표 쌍으로 지정된 문자형 배열 ''은 0×0 문자형 배열입니다.

tf = isempty('')
tf = logical
   1

텍스트에 문자가 없는지 여부를 테스트하려면 strlength 함수를 사용하는 것이 좋습니다. 입력값이 string형 스칼라인지 또는 문자형 벡터인지에 관계없이 동일한 호출을 사용할 수 있습니다.

str = "";
if strlength(str) == 0
    disp('String has no text')
end
String has no text
chr = '';
if strlength(chr) == 0
    disp('Character vector has no text')
end
Character vector has no text

대괄호를 사용하여 string형을 추가하면 여러 string형이 반환되는 이유는 무엇입니까?

대괄호를 사용하여 텍스트를 문자형 벡터에 추가할 수 있습니다. 그러나 대괄호를 사용하여 텍스트를 string형 배열에 추가하면 새 텍스트가 string형 배열의 새 요소로 결합됩니다. string형에 텍스트를 추가하려면 plus 연산자 또는 strcat 함수를 사용하십시오.

예를 들어, string형 두 개를 결합하면 1×2 string형 배열이 반환됩니다.

str = ["Hello" "World"]
str = 1×2 string array
    "Hello"    "World"

그러나 문자형 벡터 두 개를 결합하면 길이가 더 긴 하나의 문자형 벡터가 반환됩니다.

str = ['Hello' 'World']
chr = 'HelloWorld'

string형(또는 string형 배열의 요소)에 텍스트를 추가하려면 대괄호 대신 plus 연산자를 사용하십시오.

str = "Hello" + "World"
str = "HelloWorld"

또 다른 방법은 strcat 함수를 사용하는 것입니다. strcat는 입력 인수가 string형이든 문자형 벡터이든 텍스트를 추가합니다.

str = strcat("Hello","World")
str = "HelloWorld"

대괄호, plus, strcat 중 어느 것을 사용하든 임의 개수의 인수를 지정할 수 있습니다. HelloWorld 사이에 공백 문자를 추가합니다.

str = "Hello" + " " + "World"
str = "Hello World"

참고 항목

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

관련 항목