나만의 작은 도서관
[TIL] 240716 캠프 93일차: protoBuf oneof 본문
오늘 배운 내용
protoBuf oneof
많은 필드가 있고 동시에 최대 하나의 필드가 설정되는 메시지가 있는 경우 oneof를 사용하여 적용하고 메모리를 절약할 수 있습니다.
oneof 필드는 oneof 공유 메모리의 모든 필드를 제외하고 일반 필드와 같으며 최대 한 필드를 동시에 설정할 수 있습니다.
oneof의 member를 설정하면 다른 모든 member는 자동으로 지워집니다. oneof는 다음과 같은 경우에 사용합니다.
- 메모리 절약: oneof는 여러 필드 중 하나만 저장될 수 있도록 하여, 메모리 사용을 줄이는 데 도움이 됩니다. 이는 동시에 여러 필드를 저장할 필요가 없고, 하나의 필드만 활성 상태가 되므로 메모리 효율성을 높입니다.
- 메시지의 명확성: oneof를 사용하면 한 번에 하나의 필드만 설정될 수 있으므로, 메시지의 의미가 명확해집니다. 이는 메시지의 유효성을 검증하거나, 메시지를 처리할 때 혼동을 줄이는 데 도움이 됩니다.
- 구조화된 데이터 표현: 다양한 타입의 값을 가질 수 있는 필드를 정의할 때 유용합니다. 예를 들어, 서로 다른 타입의 값을 나타낼 수 있는 변수를 정의해야 할 때 oneof를 사용하면 보다 구조화된 방식으로 데이터를 표현할 수 있습니다.
- 백워드 컴패터블 변경: API나 데이터 구조가 변경될 때 새로운 필드를 추가하더라도 이전 클라이언트와의 호환성을 유지할 수 있습니다. 새로운 필드를 oneof에 추가하면, 이전 클라이언트는 기존 필드만 인식하고 처리하게 됩니다.
사용 예시
syntax = "proto3";
message Example {
oneof test_oneof {
string name = 4;
int32 age = 5;
bool is_student = 6;
}
}
오늘 한 일
'Today I Learn' 카테고리의 다른 글
[TIL] 240718 캠프 95일차: Insomnia없이 JS에서 http Method를 요청 (0) | 2024.07.19 |
---|---|
[TIL] 240717 캠프 94일차: protoBuf에서의 상속 (0) | 2024.07.18 |
[TIL] 240715 캠프 92일차: Socket.io: socket.id, socket.handshake (0) | 2024.07.15 |
[TIL] 240712 캠프 89일차: 웹소켓에서 서버 주도 방식에서의 통신 (0) | 2024.07.12 |
[TIL] 240711 캠프 88일차: Lockstep, 게임서버 멀티플레이어 동기화 방식 종류 (0) | 2024.07.11 |