1. 워크스페이스 변수 직렬화: save 함수
MATLAB 환경에서 작업 중인 변수를 바이너리 형태인 .mat 파일로 보존할 때 save 함수를 사용합니다. 이는 워크스페이스의 상태를 그대로 직렬화하는 가장 기본적이고 효율적인 방법입니다.
% 샘플 변수 초기화
sensorReadings = linspace(0, 5, 20);
calibrationMatrix = eye(4) * 2.5;
% 전체 워크스페이스 변수를 단일 파일로 저장
save('sensor_data_full.mat');
% 특정 변수만 선택하여 저장하고 압축 옵션 비활성화 (저장 속도 향상)
save('sensor_data_partial.mat', 'sensorReadings', 'calibrationMatrix', '-nocompression');
2. 순수 텍스트 및 구분 기호 데이터 내보내기
형식 지정 텍스트 출력: fprintf
데이터의 출력 형식을 세밀하게 제어해야 할 경우 fprintf를 사용하여 텍스트 파일에 기록할 수 있습니다.
% 샘플 행렬 생성
temperatureLog = [22.5, 23.1, 21.8; 24.0, 23.5, 22.9];
% 파일 스트림 열기
streamID = fopen('temp_log.txt', 'w');
% 포맷에 맞춰 전치하여 쓰기
fprintf(streamID, 'Zone1: %.1f, Zone2: %.1f, Zone3: %.1f\n', temperatureLog');
% 스트림 종료
fclose(streamID);
구분된 숫자형 행렬 저장: writematrix
숫자형 행렬을 CSV나 TSV와 같이 구분 기호로 분리된 텍스트 파일로 내보낼 때는 writematrix 함수가 적합합니다.
% 난수 행렬 생성
metricsData = randi([10, 50], 4, 3);
% 탭 구분자로 텍스트 파일에 저장
writematrix(metricsData, 'metrics_report.tsv', 'Delimiter', 'tab');
3. 테이블 및 셀 데이터 내보내기
테이블 객체 저장: writetable
혼합 데이터 타입을 포함하는 table 객체는 writetable을 통해 스프레드시트나 CSV 파일로 쉽게 변환됩니다.
% 테이블 객체 구성
deviceIDs = (101:104)';
statusFlags = {'Active'; 'Idle'; 'Active'; 'Maintenance'};
uptimeHours = [120.5; 45.2; 300.0; 12.1];
deviceTbl = table(deviceIDs, statusFlags, uptimeHours, ...
'VariableNames', {'ID', 'Status', 'Uptime'});
% 엑셀 및 CSV 포맷으로 내보내기
writetable(deviceTbl, 'device_status.xlsx', 'Sheet', 'Main');
writetable(deviceTbl, 'device_status.csv');
셀 배열 내보내기: writecell
이기종 데이터가 포함된 셀 배열(Cell Array)을 엑셀 파일의 특정 시트에 기록할 때는 writecell을 사용합니다.
% 셀 배열 데이터 준비
headerAndData = {'Sensor', 'Value', 'Unit'; 'Temp', 36.5, 'C'; 'Humidity', 45, '%'};
% 엑셀 파일의 특정 시트에 쓰기
writecell(headerAndData, 'sensor_summary.xlsx', 'Sheet', 'RawData');
4. 이미지 매트릭스 파일로 저장: imwrite
행렬 형태로 표현된 이미지 데이터를 PNG, JPEG, TIFF 등의 표준 이미지 포맷으로 디스크에 저장합니다.
% 그라데이션 이미지 행렬 생성
gradientImg = repmat(linspace(0, 1, 256), 256, 1);
% 다양한 포맷으로 디스크에 저장
imwrite(gradientImg, 'gradient_test.bmp');
imwrite(gradientImg, 'gradient_test.tif', 'Compression', 'none');
5. 바이너리 및 커스텀 포맷 제어: fopen과 fwrite
표준 포맷이 아닌 독자적인 바이너리 구조를 설계하거나 바이트 단위의 메모리 제어가 필요할 경우 저수준 I/O 함수를 활용합니다.
% 바이너리 파일 스트림 개방
binStream = fopen('custom_data.bin', 'w');
% 부동소수점 배열을 바이너리로 직렬화
payload = single([3.1415, 2.7182, 1.4142]);
fwrite(binStream, payload, 'float32');
% 파일 닫기
fclose(binStream);
6. 플롯 및 그래픽 객체 내보내기
기본 그래픽 저장: saveas
현재 Figure 창에 렌더링된 그래프를 벡터 또는 래스터 이미지 형식으로 간단히 캡처하여 저장합니다.
% 샘플 플롯 생성
figure;
plot(1:50, cumsum(randn(1, 50)), 'LineWidth', 2);
title('Random Walk Simulation');
% Figure 객체를 벡터 포맷으로 저장
saveas(gcf, 'random_walk.svg');
고해상도 렌더링 및 내보내기: exportgraphics
출판용 고품질 이미지나 여백이 제거된 깔끔한 그래픽을 얻고자 할 때는 exportgraphics 함수가 효과적입니다.
% 고해상도 래스터 이미지로 내보내기
exportgraphics(gcf, 'random_walk_hq.png', 'Resolution', 300);
7. 구조체 기반 구성 파일 생성: jsonencode
계층적 데이터를 다루는 구성 파일(Configuration)이나 웹 API 연동을 위해 MATLAB 구조체를 JSON 문자열로 인코딩하여 저장할 수 있습니다.
% 계층적 구조체 정의
config.name = 'SystemA';
config.version = 2.1;
config.nodes = struct('id', {1, 2}, 'active', {true, false});
% JSON 문자열로 인코딩 및 파일 기록
jsonPayload = jsonencode(config, 'PrettyPrint', true);
jsonStream = fopen('system_config.json', 'w');
fprintf(jsonStream, '%s', jsonPayload);
fclose(jsonStream);