[java] Protocol Buffers 메시지를 Java 객체로 변환하는 방법

Protocol Buffers는 구조화된 데이터의 직렬화 및 역직렬화를 위한 언어 중립적인 메시지 형식입니다. 이러한 메시지를 Java 객체로 변환하는 과정은 간단하면서도 강력한 기능을 제공합니다. 이번 블로그 포스트에서는 Protocol Buffers 메시지를 Java 객체로 변환하는 방법을 알아보겠습니다.

1. Protocol Buffers 정의 파일 작성

먼저 Protocol Buffers 정의 파일을 작성해야 합니다. 이 파일은 .proto 확장자를 갖고 있으며, 메시지의 구조와 필드를 정의하는 역할을 합니다. 아래는 간단한 예시입니다.

syntax = "proto3";

message Person {
  string name = 1;
  int32 age = 2;
  repeated string hobbies = 3;
}

2. Protocol Buffers 컴파일

다음으로 작성한 Protocol Buffers 정의 파일을 컴파일해야 합니다. 이를 통해 자바 클래스 파일이 생성됩니다. protoc 명령어를 사용하여 컴파일할 수 있습니다.

protoc --java_out=<output_directory> <proto_file.proto>

여기서 <output_directory>는 생성된 자바 클래스 파일을 저장할 디렉토리를 나타내며, <proto_file.proto>는 작성한 Protocol Buffers 정의 파일을 가리킵니다.

3. Protocol Buffers 메시지 생성

이제 Protocol Buffers 메시지를 생성할 수 있습니다. 자동 생성된 자바 클래스를 사용하여 메시지를 생성할 수 있습니다. 아래는 예시입니다.

Person.Builder personBuilder = Person.newBuilder();
personBuilder.setName("John");
personBuilder.setAge(30);
personBuilder.addHobbies("programming");
personBuilder.addHobbies("reading");

Person person = personBuilder.build();

4. Java 객체로 변환

Protocol Buffers 메시지를 Java 객체로 변환하려면 GeneratedMessageV3.parseFrom() 메서드를 사용하면 됩니다. 아래는 예시입니다.

byte[] serializedPerson = person.toByteArray();
Person parsedPerson = Person.parseFrom(serializedPerson);

위 예시에서 toByteArray() 메서드를 사용하여 Protocol Buffers 메시지를 바이트 배열로 변환한 후, parseFrom() 메서드를 사용하여 Java 객체로 변환합니다.

5. 변환된 Java 객체 사용

이제 parsedPerson 객체를 사용하여 Java에서 Protocol Buffers 메시지의 데이터에 접근할 수 있습니다. 아래는 예시입니다.

String name = parsedPerson.getName();
int age = parsedPerson.getAge();
List<String> hobbies = parsedPerson.getHobbiesList();

위 예시에서는 Protocol Buffers 메시지의 필드에 접근하기 위해 자동 생성된 get 메서드를 사용합니다.

이렇게 Protocol Buffers 메시지를 Java 객체로 변환하고 사용하는 과정을 알아보았습니다. Protocol Buffers는 다양한 언어에서 사용할 수 있는 효율적인 데이터 직렬화 라이브러리로 알려져 있으며, Java에서도 강력한 기능을 제공합니다.

참고 자료