EP.2-4 배열

EP.2-4 배열: 데이터 창고를 넘어선 공간 제어의 마법 | 제어 엔지니어 구조 분석

Phase 2: Operations & Control Logic

EP.2-4 배열 — 공간과 수치를 지배하는 데이터 창고

단순한 나열을 넘어 벡터(Vector)와 행렬(Matrix)의 관점으로 해석하다

왜 배열(Array)인가?

지금까지의 변수가 하나의 '점'이었다면, 배열은 점들이 모인 '선'이자 '면'입니다. 로봇 관절의 위치를 정하는 벡터(Vector)나 고성능 비전 시스템의 픽셀 데이터를 처리하는 행렬(Matrix)의 실체가 바로 이 배열입니다.

GPU가 현대 기술의 핵심이 된 이유도 결국 거대한 배열 연산을 한꺼번에 처리하는 능력 때문입니다. 배열을 이해하는 것은 수만 개의 데이터를 일일이 관리하지 않고, 단 하나의 이름으로 일괄 통제하는 법을 배우는 것과 같습니다.

1차원 배열: 센서 데이터 벡터 생성

동일한 타입의 데이터를 메모리에 연속적으로 배치합니다. CPU는 인덱스(Index)라는 번호표를 통해 빛의 속도로 데이터에 접근합니다.

#include <stdio.h>

int main() {
    // 로봇 관절 각도(Vector) 초기화
    double joints[3] = { 45.0, 90.5, -15.25 };
    int i;

    printf("=== [ROBOT STATUS] 현재 관절 각도 벡터 ===\n");

    for (i = 0; i < 3; i++) {
        // %.2f: 소수점 둘째 자리까지 출력하는 정밀도 필터
        printf("Joint [%d]: %.2f deg\n", i, joints[i]);
    }

    return 0;
}

▲ 실습 결과 : 배열의 각도 값을 소수점 둘째 자리까지 출력

3. 2차원 배열: 행렬(Matrix)의 구현

행(Row)과 열(Column)로 구성된 격자 구조입니다. 비전 검사기에서 카메라 픽셀을 훑거나 로봇 좌표계의 회전 행렬을 계산할 때 필수적으로 쓰입니다.

💡 엔지니어 포인트: X, Y, Z라는 '물리적 3차원 공간' 데이터를 다룬다고 해서 반드시 3차원 배열인 것은 아닙니다. 데이터를 찾기 위해 번호표(Index)가 2개(행, 열) 필요하다면 그것은 프로그래밍 구조상 '2차원 배열(행렬)'입니다. 공간 좌표 3개를 하나의 표(Table)로 관리하는 것이 바로 이 행렬의 핵심입니다.

int matrix[3][3] = {
    {1, 0, 0}, // X축 성분
    {0, 1, 0}, // Y축 성분
    {0, 0, 1} // Z축 성분
};

for (int r = 0; r < 3; r++) {
    for (int c = 0; c < 3; c++) {
        printf("%d ", matrix[r][c]);
    }
    printf("\n");
}

▲ 실습 결과 : 배열의 행(Row) 열(Column)이 차례로 출력

🛠️ 마스터의 시운전 노트: 배열 사용 시 '절대 금기'

1) 인덱스(Index)는 "0"부터 시작한다: int a[5]를 선언했다면 방 번호는 0, 1, 2, 3, 4 까지입니다. 5번 방을 열려고 시도하는 순간 시스템은 급발진하거나 멈춥니다(Segmentation Fault).

2) %.2f의 마법: 소수점이 무한히 길어지는 실수 데이터를 깔끔하게 다듬어줍니다. 가독성 높은 HMI 화면 구성을 위한 필수 스위치입니다.

3) 연속 메모리의 특징: 배열은 메모리에 줄지어 서 있으므로 for문이라는 고속 열차를 타고 순식간에 데이터를 훑기에 최적화되어 있습니다.

© 2026 ZIN PARK · MASTERING CONTROL ENGINEERING SERIES
"배열을 지배하는 엔지니어가 데이터의 흐름과 공간의 방향을 결정한다."

댓글

이 블로그의 인기 게시물

EP.0 코딩의 첫걸음 — 전기를 어떻게 연결할 것인가?

EP.0-1 천공카드

EP.1-1트랜지스터