Main Content

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

구조체형 배열

이름으로 구조화하려는 데이터가 있다면 구조체를 사용하여 저장할 수 있습니다. 구조체는 필드라는 컨테이너에 데이터를 저장하며, 지정한 이름으로 필드에 액세스할 수 있습니다. 점 표기법을 사용하여 구조체 필드에 데이터를 생성, 할당, 액세스합니다. 필드에 저장된 값이 배열인 경우 배열 인덱싱을 사용하여 배열의 요소에 액세스할 수 있습니다. 여러 개의 구조체를 구조체형 배열로 저장한 경우 배열 인덱싱과 점 표기법을 사용하여 개별 구조체와 해당 필드에 액세스할 수 있습니다.

스칼라 구조체 생성하기

먼저, 환자에 대한 데이터를 저장하는 필드가 있는 patient라는 구조체를 생성합니다. 다음 도식은 구조체가 데이터를 어떻게 저장하는지 보여줍니다. patient와 같은 구조체는 변수가 하나의 구조체를 저장하므로 스칼라 구조체라고도 합니다.

점 표기법을 사용하여 name, billing, test 필드를 추가하며 각 필드에 데이터를 할당합니다. 이 예제에서 patient.name 구문은 구조체와 구조체의 첫 번째 필드를 모두 생성합니다. 그다음에 나오는 명령은 필드를 추가합니다.

patient.name = 'John Doe';
patient.billing = 127;
patient.test = [79 75 73; 180 178 177.5; 220 210 205]
patient = struct with fields:
       name: 'John Doe'
    billing: 127
       test: [3x3 double]

필드 값에 액세스하기

필드를 만든 후에는 계속 점 표기법을 사용하여 필드에 저장된 값에 액세스하고 이 값을 변경할 수 있습니다.

예를 들어, billing 필드의 값을 변경해 보겠습니다.

patient.billing = 512.00
patient = struct with fields:
       name: 'John Doe'
    billing: 512
       test: [3x3 double]

점 표기법을 사용하여 임의의 필드 값에 액세스할 수도 있습니다. 예를 들어, patient.test의 값에 대한 막대 차트를 만들어 보겠습니다. patient.name의 텍스트를 사용하여 제목을 추가합니다. 필드에 배열이 저장된 경우 이 구문은 전체 배열을 반환합니다.

bar(patient.test)
title("Test Results for " + patient.name)

Figure contains an axes. The axes with title Test Results for John Doe contains 3 objects of type bar.

필드에 저장된 배열의 일부에 액세스하려면 배열의 크기와 유형에 적합한 인덱스를 추가하십시오. 예를 들어, patient.test의 한 열에 저장된 데이터의 막대 차트를 만들어보겠습니다.

bar(patient.test(:,1))

Figure contains an axes. The axes contains an object of type bar.

비 스칼라 구조체형 배열의 요소 참조하기

구조체형 배열은 비 스칼라일 수 있습니다. 배열의 각 구조체가 동일한 필드를 가질 경우 임의 크기의 구조체형 배열을 만들 수 있습니다.

예를 들어, 두 번째 환자에 대한 데이터를 포함하는 두 번째 구조체를 patients에 추가해 보겠습니다. 또한, 첫 번째 구조체의 billing 필드에 원래 값 127을 할당해 보겠습니다. 이제 배열에 두 개의 구조체가 있으므로 patient(1).billing = 127과 같이 인덱스를 사용하여 첫 번째 구조체에 액세스해야 합니다.

patient(2).name = 'Ann Lane';
patient(2).billing = 28.50;
patient(2).test = [68 70 68; 118 118 119; 172 170 169];
patient(1).billing = 127
patient=1×2 struct array with fields:
    name
    billing
    test

결과적으로, patient는 도식에 표시된 것과 같은 내용을 가진 1×2 구조체형 배열입니다.

배열의 각 환자 기록은 struct 클래스로 이루어진 구조체가 됩니다. 구조체로 구성된 배열을 구조체형 배열(struct array)이라고도 합니다. 그러나, 구조체형 배열(struct array)과 구조체형 배열(structure array)은 의미가 같습니다. 다른 MATLAB® 배열과 마찬가지로 구조체형 배열은 임의의 차원을 가질 수 있습니다.

구조체형 배열의 속성은 다음과 같습니다.

  • 배열의 모든 구조체는 동일한 개수의 필드를 갖습니다.

  • 모든 구조체는 필드 이름이 동일합니다.

  • 다른 구조체에 있는 동일한 이름의 필드는 다른 데이터형 또는 다른 크기의 데이터를 포함할 수 있습니다.

모든 필드의 값을 지정하지 않으면서 배열에 새 구조체를 추가하면 지정되지 않은 필드는 빈 배열을 포함합니다.

patient(3).name = 'New Name';
patient(3)
ans = struct with fields:
       name: 'New Name'
    billing: []
       test: []

구조체형 배열의 요소를 참조하려면 배열 인덱싱을 사용하십시오. 예를 들어, patient(2)는 두 번째 구조체를 반환합니다.

patient(2)
ans = struct with fields:
       name: 'Ann Lane'
    billing: 28.5000
       test: [3x3 double]

필드에 액세스하려면 배열 인덱싱과 점 표기법을 사용하십시오. 예를 들어, 두 번째 환자의 billing 필드의 값을 반환해 보겠습니다.

patient(2).billing
ans = 28.5000

필드에 저장된 배열의 요소를 참조할 수도 있습니다. patient(2).test의 첫 번째 두 열만 표시하는 막대 차트를 만듭니다.

bar(patient(2).test(:,[1 2]))

Figure contains an axes. The axes contains 2 objects of type bar.

참고

구조체형 배열의 단일 요소를 참조할 때만 필드 일부분의 요소를 참조할 수 있습니다. MATLAB®은 구조체형 배열의 여러 요소에서 필드의 요소를 참조하려고 하는 patient(1:2).test(1:2,2:3)과 같은 명령문은 지원하지 않습니다. 이 경우에는 arrayfun 함수를 대신 사용하십시오.

참고 항목

| |

관련 항목