OpenStruct
OpenStruct
OpenStruct는 객체에 속성(필드)을 동적으로 만들어 넣을 수 있는 구조체예요. 매번 클래스를 정의하지 않고도 obj.name = 1처럼 필요한 속성을 그때그때 붙여 쓰고 싶을 때 편리하죠. 이 문서는 Ruby 4.0 기준으로 OpenStruct에 정의된 JSON 직렬화(serialization) 관련 메서드를 다뤄요.
출처: Ruby 4.0 API
본문
OpenStruct의 JSON 직렬화는 json/add/ostruct를 require 해서 써요. 이번 페이지에서 다루는 OpenStruct#as_json과 OpenStruct.json_create가 바로 직렬화·역직렬화 한 쌍을 담당해요. as_json이 객체를 해시로 바꾸면, json_create가 그 해시를 다시 OpenStruct 객체로 되돌려 주는 구조예요. 자세한 배경은 Marshal 문서를 함께 보면 좋아요.
Public Class Methods
json_create(object)
as_json을 참고하세요. JSON.create가 직렬화된 해시를 다시 OpenStruct 객체로 복원할 때 호출하는 메서드예요.
Public Instance Methods
as_json(*)
self를 직렬화해서, self를 나타내는 2-요소 해시로 돌려줘요. 코드로 보면 더 쉽죠.
require 'json/add/ostruct'
x = OpenStruct.new('name' => 'Rowdy', :age => nil).as_json
# => {"json_class"=>"OpenStruct", "t"=>{:name=>'Rowdy', :age=>nil}}
이렇게 만들어진 해시는 JSON.create로 다시 OpenStruct 객체가 돼요.
OpenStruct.json_create(x)
# => #<OpenStruct name='Rowdy', age=nil>
to_json(*args)
self를 나타내는 JSON 문자열로 돌려줘요.
require 'json/add/ostruct'
puts OpenStruct.new('name' => 'Rowdy', :age => nil).to_json
출력은 이렇게 나와요.
{"json_class":"OpenStruct","t":{'name':'Rowdy',"age":null}}