Main Content

구조체형 배열

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

스칼라 구조체 생성하기

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

strucdem_01.png

점 표기법을 사용하여 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 object. The axes object with title Test Results for John Doe contains 3 objects of type bar.

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

bar(patient.test(:,1))

Figure contains an axes object. The axes object 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 구조체형 배열입니다.

strucdem_02.png

배열의 각 환자 기록은 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 object. The axes object contains 2 objects of type bar.

참고

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

참고 항목

| |

관련 항목