Effective Ruby の項目10に書いてあるけど、

構造化データを扱う際、Hashの配列よりも、
クラスまたは、Struct(簡易クラス、クラスジェネレータ)のような専用の型を、使った方がいい

data[:name]
キー名のような実装の詳細が、隠蔽されず表に出てくる。
また、存在しないキーは、nilとなる

Person = Struct.new(:name, :address) #定数に代入
data = Person.new("foo", "fugafuga")
data.name

Structでは属性になるから、getter, setter も付いているし、
存在しない属性名でアクセスすると、NoMethodErrorになる